随着 AlphaGo、ChatGPT 的横空出世,神经网络(Neural Networks)已经不仅仅是教科书里的概念,而是成为了当今 AI 的代名词。虽然现在调个包(PyTorch/TF)就能跑通模型,但如果不懂底层的误差逆传播(BP)算法,遇到模型不收敛或者过拟合时,真的就是“两眼一抹黑”。

本篇笔记基于《西瓜书》第五章,配合《南瓜书》的硬核公式推导,带大家把神经网络最核心的数学地基夯实一遍。


摘要

核心考点

  1. 感知机 (Perceptron):从几何角度理解它就是寻找一个超平面,但解决不了 XOR 问题。
  2. BP 算法 (BackPropagation):这是本章的大 Boss。我们将利用链式法则,一步步推导从输出层到隐层的权重更新公式,特别是隐层梯度 Δvih\Delta v_{ih}Δvih 的由来。
  3. 深度学习观:理解从“特征工程”到“特征学习”的范式转变。

1. 神经元与感知机:一切的起点

1.1 M-P 神经元模型

不要被生物学术语吓到,1943 年 McCulloch 和 Pitts 提出的这个模型其实非常简单粗暴。

它的逻辑就是:

  1. 接收信号:来自 nnn 个其他神经元的输入 xix_ixi
  2. 加权求和:每个输入都有个权重 wiw_iwi,总输入 = ∑wixi\sum w_i x_iwixi
  3. 比较阈值:总输入必须超过神经元的阈值 θ\thetaθ(Threshold)。
  4. 激活输出:通过激活函数(如 Sigmoid 或 Step 阶跃函数)处理,输出 yyy

避坑指南:西瓜书里特意强调了,“阈值”读 ,不读 (阀)。面试的时候读错挺尴尬的…

1.2 感知机:切蛋糕的刀

感知机(Perceptron)由两层神经元组成(输入层+输出层),公式为:
y=f(∑i=1nwixi−θ)=f(wTx−θ)y = f(\sum_{i=1}^n w_i x_i - \theta) = f(w^T x - \theta)y=f(i=1nwixiθ)=f(wTxθ)

如果把 fff 看作阶跃函数,感知机的几何意义就是在 nnn 维空间里画一个超平面 wTx−θ=0w^T x - \theta = 0wTxθ=0

  • 能做什么:把数据分成两堆(线性可分)。
  • 不能做什么:经典的 异或 (XOR) 问题。因为异或分布像个棋盘,你没法用“一刀”(直线)把它分开。这也是神经网络发展史上第一个寒冬的由来——单层网络太弱了。

2. 核心硬菜:误差逆传播算法 (BP) 的推导

多层网络解决了 XOR 问题,但怎么训练参数?这就是 BP 算法 的功劳。
看书时容易被一堆下标绕晕,其实本质就是 链式法则 (Chain Rule) 的暴力应用。

我们以单隐层网络为例,手推一下最难懂的隐层权重更新

2.1 符号设定

  • 输入xix_ixi
  • 隐层输出bh=f(αh−γh)b_h = f(\alpha_h - \gamma_h)bh=f(αhγh)αh\alpha_hαh 是输入累加,γh\gamma_hγh 是隐层阈值)
  • 输出层输出y^jk=f(βj−θj)\hat{y}_j^k = f(\beta_j - \theta_j)y^jk=f(βjθj)βj\beta_jβj 是隐层累加,θj\theta_jθj 是输出层阈值)
  • 损失函数Ek=12∑j=1l(y^jk−yjk)2E_k = \frac{1}{2} \sum_{j=1}^{l} (\hat{y}_j^k - y_j^k)^2Ek=21j=1l(y^jkyjk)2

2.2 推导隐层到输入层的权重更新 (Δvih\Delta v_{ih}Δvih)

我们要算的是:损失 EkE_kEk 对 权重 vihv_{ih}vih 的偏导数。
路径是这样的
Ek→y^j→βj→bh→αh→vihE_k \rightarrow \hat{y}_j \rightarrow \beta_j \rightarrow b_h \rightarrow \alpha_h \rightarrow v_{ih}Eky^jβjbhαhvih

根据链式法则,我们把它拆成五段:
∂Ek∂vih=∑j=1l∂Ek∂y^jk⋅∂y^jk∂βj⋅∂βj∂bh⋅∂bh∂αh⋅∂αh∂vih \frac{\partial E_k}{\partial v_{ih}} = \sum_{j=1}^{l} \frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \frac{\partial \beta_j}{\partial b_h} \cdot \frac{\partial b_h}{\partial \alpha_h} \cdot \frac{\partial \alpha_h}{\partial v_{ih}} vihEk=j=1ly^jkEkβjy^jkbhβjαhbhvihαh

