字体大小
第三编 神经网络与深度学习的兴起 · 03_第三编_神经网络与深度学习的兴起/第11章_多层神经网络与反向传播/chapter.md

第11章 多层神经网络与反向传播

本章核心问题

多层神经网络的参数为何能够在高维空间中被有效训练?

更具体地说,第10章已经说明,单层感知机的真正失败并不在于“神经网络思想错误”,而在于单层阈值结构只能表示线性可分边界。若想突破 XOR 一类问题所暴露的结构上限,就必须引入多层网络;但一旦网络变成多层复合结构,参数之间的耦合立刻显著增强,训练也随之变得困难。本章要回答的,正是这个历史上的关键问题:多层网络为什么理论上更强,它的梯度究竟如何计算,反向传播又为何第一次让多层神经网络成为可训练模型。

1. 问题背景

第10章的结论相当明确:单层阈值神经元本质上只能形成超平面判别,因此无法处理非线性可分任务。XOR 之所以在历史上如此重要,正因为它不是复杂任务,却足以说明单层结构的表达边界。于是,神经网络研究者很自然地想到:若一个神经元不够,那么能否通过多层组合,让前一层提取中间特征,再由后一层进一步组合这些特征,从而形成更复杂的函数?

从表示角度看,这种想法与第二编的主线是连贯的。第二编一直在处理“表示从哪里来”的问题:第7章通过基函数扩展提高非线性表达能力,第8章通过核方法隐式引入高维特征空间,第9章则进一步把表示问题推进到无监督结构发现。多层神经网络与这些方法的根本差别,在于它试图不再依赖人工手工指定的基函数或固定核函数,而是直接把表示本身写进参数化模型中,让网络在训练过程中逐层学习这些表示。

但一旦走到这一步,新的困难立刻出现。对单层感知机而言,误分类样本可以直接驱动参数修正,因为输出与参数之间只有一层简单关系;而在多层网络中,输出是许多线性变换和非线性激活的复合结果。最外层误差如何传递到最内层参数,不再一眼可见。若没有一套系统方法计算这些梯度,那么“多层结构理论上更强”就仍然只是设想,而不是可训练模型。

因此,本章的历史任务非常清楚:它要把“多层网络”从表达能力上的可能性,推进到训练算法上的现实性。也正是在这个意义上,反向传播并不是一个普通技巧,而是现代神经网络训练真正得以成立的关键机制。

2. 数学原理

2.1 多层网络是复合函数

设输入向量为

$$ x\in\mathbb R^{d_0}, $$

这里 $d_0$ 表示输入维数。多层前馈神经网络的核心思想,是把一个复杂函数分解成许多层简单变换的复合。为了说明这一点,先考虑一个两层隐藏层的前馈网络。记第 $\ell$ 层的线性输入为 $z^{(\ell)}$,激活输出为 $a^{(\ell)}$,则网络的前向计算可以写成

$$ z^{(1)}=W^{(1)}x+b^{(1)}. $$
$$ a^{(1)}=\sigma\big(z^{(1)}\big). $$
$$ z^{(2)}=W^{(2)}a^{(1)}+b^{(2)}. $$
$$ a^{(2)}=\sigma\big(z^{(2)}\big). $$
$$ z^{(3)}=W^{(3)}a^{(2)}+b^{(3)}. $$
$$ \hat y=g\big(z^{(3)}\big). $$

这里 $W^{(\ell)}$ 表示第 $\ell$ 层的权重矩阵,$b^{(\ell)}$ 表示第 $\ell$ 层的偏置向量,$\sigma(\cdot)$ 表示隐藏层激活函数,$g(\cdot)$ 表示输出层函数,$\hat y$ 表示网络预测输出。若任务是回归,$g$ 可以取恒等映射;若任务是二分类,$g$ 可以取 sigmoid;若任务是多分类,$g$ 通常取 softmax。

若第 $\ell$ 层有 $d_\ell$ 个神经元,那么这些对象的维数关系是

$$ W^{(\ell)}\in\mathbb R^{d_\ell\times d_{\ell-1}},\quad b^{(\ell)}\in\mathbb R^{d_\ell},\quad z^{(\ell)}\in\mathbb R^{d_\ell},\quad a^{(\ell)}\in\mathbb R^{d_\ell}. $$

这些维数关系并不是形式上的细节,而是理解反向传播时非常关键的结构信息。因为后面无论是误差项 $\delta^{(\ell)}$ 的定义,还是梯度 $\partial L/\partial W^{(\ell)}$ 的形状,都必须与这些维数严格匹配。

