第4章 前馈神经网络

前馈神经网络(也常叫多层感知器)是深度学习的基础模型,核心是通过“多层神经元的非线性组合”,实现对复杂数据的拟合和特征提取。简单说,它就像一个“复杂的函数转换器”——输入原始数据(比如图像像素、文本特征),经过多层处理后,输出预测结果(比如类别、连续值)。

本章会从最基本的“神经元”入手,逐步讲解网络结构、工作原理、参数学习方法,帮你搞懂前馈神经网络的核心逻辑。

4.1 神经元:神经网络的“基本单元”

神经元是构成神经网络的最小单位,灵感来自人脑神经元——接收多个输入信号,经过处理后输出一个信号。

4.1.1 神经元的结构与工作流程

一个典型的神经元有5个核心部分,工作流程就像“信息加工流水线”:

  1. 输入:接收多个输入信号 x1,x2,...,xDx_1, x_2, ..., x_Dx1,x2,...,xD(比如前一层神经元的输出、原始数据特征);
  2. 权重(w):每个输入都对应一个权重 w1,w2,...,wDw_1, w_2, ..., w_Dw1,w2,...,wD,表示这个输入的“重要程度”(权重越大,输入对输出的影响越大);
  3. 偏置(b):调整信号的“基准线”(比如即使所有输入为0,偏置也能让神经元产生输出);
  4. 净输入(z):把输入和权重加权求和,再加上偏置,公式为:
    z=w1x1+w2x2+...+wDxD+b=w⊤x+bz = w_1x_1 + w_2x_2 + ... + w_Dx_D + b = w^{\top}x + bz=w1x1+w2x2+...+wDxD+b=wx+b
  5. 激活函数(f):对净输入做“非线性转换”,输出神经元的最终活性值 a=f(z)a = f(z)a=f(z)(关键!没有激活函数,多层网络和单层线性模型没区别)。

简单总结:神经元的输出 = 激活函数(输入×权重 + 偏置)。

4.1.2 激活函数:让神经元“学会非线性”

激活函数是神经网络能拟合复杂数据的核心,必须满足“连续可导、简单、导数值域合适”的特点(方便参数学习)。下面介绍几种常用的激活函数:

(1)Sigmoid型函数(S形曲线)

核心是“两端饱和”——输入太大或太小时,输出趋于固定值,导数趋近于0。

  • Logistic函数
    σ(x)=11+exp⁡(−x)\sigma(x) = \frac{1}{1 + \exp(-x)}σ(x)=1+exp(x)1
    特点:输出在(0,1)之间,可直接表示概率;缺点:导数最大值仅0.25,容易导致梯度消失(深层网络中梯度越传越小)。
  • Tanh函数
    tanh⁡(x)=exp⁡(x)−exp⁡(−x)exp⁡(x)+exp⁡(−x)\tanh(x) = \frac{\exp(x) - \exp(-x)}{\exp(x) + \exp(-x)}tanh(x)=exp(x)+exp(x)exp(x)exp(x)
    特点:输出在(-1,1)之间,零中心化(避免梯度偏移),导数最大值1,比Logistic函数更稳定;缺点:依然存在两端饱和问题。
  • 简化版(Hard-Logistic/Hard-Tanh):用分段函数近似,计算更快,适合对速度有要求的场景。
(2)ReLU函数(修正线性单元)

目前最常用的激活函数,结构简单、效果好。
ReLU(x)=max⁡(0,x)\text{ReLU}(x) = \max(0, x)ReLU(x)=max(0,x)

  • 特点:输入>0时输出=x(导数=1,避免梯度消失),输入≤0时输出=0(稀疏激活,模拟人脑神经元“部分活跃”);
  • 优点:计算快、梯度稳定、不易过拟合;
  • 缺点:输入≤0时导数=0,可能导致“死亡ReLU”(部分神经元永远不激活,参数无法更新)。
(3)ReLU的改进变种

