资讯

仿射层是什么?神经网络中做“乘权重再加偏置”的那一层

2026-11-053 分钟阅读百科
TL;DR仿射层(Affine Layer)即全连接层或线性层,对输入向量做 y = Wx + b 的仿射变换,每个输出神经元与所有输入相连,是多层感知机、Transformer 前馈网络和分类头的基本组件;单独堆叠的仿射层仍等价于一个仿射变换,必须配合非线性激活函数才能表达复杂函数。

仿射层(Affine Layer)是神经网络中最基本的一种层,它对输入进行一次仿射变换:用一个权重矩阵乘以输入向量,再加上一个偏置向量。在不同的深度学习框架和教材中,它也被称为全连接层(Fully Connected Layer)、稠密层(Dense Layer)或线性层(Linear Layer),这几个名称指的是同一个东西。

什么是仿射变换

仿射变换是线性变换再加上一个平移。线性变换可以对空间进行旋转、缩放、拉伸、翻转等操作,但它有一个限制:原点总是映射到原点。仿射变换在线性变换的基础上再加上一个平移,原点就可以被移动到任意的位置。在二维平面上,仿射变换可以把一个正方形变成任意形状的平行四边形,并移动到任意的位置。仿射变换有一个重要的性质:它把直线变成直线,把平行线变成平行线。

在神经网络中,仿射层的计算就是:输出等于权重矩阵乘以输入,再加上偏置。权重矩阵的作用是线性变换,偏置的作用是平移。之所以叫“仿射层”而不只是“线性层”,正是因为它包含了偏置这一平移的部分,严格地说是仿射变换而不是纯粹的线性变换,不过在日常的使用中,“线性层”这个名称也很常见,比如 PyTorch 中就叫作 Linear。

它是怎么连接的

在仿射层中,每一个输出神经元都与所有的输入神经元相连,所以也叫全连接层。假设输入是一个有 784 个元素的向量,比如一张 28 乘 28 像素的手写数字图片展开后的结果,仿射层有 128 个输出神经元,那么它的权重矩阵就有 128 行、784 列,一共约十万个权重,再加上 128 个偏置。每一个输出神经元的值,都等于所有输入值按照各自的权重加权求和,再加上这个神经元的偏置。这些权重和偏置都是在训练过程中通过反向传播和梯度下降学到的。

为什么必须配合激活函数

仿射层本身有一个重要的局限:多个仿射变换组合在一起,结果仍然是一个仿射变换。也就是说,如果只是把很多个仿射层简单地堆叠起来,中间不加任何其他的操作,那么无论堆叠多少层,整个网络的效果都和只有一层仿射层完全一样,只能表示线性的关系,无法学习复杂的模式。因此,在神经网络中,仿射层之后通常要接一个非线性的激活函数,比如 ReLU、Sigmoid、GELU。正是仿射层和非线性激活函数的交替组合,让神经网络具有了逼近几乎任意复杂函数的能力。

仿射层在各种网络中的作用

多层感知机:完全由仿射层和激活函数交替堆叠而成,是最基本的神经网络。卷积神经网络:通常在前面用卷积层提取图像的特征,在最后用一个或几个仿射层把特征转换为各个类别的分数,再通过 softmax 得到分类的概率。卷积层本身也可以看作一种特殊的仿射变换,它的权重是局部连接并且共享的。Transformer:在大语言模型中,仿射层无处不在:注意力机制中计算查询、键和值的投影是仿射层;每一层中的前馈网络由两个仿射层和中间的激活函数组成,通常先把维度扩大几倍再缩回来,这部分占据了模型的大部分参数;最后把隐藏状态转换为词表中每个词的分数,也是一个仿射层。可以说,大语言模型中绝大部分的计算量,都是仿射层中的矩阵乘法,这也正是 GPU 和各类 AI 芯片重点加速的运算。在参数高效的微调方法 LoRA 中,也正是通过给这些仿射层的权重矩阵加上一个低秩的修正,来让模型适应新的任务。