逐个击破

  1. 误差回传 (输出层部分)
    前两项 ∂Ek∂y^jk⋅∂y^jk∂βj\frac{\partial E_k}{\partial \hat{y}_j^k} \cdot \frac{\partial \hat{y}_j^k}{\partial \beta_j}y^jkEkβjy^jk 其实就是输出层的梯度项 −gj-g_jgj
    −gj=(y^jk−yjk)⋅y^jk(1−y^jk)-g_j = (\hat{y}_j^k - y_j^k) \cdot \hat{y}_j^k(1-\hat{y}_j^k)gj=(y^jkyjk)y^jk(1y^jk)
    (注意:这里有一个求和号 ∑\sum,因为隐层的一个节点 hhh 连接到了所有的输出节点 jjj,所以误差要加起来)

  2. 过桥 (隐层到输出层权重)
    ∂βj∂bh=whj\frac{\partial \beta_j}{\partial b_h} = w_{hj}bhβj=whj
    (因为 βj=⋯+whjbh+…\beta_j = \dots + w_{hj}b_h + \dotsβj=+whjbh+)

  3. 隐层激活
    ∂bh∂αh=f′(αh−γh)=bh(1−bh)\frac{\partial b_h}{\partial \alpha_h} = f'(\alpha_h - \gamma_h) = b_h(1-b_h)αhbh=f(αhγh)=bh(1bh)
    (Sigmoid 导数性质)

  4. 输入连接
    ∂αh∂vih=xi\frac{\partial \alpha_h}{\partial v_{ih}} = x_ivihαh=xi

合体!
把上面几项乘起来:
∂Ek∂vih=∑j=1l(−gj)⋅whj⋅bh(1−bh)⋅xi=−[bh(1−bh)∑j=1lgjwhj]⋅xi \begin{aligned} \frac{\partial E_k}{\partial v_{ih}} &= \sum_{j=1}^{l} (-g_j) \cdot w_{hj} \cdot b_h(1-b_h) \cdot x_i \\ &= - \left[ b_h(1-b_h) \sum_{j=1}^{l} g_j w_{hj} \right] \cdot x_i \end{aligned} vihEk=j=1l(gj)whjbh(1bh)xi=[bh(1bh)j=1lgjwhj]xi

为了简洁,我们把中括号里那一坨定义为 隐层梯度项 ehe_heh
eh=bh(1−bh)∑j=1lgjwhje_h = b_h(1-b_h) \sum_{j=1}^{l} g_j w_{hj}eh=bh(1bh)j=1lgjwhj

最终的更新公式就非常清爽了:
Δvih=−η∂Ek∂vih=ηehxi\Delta v_{ih} = -\eta \frac{\partial E_k}{\partial v_{ih}} = \eta e_h x_iΔvih=ηvihEk=ηehxi

心得:你会发现,隐层梯度的计算逻辑和输出层是一样的,只是它的“误差”是来自于输出层加权反向传回来的。这就是“误差逆传播”名字的由来。


3. 两种有趣的神经网络

3.1 RBF 网络 (径向基函数网络)

如果不喜欢 BP 网络的全局逼近,可以看看 RBF。它分两步走:

  1. 隐层:用 RBF 函数(比如高斯核)把数据映射到高维空间。这步相当于特征转换
  2. 输出层:在新空间里做线性回归
    一句话总结:RBF 就是“核方法 + 线性模型”。

3.2 Boltzmann 机 & RBM

这哥们不一样,它是基于能量的模型(Energy-based Model)。
网络追求的是“能量最小化”。受限玻尔兹曼机 (RBM) 很有名,因为它限制了层内无连接,大大简化了计算,经常被用来做深度信念网络 (DBN) 的预训练。


4. 深度学习:从“工人”到“大师”

为什么 2012 年以后深度学习突然爆发?

  • 以前 (Machine Learning):我们需要手动设计特征。比如分西瓜,我要先想办法提取“纹理对比度”、“绿色占比”等数值,然后喂给 SVM。这叫 特征工程 (Feature Engineering)。天花板取决于人有多懂业务。
  • 现在 (Deep Learning):把图片直接喂给 CNN。它自己学会了“这里是瓜蒂”、“那里是条纹”。这叫 特征学习 (Feature Learning)

深度学习的本质,就是利用多层非线性映射,自动提取出从低级(边缘、像素)到高级(形状、物体)的特征。


下一步计划

搞定了神经网络,其实就搞定了“非线性分类”的半壁江山。但在深度学习统治世界之前,有一个算法曾经在数学完美性上吊打过神经网络,那就是 支持向量机 (SVM)

下一章,我们将去推导 SVM 那个令人着迷的凸优化过程。准备好草稿纸,数学量要加倍了!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