为了解决ReLU的缺点,衍生出几种变种:

  • Leaky ReLU:输入≤0时输出=γx(γ是很小的常数,比如0.01),保证梯度非零;
  • PReLU:γ是可学习参数,不同神经元可以有不同γ,灵活性更高;
  • ELU:输入≤0时用指数函数,输出更接近零中心,鲁棒性更强;
  • Softplus:ReLU的平滑版,导数是Logistic函数,但没有稀疏激活特性。
(4)自门控激活函数
  • Swish函数Swish(x)=x⋅σ(βx)\text{Swish}(x) = x \cdot \sigma(\beta x)Swish(x)=xσ(βx)
    特点:融合线性和非线性,β可学习,在深层网络中效果优于ReLU;
  • GELU函数GELU(x)=x⋅P(X≤x)\text{GELU}(x) = x \cdot P(X \leq x)GELU(x)=xP(Xx)(P是高斯分布累积分布)
    特点:类似Swish,更符合自然语言处理等任务的特性,被Transformer广泛使用。
(5)Maxout单元

和上面的激活函数不同,Maxout是“基于竞争的激活”:

  • 原理:每个Maxout单元接收前一层的所有输出,用K个权重向量计算K个净输入,输出其中最大值;
  • 特点:可近似任意凸函数,天然避免梯度消失,但参数数量会增加(K倍)。

4.1.3 激活函数对比表

激活函数 核心公式 优点 缺点
Logistic 1/(1+exp⁡(−x))1/(1+\exp(-x))1/(1+exp(x)) 输出可表示概率,平滑连续 梯度消失,非零中心
Tanh (exp⁡(x)−exp⁡(−x))/(exp⁡(x)+exp⁡(−x))(\exp(x)-\exp(-x))/(\exp(x)+\exp(-x))(exp(x)exp(x))/(exp(x)+exp(x)) 零中心,梯度比Logistic大 依然存在梯度消失
ReLU max⁡(0,x)\max(0, x)max(0,x) 计算快,梯度稳定,稀疏激活 死亡ReLU问题
Leaky ReLU max⁡(x,γx)\max(x, \gamma x)max(x,γx) 解决死亡ReLU,梯度非零 γ需手动调整
Swish x⋅σ(βx)x \cdot \sigma(\beta x)xσ(βx) 深层网络效果好,融合线性与非线性 计算略复杂
GELU x⋅P(X≤x)x \cdot P(X \leq x)xP(Xx) 适合NLP任务,鲁棒性强 近似计算需额外开销

4.2 网络结构:神经元如何“组队工作”

单个神经元的能力有限,神经网络的核心是“神经元按特定结构连接”,形成强大的拟合能力。目前常用的网络结构分三类:

4.2.1 前馈网络(本章重点)

  • 核心特点:信息单向传播,没有环路(输入层→隐藏层→输出层),可用“有向无环图”表示;
  • 结构组成
    • 输入层:接收原始数据(比如图像的像素向量、文本的特征向量),无激活函数;
    • 隐藏层:位于输入层和输出层之间,可多层,每层用非线性激活函数(提取高层特征);
    • 输出层:输出预测结果(分类任务用Softmax,回归任务用线性激活);
  • 核心作用:通过多层非线性转换,把原始数据映射到目标空间(比如从像素向量映射到“猫/狗”类别概率)。

4.2.2 记忆网络(反馈网络)

  • 核心特点:神经元可以接收自身的历史信息(有反馈环路),具有“记忆能力”;
  • 典型例子:循环神经网络(RNN)、Hopfield网络、玻尔兹曼机;
  • 核心作用:处理时序数据(比如语音、文本),因为需要依赖历史信息(比如理解“他”指代前文的“小明”)。

4.2.3 图网络

  • 核心特点:输入是图结构数据(比如社交网络、知识图谱),每个节点对应一个神经元,节点之间的连接对应图的边;
  • 典型例子:图卷积网络(GCN)、图注意力网络(GAT);
  • 核心作用:处理不规则结构数据(比如分子结构、交通网络),传统前馈网络无法直接处理。