这个写法看似只是层层套嵌,但它揭示了一个核心事实:多层神经网络本质上是复合函数

$$ \hat y=f_\theta(x)=f^{(3)}\circ f^{(2)}\circ f^{(1)}(x), $$

其中 $\theta$ 表示全部参数的集合。这里的“强大表达能力”并不来自某一层本身特别神秘,而是来自这些简单变换经过层次组合后形成的层级结构。前一层产生的输出,不再只是最终结果,而是后一层的输入;因此网络实际上是在逐层构造中间表示。也正因为输出依赖于所有前层参数,训练时才会出现“早层参数如何知道自己该往哪个方向改”这一核心问题。

2.2 为什么需要非线性激活函数

若每一层都只是线性变换,即

$$ a^{(\ell)}=W^{(\ell)}a^{(\ell-1)}+b^{(\ell)}, $$

则多层网络的复合仍然可以化简成一个单层线性变换。以两层为例,

$$ a^{(2)}=W^{(2)}(W^{(1)}x+b^{(1)})+b^{(2)}. $$

把括号展开后,可得

$$ a^{(2)}=\big(W^{(2)}W^{(1)}\big)x+\big(W^{(2)}b^{(1)}+b^{(2)}\big). $$

这说明即使把线性层堆得再多,最终仍然只是一个新的仿射变换。换言之,若没有非线性激活函数,多层结构在表达能力上并不会真正超越单层线性模型。

因此,激活函数 $\sigma(\cdot)$ 的加入不是装饰,而是让“层次组合真正产生新函数类”的必要条件。它至少有两层作用。第一,它阻止整个网络塌缩为一个单层线性映射。第二,它让网络可以表示弯曲边界、局部变化和更复杂的函数形态,这正是单层感知机做不到的事情。

常见的早期激活函数包括 sigmoid:

$$ \sigma(z)=\frac{1}{1+e^{-z}}, $$

以及双曲正切函数:

$$ \tanh(z)=\frac{e^z-e^{-z}}{e^z+e^{-z}}. $$

这里 $e^z$ 表示指数函数。它们的共同特点是平滑、连续可导,这一点与第10章中的阶跃函数形成了重要区别。阶跃函数能用于定义“是否激活”,却几乎不能提供稳定的导数信息;而 sigmoid 与 $\tanh$ 虽然也各有训练上的局限,但至少让“用微分来指导参数更新”成为可能。正是这种可导性,使后面基于梯度的训练成为可能。

2.3 从单个样本损失到整体训练目标

设训练集为

$$ \mathcal D_n=\{(x_i,y_i)\}_{i=1}^n. $$

这里 $x_i$ 是第 $i$ 个输入样本,$y_i$ 是对应目标。给定网络预测 $\hat y_i=f_\theta(x_i)$,记单样本损失函数为

$$ L(y_i,\hat y_i). $$

这里 $L$ 的具体形式取决于任务:回归中常见平方损失,分类中常见交叉熵或对数损失。于是,总体经验风险可以写成

$$ J(\theta)=\frac{1}{n}\sum_{i=1}^n L\big(y_i,f_\theta(x_i)\big). $$

这里 $J(\theta)$ 表示关于参数 $\theta$ 的训练目标。多层网络训练的本质,就是最小化这个目标函数。

需要特别强调的是,困难并不在于把目标写出来,而在于如何对它求导。对于输出层附近的参数,损失与参数之间的关系还比较直接;但对最前面的参数来说,它们对损失的影响要经过很多层中间变量才能传到输出端。也就是说,真正困难的问题不是“训练目标是什么”,而是“早层参数对最终损失到底贡献了多少”。反向传播要解决的正是这个梯度计算问题。

2.4 先看一层:梯度为何来自链式法则

为了真正理解反向传播,先看最简单的情形。设某一层的输出为

$$ a=\sigma(z). $$
$$ z=wx+b. $$

这里为了书写简洁,只考虑一维情形;$w$ 是参数,$x$ 是输入,$b$ 是偏置。若损失函数写成 $L=L(a)$,则对参数 $w$ 的导数应如何计算?

由于 $L$ 并不直接以 $w$ 为自变量,而是通过

$$ w \longrightarrow z \longrightarrow a \longrightarrow L $$

这一依赖链条间接依赖于 $w$,因此根据链式法则,有

$$ \frac{\partial L}{\partial w}=\frac{\partial L}{\partial a}\frac{\partial a}{\partial z}\frac{\partial z}{\partial w}. $$

