多层感知机 MLP 是什么?由全连接层堆叠而成的基础神经网络
多层感知机(Multilayer Perceptron,MLP)是一种最基本、最经典的前馈神经网络。它由多层神经元组成:一个输入层、一个或多个隐藏层,以及一个输出层,相邻两层之间的神经元全部相互连接,信息从输入层单向地传向输出层。尽管名字里有“感知机”,但它的隐藏层通常使用平滑的非线性激活函数,而不是原始感知机中的阶跃函数。
从感知机到多层感知机
1957 年,弗兰克·罗森布拉特提出了感知机,它只有一层可以学习的权重,本质上是一个线性分类器,只能在空间中画出一条直线或一个平面来分开两类数据。1969 年,马文·明斯基和西摩·派珀特在《感知机》一书中指出,单层感知机连“异或”这样简单的问题都无法解决:异或问题要求两个输入相同时输出 0、不同时输出 1,平面上的这四个点无法用一条直线分开。
解决的办法是在输入层和输出层之间加入隐藏层。比如对于异或问题,只需要一个有两个神经元的隐藏层:第一个神经元判断“两个输入是否至少有一个为 1”,第二个神经元判断“两个输入是否都为 1”,输出层再根据这两个结果进行组合,就能得到正确的答案。隐藏层的作用是把原始的输入变换到一个新的表示空间中,在这个新的空间里,原本线性不可分的问题变得线性可分了。
它的结构和计算
多层感知机的每一层都是一个仿射层,也就是全连接层:每个神经元把上一层所有神经元的输出乘以各自的权重后相加,再加上一个偏置;然后,隐藏层的神经元会把结果送入一个非线性的激活函数,比如 Sigmoid、Tanh 或 ReLU,得到这个神经元的输出,传给下一层。输出层根据任务的不同而不同:回归任务通常直接输出数值;二分类任务使用 Sigmoid 函数输出概率;多分类任务使用 softmax 函数输出各个类别的概率。
非线性激活函数是关键。如果没有它,多层的线性变换组合起来仍然只是一个线性变换,加多少层都相当于一层。正是线性变换和非线性激活的交替组合,赋予了多层感知机强大的表达能力。万能逼近定理指出:只要隐藏层的神经元足够多,即使只有一个隐藏层的多层感知机,也能以任意的精度逼近任何连续函数。
如何训练
多层感知机的训练依赖于反向传播算法。1986 年,大卫·鲁梅尔哈特、杰弗里·辛顿和罗纳德·威廉姆斯在《自然》杂志上发表论文,推广了用反向传播训练多层神经网络的方法:先进行前向计算得到输出,用损失函数计算输出与正确答案之间的误差,再从输出层往回逐层地计算每个权重对误差的梯度,最后用梯度下降法更新所有的权重。这项工作让多层神经网络的训练成为可能,推动了神经网络研究的复兴。
今天的地位
在处理图像时,多层感知机会把图像展开成一个长长的向量,丢失了像素之间的空间结构,而且参数数量巨大,因此在图像任务上被卷积神经网络取代;在处理序列时,它也不如循环神经网络和 Transformer。但多层感知机并没有过时,它仍然是现代深度学习中最基本的组件之一:Transformer 的每一层中都有一个由两层全连接层组成的前馈网络,它实际上就是一个多层感知机,占据了大语言模型的大部分参数;各种模型最后的分类头、预测头通常也是小型的多层感知机。在表格数据、推荐系统中,多层感知机也被广泛使用。2021 年,谷歌的研究者还提出了完全基于多层感知机的图像模型 MLP-Mixer,展示了它在大规模数据上的潜力。