Featured image of post 深度学习笔记2-多层感知机

深度学习笔记2-多层感知机

在感知机之上加入隐藏层与非线性激活的前馈神经网络

多层感知机

我在感知机笔记中,记录了单层感知机,它是二分类的线性分类模型,在数据线性可分时,由 Novikoff 定理能够保证在有限步中能做到完全收敛。但无法解决 XOR 等线性不可分问题,这些问题需要多层感知机。

引入隐藏层

异或电路如下图所示:

异或电路

可以看到异或是由两次任务来完成:

  • 在第一部分输入后,输入信号输入到第二部分进行与非和或运算。
  • 完成两个运算后,同时输入到第三部分完成与的运算从而做到异或。

把它转换成感知机表示如下:

感知机异或

可以分析出任务的完成方式:

  • 在输入层接收两个输入x1,x2。
  • 在隐藏层可以做两个并行的感知机,一个做OR运算,一个做NAND运算。
  • 在输出层将两个隐藏层的运算输出的结果做AND运算,从而实现异或逻辑。

通过引入隐藏层,大量感知机的组合可以完成各种各样的复杂任务

多层感知机

MLP是层级化、全连接的神经网络结构,层与层之间无跳过、无循环,相邻层神经元之间全连接(相邻层的任意两个神经元都有连接),整体分为3类核心层(输入层->隐藏层->输出层),结构如下:

多层感知机的一般结构

  1. 输入层:
  • 仅负责接收原始数据/特征,不做任何计算,神经元数量 = 数据的特征维度(如输入是 28×28 的图片,展平后神经元数为784)。
  • 无激活函数,仅传递数据。
  1. 隐藏层
  • MLP 的核心层,可设置1层或多层(多层时称为深度多层感知机),层数/神经元数是关键超参数。
  • 同一层神经元并行提取不同的特征或规则。
  • 后续层的输入为前一层的输出,逐层进行抽象构造出更有效的特征。
  1. 输出层(最终预测结果,神经元数量由任务类型决定)
  • 二分类任务:1个神经元(输出0/1)
  • 多分类任务:神经元数 = 类别数(如MNIST手写数字分类,设10个神经元);
  • 回归任务:1个神经元(输出连续值)

多层线性变换

多层感知机如果在每一层只做线性变换,那么无论多少层隐藏层,MLP 最终等价于单层线性模型。

例如:

  • 第一层输出h = W1x + b1。
  • 第二层输出y = W2h + b2。代入第一层输出得到y = W2(W1x + b1) + b2。

可以看出来仍然是一个一阶线性函数,所以无论堆叠多少层感知机仍然是线性模型。

引入激活函数

在每一层神经元加权求和的输出后,套一个非线性函数再输出,该非线性函数称为激活函数(Activation Function)。

单层感知机中,激活函数为阶跃函数(Step Function)如下图。

一些常用的激活函数

  • ReLU(Rectified Linear Unit) ✅ 最常用 :优点:计算快、缓解梯度消失,适合隐藏层;缺点:存在“死亡ReLU”问题。

  • Sigmoid:优点:输出映射到(0,1),适合二分类输出层;缺点:梯度消失、输出非零均值。

  • Tanh:优点:输出映射到(-1,1),零均值;缺点:仍存在梯度消失。

  • Softmax ✅ 多分类输出层专用,将多个神经元的输出归一化到(0,1),且总和为1,代表样本属于各类别的概率。

万能逼近定理

万能逼近定理(Universal Approximation Theorem, UAT):一个含有足够多神经元的单隐藏层MLP,可以以任意精度逼近任意连续函数。

  • 意味着MLP在理论上具备表达任意连续函数的能力
  • 但实际中,定理只保证存在这样一组参数,不保证梯度下降能学到;且所需神经元数可能随精度指数级增长。

多层感知机的数学表达

由于每一层感知机神经元的输出结果都是上一层输入的组合运算,所以最终结果在数学计算上可以用函数的嵌套来进行表示,即:

  • 层函数:hi(u)= σi(Wiu + bi) (u 为上一层的输出,i 为层号)
  • 输出函数:output = hn(hn-1(…h2(h1(X)))),其中 h1(X) 即输入层到第一层的结果,逐层向后传递。

多层感知机遇到的问题

  • 感知机的学习规则只适用于单层网络
  • 隐藏层神经元需要调整的梯度无从得知
  • 下一次会写反向传播算法的笔记,反向传播算法的作用是得到各个神经元参数需要修改的梯度
使用 Hugo 构建
主题 Stack 由 Jimmy 设计