这个公式中的三项分别对应三种不同含义。$\partial L/\partial a$ 描述的是“输出 $a$ 稍微变化时,损失会怎样变化”;$\partial a/\partial z$ 描述的是“中间量 $z$ 的变化会怎样传到激活输出 $a$”;$\partial z/\partial w$ 描述的是“参数 $w$ 的变化会怎样影响线性输入 $z$”。链式法则之所以重要,就在于它把一条长依赖链拆成了若干个局部变化率的乘积。

又因为 $a=\sigma(z)$,所以

$$ \frac{\partial a}{\partial z}=\sigma'(z), $$

而 $z=wx+b$,所以

$$ \frac{\partial z}{\partial w}=x. $$

因此可得

$$ \frac{\partial L}{\partial w}=\frac{\partial L}{\partial a}\sigma'(z)x. $$

这就是反向传播最核心的微分结构:损失对早层参数的影响,不是直接给出的,而是要沿着“损失对输出、输出对中间量、中间量对参数”的链条逐步乘回去。多层网络中的情形虽然维数更高、符号更多,但本质上做的仍然是同一件事。

这个简单例子还揭示了后面训练中的一个重要现象。若链条中的某一项非常小,那么整个乘积就可能变得很小;若某一项非常大,整个乘积又可能迅速放大。后来深层网络中著名的梯度消失与梯度爆炸问题,根源就来自这种多层链式相乘结构。

2.5 多层情形下的误差项

现在回到多层网络。为了使公式更清晰,考虑一个标准前馈网络:

$$ z^{(\ell)}=W^{(\ell)}a^{(\ell-1)}+b^{(\ell)}. $$
$$ a^{(\ell)}=\sigma\big(z^{(\ell)}\big). $$

其中 $a^{(0)}=x$。为了统一描述梯度传播,引入第 $\ell$ 层的误差项

$$ \delta^{(\ell)}=\frac{\partial L}{\partial z^{(\ell)}}. $$

这里 $\delta^{(\ell)}$ 表示损失函数对第 $\ell$ 层线性输入 $z^{(\ell)}$ 的偏导向量。这个定义非常重要,因为它把看起来复杂的梯度计算压缩成了“每一层先求一个误差项,再由误差项恢复对参数的导数”。

之所以把误差定义在 $z^{(\ell)}$ 上,而不是直接定义在 $a^{(\ell)}$ 上,是因为参数 $W^{(\ell)}$ 与 $b^{(\ell)}$ 出现在更基础的线性关系

$$ z^{(\ell)}=W^{(\ell)}a^{(\ell-1)}+b^{(\ell)} $$

中。只要知道了损失对 $z^{(\ell)}$ 的导数,求参数梯度就会变得非常直接。因此,$\delta^{(\ell)}$ 可以理解成“损失对本层线性输入的敏感度”,它是连接链式法则和参数更新的中介量。

对于输出层,若输出写成 $a^{(L)}$,则通常先有

$$ \delta^{(L)}=\frac{\partial L}{\partial a^{(L)}}\odot \sigma'\big(z^{(L)}\big). $$

这里 $\odot$ 表示 Hadamard 乘积,也就是向量按分量相乘。这个公式说明:输出层误差等于“损失对输出的敏感度”乘上“输出对线性输入的局部导数”。

从解释上看,这个式子很自然。若某个输出分量对损失很敏感,那么它应当产生较大的回传信号;但若该分量对应的激活函数在当前位置几乎已经饱和,导数很小,那么这条信号又会被削弱。输出层误差正是这两种因素共同作用后的结果。

2.6 误差为什么能够逐层反向传播

接下来考虑某一隐藏层 $\ell$。由于第 $\ell$ 层并不直接与损失函数相连,它对损失的影响必须通过下一层传递。因此,仍然利用链式法则,可以得到

$$ \delta^{(\ell)}=\big((W^{(\ell+1)})^\top \delta^{(\ell+1)}\big)\odot \sigma'\big(z^{(\ell)}\big). $$

这个公式是反向传播的真正核心。为了理解它,最好把它拆成两部分来看。

第一部分是

$$ (W^{(\ell+1)})^\top \delta^{(\ell+1)}. $$

这里 $(W^{(\ell+1)})^\top$ 是下一层权重矩阵的转置,它把“下一层误差”传播回当前层。其含义是:当前层每个神经元对最终损失的影响,要通过它连接到下一层各单元的权重重新加权汇总。

