← Back to Learning Notes

Lecture 5:神经网络模型

Chinese-language Computer Science 408 note: Lecture 5:神经网络模型. Original source available where applicable.

On this page

This note is currently available in Chinese. The original wording, formulas and diagrams are preserved to avoid an unverified technical translation.

描述:本节从 M-P 神经元与激活函数出发,说明多层前馈网络和万有逼近能力,并完整整理单隐层 Sigmoid 网络的 BP 误差逆传播公式。

5.1 神经网络基础

  • 神经网络由具有适应性的简单单元组成,并通过大量连接进行并行信息处理。
  • 其思想受到生物神经系统启发,但机器学习中的人工神经网络是数学模型,不等同于真实生物神经系统。
  • 神经网络学习也称连接主义(connectionism)学习。
  • 学习的核心是根据训练数据确定连接权重与神经元阈值等参数。

5.2 M-P 神经元模型

一个神经元接收 $n$ 个输入 $x_1,\ldots,x_n$,每个输入具有权重 $w_i$。先计算加权和,再减去阈值 $\theta$,最后通过激活函数 $f$:

$$ y =f\left( \sum_{i=1}^{n}w_ix_i-\theta \right). $$

  • $x_i$ 是输入信号。
  • $w_i$ 表示连接强度,可放大、减小或反转输入影响。
  • $\theta$ 是激活阈值。
  • $f$ 是激活函数,决定神经元输出。
  • 神经网络学到的知识主要编码在连接权重和阈值中。

5.3 激活函数

5.3.1 阶跃函数

理想二值神经元可使用阶跃函数:

$$ \operatorname{sgn}(x)

\begin{cases} 1,&x\geq0,\ 0,&x<0. \end{cases} $$

  • 输出 $0$ 表示抑制,输出 $1$ 表示激活。
  • 阶跃函数不连续且在阈值处不可导,不适合直接用普通梯度法训练。

5.3.2 Sigmoid 函数

常用平滑替代是

$$ \operatorname{sigmoid}(x) =\frac{1}{1+e^{-x}}. $$

其导数为

$$ f'(x)=f(x)\left(1-f(x)\right). $$

  • Sigmoid 连续、单调、可导,输出范围为 $(0,1)$。
  • 当 $|x|$ 很大时导数接近 $0$,深层网络中可能出现梯度消失;本节 BP 推导仍以 Sigmoid 为例。

5.4 多层前馈网络

  • 含隐层的网络称为多层网络。
  • 前馈网络要求连接构成有向无环计算图,信息沿拓扑顺序从输入流向输出;它不含形成环的反馈连接,但可以有跨层跳连或残差连接。“只能连接相邻层”是特定分层网络结构的约束,不是前馈网络的定义。
  • 输入层只接收输入,通常不把输入结点称为功能神经元。
  • 隐层和输出层神经元执行加权、阈值和激活计算,也称功能单元。
  • 输入特征有 $d$ 维时,输入层有 $d$ 个输入结点;输出有 $l$ 个分量时,输出层有 $l$ 个结点;中间可设置 $q$ 个隐层神经元。

5.5 万有逼近能力

  • 具有足够多神经元的单隐层前馈网络,在适当激活函数等条件下,能以任意精度逼近紧集上的连续函数。
  • 该结论说明满足条件的函数逼近问题存在神经网络表示解。
  • 但定理不告诉我们需要多少隐层神经元,也不保证训练算法能找到该解,更不保证数据量、计算量或泛化性能合理。
  • 隐层神经元数量仍需结合验证集、正则化和实际计算资源选择;源资料将常见方法概括为试错。
  • 源资料还从表达能力角度提到神经网络可表示图灵可计算过程;这同样是“存在性/表达能力”结论,不等于训练一定高效成功。

5.6 BP 算法的网络与符号

给定训练集

$$ D= {(\boldsymbol{x}_1,\boldsymbol{y}_1), \ldots, (\boldsymbol{x}_m,\boldsymbol{y}_m)}, $$

其中

$$ \boldsymbol{x}_k\in\mathbb R^d, \qquad \boldsymbol{y}_k\in\mathbb R^l. $$

考虑一个含 $q$ 个隐层神经元、$l$ 个输出神经元的单隐层前馈网络,并假设隐层和输出层都使用 Sigmoid。

记:

  • $v_{ih}$:输入结点 $i$ 到隐层结点 $h$ 的权重。
  • $w_{hj}$:隐层结点 $h$ 到输出结点 $j$ 的权重。
  • $\gamma_h$:隐层结点 $h$ 的阈值。
  • $\theta_j$:输出结点 $j$ 的阈值。
  • $b_h$:隐层结点 $h$ 的输出。
  • $\hat y_j^k$:样本 $k$ 在输出结点 $j$ 上的预测。

隐层输入与输出:

$$ \alpha_h =\sum_{i=1}^{d}v_{ih}x_i^k, $$

$$ b_h =f(\alpha_h-\gamma_h). $$

输出层输入与输出:

$$ \beta_j =\sum_{h=1}^{q}w_{hj}b_h, $$

$$ \hat y_j^k =f(\beta_j-\theta_j). $$

对样本 $(\boldsymbol{x}_k,\boldsymbol{y}_k)$,均方误差写为

$$ E_k =\frac{1}{2} \sum_{j=1}^{l} \left(\hat y_j^k-y_j^k\right)^2. $$