4.3 前馈神经网络:多层神经元的“协同工作”

前馈神经网络(FNN)是最基础的深层模型,也叫“多层感知器(MLP)”——注意:它不是“多层感知器算法”,而是“多层带非线性激活的神经元网络”。

4.3.1 网络的数学表达

假设网络有 L 层(隐藏层+输出层),各层的记号和信息传播过程如下:

  • 记号定义:
    • MlM_lMl:第 l 层的神经元数量;
    • W(l)W^{(l)}W(l):第 l−1l-1l1 层到第 l 层的权重矩阵(大小 Ml×Ml−1M_l \times M_{l-1}Ml×Ml1);
    • b(l)b^{(l)}b(l):第 l 层的偏置向量(大小 MlM_lMl);
    • z(l)z^{(l)}z(l):第 l 层的净输入(未激活的输出);
    • a(l)a^{(l)}a(l):第 l 层的活性值(激活后的输出),a(0)=xa^{(0)} = xa(0)=x(输入层)。
  • 信息传播公式(前馈过程):
    z(l)=W(l)a(l−1)+b(l)z^{(l)} = W^{(l)}a^{(l-1)} + b^{(l)}z(l)=W(l)a(l1)+b(l)
    a(l)=fl(z(l))a^{(l)} = f_l(z^{(l)})a(l)=fl(z(l))
    flf_lfl 是第 l 层的激活函数,比如隐藏层用ReLU,输出层用Softmax)

简单说:每一层都是“加权求和+非线性激活”的组合,多层叠加后形成复杂的函数映射。

4.3.2 通用近似定理:为什么深层网络这么强?

通用近似定理是前馈神经网络的理论基础,核心结论:

只要隐藏层的神经元数量足够多,并且使用“挤压型激活函数”(比如Sigmoid、ReLU),前馈神经网络可以以任意精度近似定义在有界闭集上的连续函数

通俗理解:不管数据的真实规律多复杂(比如图像分类、语音识别的底层映射),只要网络的隐藏层足够宽(神经元足够多),就能“模仿”这个规律。

  • 注意事项:
    1. 定理只保证“存在这样的网络”,不告诉我们“怎么找到这个网络”(需要通过参数学习);
    2. 网络太宽容易过拟合(死记硬背训练数据,泛化能力差),需要正则化。

4.3.3 前馈网络的应用:机器学习任务

前馈网络本质是“非线性特征转换器+分类/回归器”,应用流程:

  1. 输入原始数据 x(比如图像像素向量);
  2. 经过多层隐藏层,自动学习高层特征 a(L−1)a^{(L-1)}a(L1)(比如图像的边缘→纹理→物体部件);
  3. 输出层根据任务类型输出结果:
    • 二分类:1个神经元+Sigmoid激活,输出概率 p(y=1∣x)p(y=1|x)p(y=1∣x)
    • 多分类:C 个神经元+Softmax激活,输出各类别概率;
    • 回归:1个神经元+线性激活,输出连续值。

4.4 反向传播算法:如何“教会”网络学习?