转置之所以出现,是因为前向传播时,当前层激活 $a^{(\ell)}$ 通过矩阵 $W^{(\ell+1)}$ 映射到下一层线性输入 $z^{(\ell+1)}$;而反向传播时,我们要做的是相反方向的灵敏度汇总。也就是说,前向是“信号往前走”,反向是“影响往回算”,于是矩阵自然以转置形式出现。

第二部分是

$$ \sigma'\big(z^{(\ell)}\big), $$

它表示当前层激活函数在本地的导数。即使来自下一层的误差信号很大,若当前单元在本地几乎不敏感,则误差也不会有效通过。

把这两部分按分量相乘,就得到当前层误差项。也就是说,所谓“反向传播”,本质上就是:从输出层误差开始,利用转置权重矩阵和激活函数导数,逐层把误差信息往回传。

2.7 参数梯度如何由误差项恢复

一旦得到了每层误差项 $\delta^{(\ell)}$,对参数的导数便很容易写出。因为

$$ z^{(\ell)}=W^{(\ell)}a^{(\ell-1)}+b^{(\ell)}, $$

所以有

$$ \frac{\partial L}{\partial W^{(\ell)}}=\delta^{(\ell)}(a^{(\ell-1)})^\top, $$

以及

$$ \frac{\partial L}{\partial b^{(\ell)}}=\delta^{(\ell)}. $$

第一个公式说明:某一层权重矩阵的梯度,等于该层误差向量与前一层激活向量的外积;第二个公式说明:偏置梯度就是该层误差本身。

这个外积结构很值得细看。设 $W^{(\ell)}_{ij}$ 表示第 $\ell$ 层中从前一层第 $j$ 个神经元连到当前层第 $i$ 个神经元的权重,那么有

$$ \frac{\partial L}{\partial W^{(\ell)}_{ij}}=\delta^{(\ell)}_i\,a^{(\ell-1)}_j. $$

这里 $\delta^{(\ell)}_i$ 表示当前层第 $i$ 个神经元的误差信号,$a^{(\ell-1)}_j$ 表示前一层第 $j$ 个神经元送来的输入强度。这个式子非常直观:一条连接的梯度,等于“这条连接接收端有多想修正”乘上“这条连接发送端当前送来了多少信号”。矩阵形式不过是把所有这样的局部关系一次性整合起来。

于是,整套训练过程就形成了非常清楚的分工:

  1. 前向传播,计算各层的 $z^{(\ell)}$ 和 $a^{(\ell)}$
  2. 从输出层开始计算 $\delta^{(L)}$
  3. 利用递推公式向前传播所有 $\delta^{(\ell)}$
  4. 再由误差项恢复对各层参数的梯度

这就是为什么反向传播第一次真正让多层网络可训练:它把原本看似不可处理的高维耦合梯度,系统化地拆成了逐层递推问题。

2.8 梯度下降训练

得到梯度后,训练参数最直接的方法就是梯度下降。对任意一层参数,可写成更新公式

$$ W^{(\ell)}\leftarrow W^{(\ell)}-\eta \frac{\partial J}{\partial W^{(\ell)}}, $$
$$ b^{(\ell)}\leftarrow b^{(\ell)}-\eta \frac{\partial J}{\partial b^{(\ell)}}. $$

这里 $\eta>0$ 表示学习率,$J$ 表示整体经验风险。这个更新式说明:反向传播本身并不是优化算法,而是一种高效计算梯度的机制;真正推动参数迭代的,仍然是梯度下降或其变体。

这一区分非常重要。很多时候人们把“反向传播”与“训练神经网络”混为一谈,但更准确地说,反向传播解决的是“梯度怎么算”,梯度下降解决的是“参数怎么更新”。前者属于微分计算问题,后者属于优化迭代问题。没有前者,后者就不知道该往哪里走;只有前者而没有后者,梯度也不会自动把参数推向更优位置。

从历史角度看,这种分工的意义极大。多层网络长期存在的障碍,不是研究者不知道“应当降低损失”,而是不知道怎样高效而系统地计算高维参数空间中的全部偏导。反向传播正是在这一点上打通了从可表达性到可训练性的关键桥梁。

2.9 通用逼近定理的意义

多层神经网络之所以重新获得理论吸引力,不只因为它们能训练,还因为它们在函数表达能力上确实超越单层线性模型。一个经典结论是通用逼近定理。粗略地说,对于足够好的非线性激活函数,具有单隐藏层但隐藏单元数足够多的网络,可以在紧集上逼近任意连续函数。