5.7 参数数量

需要学习的参数包括:

  • 输入层到隐层的 $dq$ 个权重。
  • 隐层到输出层的 $ql$ 个权重。
  • 隐层的 $q$ 个阈值。
  • 输出层的 $l$ 个阈值。

总数为

$$ dq+ql+q+l =(d+l+1)q+l. $$

5.8 BP 误差逆传播

BP 是迭代学习算法。每轮先前向计算输出和误差,再依据链式法则把误差信号从输出层传回隐层,最后沿目标函数负梯度方向更新参数。

设学习率为 $\eta$,基本梯度更新形式为

$$ \Delta p=-\eta\frac{\partial E_k}{\partial p}. $$

5.8.1 输出层误差信号

定义输出结点 $j$ 的误差信号

$$ g_j =-\frac{\partial E_k}{\partial\hat y_j^k} \frac{\partial\hat y_j^k}{\partial\beta_j}. $$

因为

$$ -\frac{\partial E_k}{\partial\hat y_j^k} =y_j^k-\hat y_j^k $$

且

$$ \frac{\partial\hat y_j^k}{\partial\beta_j} =\hat y_j^k(1-\hat y_j^k), $$

所以

$$ g_j =\hat y_j^k(1-\hat y_j^k) (y_j^k-\hat y_j^k). $$

权重 $w_{hj}$ 的链式求导为

$$ \frac{\partial E_k}{\partial w_{hj}}

\frac{\partial E_k}{\partial\hat y_j^k} \frac{\partial\hat y_j^k}{\partial\beta_j} \frac{\partial\beta_j}{\partial w_{hj}}. $$

由于

$$ \frac{\partial\beta_j}{\partial w_{hj}}=b_h, $$

得到

$$ \Delta w_{hj} =\eta g_jb_h. $$

输出层阈值更新为

$$ \Delta\theta_j=-\eta g_j. $$

5.8.2 隐层误差信号

隐层结点 $h$ 的误差信号为

$$ e_h =-\frac{\partial E_k}{\partial b_h} \frac{\partial b_h}{\partial\alpha_h}. $$

误差通过所有输出结点反向汇总:

$$ -\frac{\partial E_k}{\partial b_h} =\sum_{j=1}^{l}w_{hj}g_j. $$

又因为

$$ \frac{\partial b_h}{\partial\alpha_h} =b_h(1-b_h), $$

所以

$$ e_h =b_h(1-b_h) \sum_{j=1}^{l}w_{hj}g_j. $$

输入到隐层的权重更新为

$$ \Delta v_{ih} =\eta e_hx_i^k, $$

隐层阈值更新为

$$ \Delta\gamma_h=-\eta e_h. $$

5.8.3 一轮训练顺序

  1. 前向计算 $\alpha_h,b_h,\beta_j,\hat y_j^k$。
  2. 计算样本误差 $E_k$。
  3. 计算输出层误差信号 $g_j$。
  4. 计算隐层误差信号 $e_h$。
  5. 更新 $w_{hj},\theta_j,v_{ih},\gamma_h$。
  6. 对其他样本或下一轮迭代重复,直到满足停止条件。

5.9 学习率

  • 源资料给出 $\eta\in(0,1)$,并强调不能过大或过小。
  • 学习率过大可能跨过极小值并导致振荡或发散。
  • 学习率过小会使收敛非常缓慢,也可能在有限训练时间内看不到有效进展。
  • 实际训练还可使用学习率衰减、自适应优化和批量梯度等方法;本节公式对应最基本的逐样本梯度更新。

5.10 易错点

  • 前馈网络的“前馈”描述连接拓扑无环,不表示训练时没有误差反向传播。
  • 阈值形式是 $f(\text{加权和}-\theta)$;若改写为偏置 $b=-\theta$,更新符号也会相应变化。
  • 参数总数不能漏掉隐层和输出层阈值:$(d+l+1)q+l$。
  • BP 的“反向”是通过链式法则计算梯度,不是把输入数据倒序传输。
  • 输出层误差信号 $g_j$ 包含 Sigmoid 导数和预测残差;隐层误差信号 $e_h$ 还要累加所有输出结点的反向贡献。
  • $w_{hj}$ 与 $v_{ih}$ 的更新符号为正,是因为 $g_j,e_h$ 已把负梯度符号吸收进去;若直接定义普通梯度,公式会写成减号。
  • 万有逼近定理只保证存在足够大的网络,不保证训练算法一定找到、也不保证泛化好。
  • Sigmoid 在饱和区导数很小,容易造成梯度消失。

相关知识

5.11 本节复盘

  • M-P 神经元先计算输入加权和,再减阈值并通过激活函数输出。
  • 阶跃函数不连续不可导;Sigmoid 平滑可导,且满足 $f'(x)=f(x)(1-f(x))$。
  • 多层前馈网络按输入层、隐层、输出层单向连接,不存在环。
  • 单隐层网络具有强大逼近能力,但隐层规模和可训练性仍需实际选择。
  • 含 $d$ 个输入、$q$ 个隐层结点、$l$ 个输出的网络共有 $(d+l+1)q+l$ 个权重与阈值参数。
  • BP 先前向计算误差,再计算输出层信号 $g_j$ 和隐层信号 $e_h$,最后沿负梯度方向更新权重与阈值。
  • 学习率控制单步更新幅度,过大可能发散,过小则收敛缓慢。