前馈网络的参数(权重W(l)W^{(l)}W(l)、偏置 b(l)b^{(l)}b(l)需要通过“学习”得到,核心方法是反向传播算法(BP算法) ——利用链式法则,从输出层反向计算损失函数对每层参数的梯度,再用梯度下降法更新参数。

4.4.1 核心思想:误差反向传播

  1. 前馈计算:从输入层到输出层,计算每层的 z(l)z^{(l)}z(l)a(l)a^{(l)}a(l),得到最终输出 y^\hat{y}y^
  2. 计算损失:用损失函数(比如交叉熵)衡量 y^\hat{y}y^ 与真实标签 yyy的差距;
  3. 反向传播误差:从输出层开始,计算每层的“误差项”δ(l)=∂L∂z(l)\delta^{(l)} = \frac{\partial \mathcal{L}}{\partial z^{(l)}}δ(l)=z(l)L(损失对该层净输入的梯度),误差项通过下一层的误差项推导得到;
  4. 计算梯度:用误差项计算损失对权重 W(l)W^{(l)}W(l) 和偏置 b(l)b^{(l)}b(l)的梯度;
  5. 更新参数:用梯度下降法调整参数,减小损失。

4.4.2 关键公式(简化版)

假设损失函数为 L(y,y^)\mathcal{L}(y, \hat{y})L(y,y^),核心公式如下:

  1. 误差项传播
    输出层(l=Ll=Ll=L):δ(L)=∂L∂z(L)\delta^{(L)} = \frac{\partial \mathcal{L}}{\partial z^{(L)}}δ(L)=z(L)L(直接由损失函数和输出层激活函数推导,比如Softmax+交叉熵时,δ(L)=y^−y\delta^{(L)} = \hat{y} - yδ(L)=y^y);
    隐藏层(l<Ll < Ll<L):δ(l)=fl′(z(l))⊙(W(l+1))⊤δ(l+1)\delta^{(l)} = f_l'(z^{(l)}) \odot (W^{(l+1)})^{\top}\delta^{(l+1)}δ(l)=fl(z(l))(W(l+1))δ(l+1)
    ⊙\odot) 是元素-wise乘法,fl′(z(l))f_l'(z^{(l)})fl(z(l))是激活函数的导数)
  2. 参数梯度
    权重梯度:∂L∂W(l)=δ(l)(a(l−1))⊤\frac{\partial \mathcal{L}}{\partial W^{(l)}} = \delta^{(l)}(a^{(l-1)})^{\top}W(l)L=δ(l)(a(l1))
    偏置梯度:∂L∂b(l)=δ(l)\frac{\partial \mathcal{L}}{\partial b^{(l)}} = \delta^{(l)}b(l)L=δ(l)
  3. 参数更新
    W(l)←W(l)−α(1N∑n=1Nδ(l)(a(l−1))⊤+λW(l))W^{(l)} \leftarrow W^{(l)} - \alpha \left( \frac{1}{N}\sum_{n=1}^N \delta^{(l)}(a^{(l-1)})^{\top} + \lambda W^{(l)} \right)W(l)W(l)α(N1n=1Nδ(l)(a(l1))+λW(l))
    b(l)←b(l)−α⋅1N∑n=1Nδ(l)b^{(l)} \leftarrow b^{(l)} - \alpha \cdot \frac{1}{N}\sum_{n=1}^N \delta^{(l)}b(l)b(l)αN1n=1Nδ(l)
    α\alphaα) 是学习率,λ\lambdaλ 是正则化系数,避免过拟合)

4.4.3 反向传播的直观理解

误差项 δ(l)\delta^{(l)}δ(l) 可以理解为“第 lll 层神经元对最终损失的贡献程度”——输出层的误差直接由预测错误决定,隐藏层的误差由下一层的误差“反向传递”而来。

反向传播算法的核心价值:高效计算梯度,避免了对每个参数单独求导的巨大开销(复杂度从 (O(N2)O(N^2)O(N2)) 降到 O(N)O(N)O(N)),让深层网络的训练成为可能。

4.5 自动梯度计算:不用手动推公式

手动推导反向传播的梯度公式繁琐且容易出错,深度学习框架(比如PyTorch、TensorFlow)的核心功能之一就是“自动梯度计算”——只需定义网络结构和损失函数,框架自动计算参数梯度。

自动梯度计算的方法分三类:

4.5.1 数值微分:最简单但最不准

  • 原理:用“微小扰动法”近似梯度,比如 f′(x)≈f(x+Δx)−f(x−Δx)2Δxf'(x) \approx \frac{f(x+\Delta x) - f(x-\Delta x)}{2\Delta x}f(x)xf(x+Δx)f(xΔx)
  • 优点:实现简单,不用懂链式法则;
  • 缺点:精度低(Δx\Delta xΔx) 太小导致舍入误差,太大导致截断误差),计算量大(参数多时有 (O(N2)O(N^2)O(N2)) 复杂度),仅用于验证梯度是否正确。

