神经网络 · 多层感知机 / 反向传播

神经网络:把直线揉成任何形状

Logistic 回归画不出弯,决策树只会横平竖直——神经网络补上了这块拼图。一个隐藏层就足以围出圆圈:换激活函数、调隐藏神经元数量,然后看着决策区域被反向传播一点点「揉」出来。这一页也是理解深度学习的地基:所有大模型,拆开都是这里的积木。

决策区域 · 粉色为正类

背景颜色深浅 = 网络输出的概率;边界不再是直线——这就是隐藏层 + 非线性激活带来的表达能力。

损失曲线

控制台

训练轮数0
损失 (BCE)—
训练准确率—
网络结构2 → 6 → 1

原理:前向传播与反向传播

多层感知机(MLP)把输入先线性变换、再过非线性激活,一层层往前算(前向传播):

a¹ = φ(W¹x + b¹)  ,  p = σ(w²·a¹ + b²)  ,  L = −y lnp − (1−y)ln(1−p)

训练用反向传播:把损失对输出的误差 (p − y) 乘各层导数逐层往回传,得到每个权重的梯度,再沿负梯度更新。链式法则是唯一的魔法:

δ² = p − y  ,  δ¹ = (w² δ²) ⊙ φ′(z¹)  ,  W ← W − η · δ ⊙ 输入

为什么需要「非线性」激活

把两层线性变换叠起来:y = W₂(W₁x + b₁) + b₂ = (W₂W₁)x + (W₂b₁ + b₂)——还是一层线性,无论叠多少层都一样。没有非线性激活,100 层网络等价于 1 层。Tanh、ReLU、Sigmoid 的任务是「掰弯」网络,让它能拟合任意连续函数——理论上一个足够宽的隐藏层就能逼近任何连续函数(万能近似定理),实践中再叠深度只是为了效率。

激活函数三兄弟

  • Sigmoid:输出 (0,1),两端饱和——深层网络里逐层相乘后梯度指数级缩水(梯度消失),这就是它被逐出隐藏层的原因。
  • Tanh:零中心版 Sigmoid,收敛比 Sigmoid 快些,但两端照样饱和。
  • ReLU:max(0, z)。正区梯度恒为 1,彻底解决梯度消失;计算便宜。副作用是「死 ReLU」——神经元输出恒 0 就再也学不动,于是有了 Leaky ReLU、GELU 等改良。

三个值得动手验证的现象

  • 激活函数决定「会不会拐弯」。把激活换成 Linear(恒等)试试——环形数据怎么训都围不起来,这就是「线性叠线性还是线性」的活教材;Tanh / ReLU 才能弯。
  • 神经元够用就好。隐藏层 2 个神经元勉强划出弯边界,6 个舒舒服服,10 个开始有点「抽搐」——容量大了对噪声更敏感,过拟合的神经版。
  • 异或是最快的检验。切到异或数据:单层线性模型永远只有 50% 准确率(它线性不可分),而这个两层网络能在几百轮内接近全对——1969 年 Minsky & Papert 指出感知机搞不定异或,AI 迎来「寒冬」;补上这个缺口的正是隐藏层 + 反向传播。

训练不动的排查清单

损失不降时按顺序查:① 学习率——太大震荡、太小龟速(本页 0.02–1 都能试);② 初始化——全零初始化会让对称神经元永远相同(本页用随机初始化);③ 激活——连续两层 Linear 等于白搭;④ 数据顺序——乱序喂入比按类排队收敛快(SGD 的隐性好处)。

动手实验:环形数据 + Tanh + 6 神经元训到收敛,记住形状;再换 ReLU 重训——边界会从「圆滑」变成「带棱角」,这是两种激活「掰弯方式」不同的直接证据。

知识点拆解:把神经网络学扎实

结构

一层就够了,深是效率

万能近似定理说「一个够宽的隐藏层就能拟合任意连续函数」;深层网络不是「能表达更多」,而是「用更少的参数表达同样的函数」——深度换的是指数级的效率。

对应演示:2→6→1 结构围出圆圈
算法

反向传播 = 链式法则 + 动态规划

它不是新优化算法(优化仍是梯度下降),而是「高效算梯度」的技巧:先前向存下各层激活,再反向复用中间结果,一次遍历算完全部梯度,代价约等于两次前向。

对应演示:单步训练看损失变化
病

梯度消失与爆炸

反向传播是连乘:每层导数<1 则指数变小(消失),>1 则指数变大(爆炸)。Sigmoid 逐层连乘是重灾区;ReLU、残差连接、BatchNorm、梯度裁剪都是对症药。

对应演示:Sigmoid+低学习率收敛显著变慢
泛化

大网络的「隐式正则化」

参数比样本多却常不过拟合,是深度学习最反直觉的现象之一。SGD 的噪声、早停、Dropout、权重衰减都在帮忙——「容量大」和「过拟合」不是必然绑定的。

关键词:Dropout / 早停 / 权重衰减
  • MLP — 多层感知机,本页主角
  • 前向传播 — 逐层算激活直到输出
  • 反向传播 — 链式法则回传误差求梯度
  • ReLU — max(0,z),现代网络默认激活
  • 梯度消失 — 连乘让梯度指数级缩水
  • 万能近似定理 — 单隐藏层足够宽即可逼近连续函数

期末高频问答

  • 为什么权重不能全初始化为 0?同一层的所有神经元会收到相同梯度、永远保持相同——网络退化成单神经元。随机初始化打破对称性,让每个神经元学习不同的特征。
  • 隐藏层越深越好吗?不是。太深难训练(消失/爆炸)、易过拟合、还伤解释性。深度是「用效率换表达」的工具,够用就好——本页 6 个神经元胜过 10 个。
  • 「神经网络是黑箱」这话对吗?半对。它的中间表示确实难读,但梯度、激活分布、注意力图等工具让内部可以被检视;比起「黑箱」,更准确的说法是「可解释性成本更高的模型」。