若把一类单隐藏层网络写成

$$ f(x)=\sum_{j=1}^m \alpha_j \sigma(w_j^\top x+b_j), $$

这里 $m$ 是隐藏单元个数,$\alpha_j$ 是输出层系数,$w_j$ 与 $b_j$ 是隐藏层参数,则通用逼近定理说明:当 $m$ 足够大时,这类函数可以逼近非常广泛的目标函数。

这个结论的重要性不在于“只要够宽就万能”,而在于它从理论上回答了第10章留下的问题:多层结构并非只是经验拼接,而确实具有远超单层阈值单元的函数表达能力。也就是说,XOR 所暴露的结构边界,在更一般的多层网络中理论上可以被突破。

但要避免把这个定理理解得过头。通用逼近定理首先是一个存在性结论,它说明“存在某组参数”可以把目标函数逼近得很好;它并没有说明这组参数是否容易找到,也没有说明训练过程是否稳定,更没有说明在有限数据、有限算力和有限时间下能否有效学到它。因此,“能表示”和“能顺利训练出来”是两个不同层次的问题,本章前半部分回答的是后者如何可能,本节回答的是前者为何值得追求。

2.10 为什么“能训练”还不等于“已经成功”

到这里,本章已经回答了一个关键问题:多层网络为何能够训练。因为只要网络由可导复合函数组成,链式法则就允许误差信号逐层传播,进而计算全部参数梯度。

但这并不意味着深层神经网络在实践上已经大获成功。随着层数加深,梯度在多层链式相乘中可能变得极小或极大;训练数据规模与计算资源也可能不足;参数初始化、优化稳定性与泛化问题都会继续出现。换言之,反向传播解决的是“训练多层网络的原则性可行性”,而不是“深度学习实践中的全部困难”。

这一区分尤其重要,因为它帮助我们理解神经网络历史中的两次不同转折。第一次转折是理论与算法上的:人们终于知道多层网络可以怎样求梯度。第二次转折则是工程与规模上的:人们后来才逐渐具备让这些网络在大数据、大模型和长时间训练下真正成功的条件。若不把这两层意义区分开,就会误以为反向传播一出现,深度学习便理所当然地立刻崛起;而真实历史并非如此。

这也是为什么第11章与第12章之间必须紧密衔接:第11章回答“为什么多层网络可以训练”,第12章则要回答“为什么直到更晚时期,这种可训练性才真正转化为大规模成功”。

3. 代表模型或算法

3.1 多层感知机

多层感知机(MLP)是最典型的前馈神经网络模型。其结构可以概括为多次重复的“仿射变换 + 非线性激活”:

$$ a^{(\ell)}=\sigma\big(W^{(\ell)}a^{(\ell-1)}+b^{(\ell)}\big). $$

结构上,它由输入层、一个或多个隐藏层和输出层组成;训练方式上,通常通过最小化经验风险并结合反向传播与梯度下降来调整参数;推理方式上,则对新样本执行一次前向传播,最终输出预测值。

它在本章中的典型性极强,因为这正是“多层结构突破单层表达边界”的最直接实现形式。现代深度学习中的许多复杂架构,若抽去专门设计,仍然可以看作多层感知机思想的扩展。

3.2 反向传播算法

反向传播不是单独的模型,而是训练多层网络的核心算法机制。它的基本流程是:

  1. 前向传播,计算各层 $z^{(\ell)}$、$a^{(\ell)}$ 和最终损失 $L$
  2. 在输出层计算误差项 $\delta^{(L)}$
  3. 利用链式法则递推得到所有隐藏层误差项 $\delta^{(\ell)}$
  4. 再由误差项求出各层参数梯度
  5. 最后结合梯度下降更新参数

训练方式上,它与梯度下降配合使用;推理方式上,则不需要反向过程,只需保留前向传播。它在本章中的典型性毋庸置疑,因为它第一次把“多层网络可以表达复杂函数”这一直觉,转化成了“多层网络可以被系统训练”的现实。

4. 典型应用

4.1 非线性分类

第10章已经说明,单层感知机只能形成超平面边界,因此无法处理 XOR 一类非线性可分任务。多层感知机则不同。若隐藏层先把输入映射成若干中间特征,再由输出层组合这些特征,就可以形成分段、弯曲或更复杂的判别边界。