4.5.2 符号微分:基于数学表达式推导

  • 原理:对数学表达式直接应用求导规则,比如 f(x)=x2+sin⁡(x)f(x) = x^2 + \sin(x)f(x)=x2+sin(x),导数为 2x+cos⁡(x)2x + \cos(x)2x+cos(x)
  • 优点:精度高,可得到解析解;
  • 缺点:编译时间长,不支持复杂程序逻辑(比如循环、条件判断),调试困难。

4.5.3 自动微分:深度学习框架的核心

  • 原理:结合数值微分和符号微分的优点,把复合函数拆成“基本运算”(+、-、×、/、exp、log等),在“前向计算时记录运算图”,“反向计算时沿运算图用链式法则自动累积梯度”;
  • 两种模式:
    • 前向模式:按计算顺序累积梯度,适合输入维度低、输出维度高的场景;
    • 反向模式:按计算逆序累积梯度,适合输入维度高、输出维度低的场景(比如神经网络,损失函数是标量);
  • 优点:精度高、计算高效、支持复杂程序逻辑,是目前最主流的梯度计算方法。

静态计算图vs动态计算图

  • 静态计算图(TensorFlow 1.x):先定义运算图,再执行计算,优化好但灵活性差;
  • 动态计算图(PyTorch、TensorFlow 2.x):边计算边构建运算图,灵活性高,适合科研和快速迭代。

4.6 前馈网络的优化难题

和线性模型不同,前馈网络的优化面临两个核心问题:

4.6.1 非凸优化问题

线性模型的损失函数是“凸函数”(只有一个全局最优解),而神经网络的损失函数是“非凸函数”(有很多局部最优解)。

  • 直观理解:损失函数的“地形”像山地,有很多小山峰(局部最优解)和一个最高峰(全局最优解);
  • 影响:梯度下降法可能陷入局部最优解,导致模型性能不佳;
  • 缓解方法:
    1. 随机初始化参数(多次初始化找较好的局部最优);
    2. 用随机梯度下降(SGD),噪声帮助逃离局部最优;
    3. 用动量、Adam等优化算法,加速收敛并避免陷入局部最优。

4.6.2 梯度消失问题

深层网络中,误差反向传播时,梯度会随着层数增加而不断衰减,甚至趋近于0——这就是“梯度消失”,导致浅层网络的参数几乎无法更新。

  • 原因:使用Sigmoid、Tanh等激活函数,它们的导数最大值≤1,多层相乘后梯度趋近于0;
  • 解决方法:
    1. 用ReLU及其变种(输入>0时导数=1,梯度不衰减);
    2. 批量归一化(BatchNorm),稳定每层的输入分布,缓解梯度消失;
    3. 残差连接(ResNet),直接把浅层特征传到深层,避免梯度衰减。

4.7 总结

前馈神经网络是深度学习的“基石”,核心是“多层非线性转换+反向传播训练”,能拟合复杂数据规律,是后续卷积网络、Transformer等模型的基础。

核心要点

  1. 神经元的核心是“激活函数”,选择合适的激活函数(比如ReLU)是网络训练成功的关键;
  2. 前馈网络的信息传播是“单向的”,参数学习依赖反向传播算法(高效计算梯度);
  3. 自动梯度计算让我们不用手动推公式,专注于网络结构设计;
  4. 优化难题(非凸、梯度消失)可通过“合适的激活函数+优化算法+正则化”缓解。

深入阅读推荐

  • 想系统学激活函数:《Searching for Activation Functions》(Ramachandran等);
  • 想深入反向传播和自动微分:《Automatic Differentiation in Machine Learning: A Survey》;
  • 想了解前馈网络的理论基础:《Pattern Recognition and Machine Learning》(Bishop)第5章。
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