在这个应用中,本章的数学结构对应关系十分清楚:隐藏层权重矩阵 $W^{(1)},W^{(2)},\dots$ 负责学习中间表示,激活函数 $\sigma(\cdot)$ 提供非线性,反向传播则负责把分类误差逐层传回,最终修正各层参数。因此,“非线性分类之所以可学”,在数学上对应的是“多层复合函数 + 链式法则梯度计算”的共同作用。

4.2 简单函数逼近

若目标是逼近一个非线性实值函数,例如一条复杂曲线或低维空间中的弯曲响应面,则可把输出层写成回归形式,并以平方损失作为训练目标。此时,多层感知机对应的是一个参数化函数族

$$ f_\theta(x), $$

其中 $\theta$ 包含所有层的权重和偏置。应用中的“拟合复杂函数”对应到本章数学原理时,正是:前向传播给出函数值,损失函数刻画拟合误差,反向传播给出关于所有参数的梯度,再由梯度下降不断改进逼近效果。

因此,简单函数逼近任务清楚展示了为什么多层网络不只是分类器,而是一般性的非线性函数逼近器。

4.3 语音和图像任务的早期实验

在早期语音识别和图像识别实验中,研究者已开始尝试使用多层前馈网络来替代单层判别器或部分手工特征后端。虽然当时网络规模和数据规模都还有限,但这些实验已经体现出一个新趋势:模型不再仅仅在固定特征上做最后判别,而开始通过隐藏层内部表示去重组输入信息。

在这些应用中,本章的多层结构直接对应“由原始特征到中间表示、再到最终输出”的层次变换;反向传播则对应“最终任务误差如何回流并修正早层表示”。也就是说,这些早期实验之所以重要,不在于当时性能已经压倒传统方法,而在于它们第一次具体展示了“表示可以被端到端训练”这一思想。

5. 局限性与历史转折

反向传播的提出与推广,确实解决了神经网络长期缺失的核心机制:多层参数如何系统更新。它让多层网络第一次不再只是表达上的可能性,而成为训练上的现实。

但这并不意味着神经网络已经立刻进入黄金时代。首先,深层网络中的梯度在层层链式相乘中容易出现衰减或爆炸,训练稳定性远不如浅层情形。其次,早期可用数据规模、计算资源和硬件条件都十分有限,即使原理可行,也很难支撑大规模训练。再次,参数初始化、正则化、激活函数选择与优化细节等问题,在当时都还远未成熟。

因此,本章所完成的是一个“原则性突破”,而不是“工程上全面成功”。它证明了多层网络能学,但并未自动保证它们在大规模现实任务上稳定、高效、可扩展地成功。

也正因为如此,神经网络的真正复兴还需要更多条件汇合:更适合深层训练的激活函数,更稳定的优化与归一化技术,更大的数据集,更强的计算硬件,以及更成熟的工程实现。这就自然引出了下一章深度学习复兴的历史条件。

本章小结

本章讨论了多层神经网络为何能够被训练,以及反向传播为何构成现代深度学习训练的起点。核心数学结构在于:多层网络本质上是复合函数,激活函数提供真正的非线性,链式法则则允许误差信号从输出层逐层传回,最终计算全部参数的梯度。

由此,多层网络不再只是表达复杂函数的设想,而成为可以通过梯度下降系统训练的模型族。通用逼近定理又进一步说明,多层网络在函数表达能力上确实超越了单层阈值结构。

但本章也明确表明:能训练并不等于已经大规模成功。真正让深度学习在历史上重新崛起,还需要训练稳定性、数据、算力与工程条件的共同成熟。这正是下一章要继续回答的问题。

关键公式

$$ z^{(\ell)}=W^{(\ell)}a^{(\ell-1)}+b^{(\ell)}. $$
$$ a^{(\ell)}=\sigma\big(z^{(\ell)}\big). $$
$$ J(\theta)=\frac{1}{n}\sum_{i=1}^n L\big(y_i,f_\theta(x_i)\big). $$
$$ \delta^{(L)}=\frac{\partial L}{\partial a^{(L)}}\odot \sigma'\big(z^{(L)}\big). $$
$$ \delta^{(\ell)}=\big((W^{(\ell+1)})^\top \delta^{(\ell+1)}\big)\odot \sigma'\big(z^{(\ell)}\big). $$
$$ \frac{\partial L}{\partial W^{(\ell)}}=\delta^{(\ell)}(a^{(\ell-1)})^\top. $$

关键概念

  • 多层感知机
  • 激活函数
  • 链式法则
  • 反向传播
  • 误差项
  • 梯度下降
  • 通用逼近定理