模式识别-Ch6-人工神经网络
CH6 人工神经网络
[TOC]
6.2 神经网络基础
人工神经网络的定义(Nielsen):一种模仿生物神经网路的结构和功能的数学模型或计算模型。
人工神经元--处理单元的功能:
- 对每个输入信号进行加权处理(确定其强度);
- 确定所有输入信号的叠加效果(求和);
- 确定其输出(转移特性,即激励特性,sigmoid函数)。
学习的本质:对网络各连接权重作动态调整。
6.2.2 激活函数
作用:将可能的无限域变换到指定的有限范围内进行输出,并引入非线性(类似于生物神 经元的非线性转移特性)
常用的激活函数: 线性函数、斜坡函数、阶跃函数、符号函数、 Sigmoid函数、双曲正切函数、ReLU

软饱和:当自变量趋向于正无穷或负无穷时,函数的导数趋近于 0,但在有限的输入范围内,导数并不恒为 0,只是逐渐变小。这种饱和状态是 “相对的”、“渐进的”。sigmoid函数

硬饱和:当自变量(输入值)超过一定范围后,函数的导数恒为 0,这意味着函数在该范围内进入饱和状态,且这种饱和状态是 “绝对的”,即导数严格为 0。


6.2.3 拓扑结构
单层网络
输入信号: \[x=[x_1,x_2,\ldots,x_d]^T\]每个分量通过加权连接到各个结点、每个结点产生一个加权和。前馈连接+全连接


多层网络
是由单层网络进行级联构成的,即上一层的 输出作为下一层的输入。层与层之间可以全连接、也可以部分连接的情况。
- 输入层:接收输入信号的层。
- 隐藏层:中间层,隐含层的层数可从零到若干层。
- 输出层:产生输出信号的层。

激活函数应是非线性的,否则多层网络的表示能力并不比单层网络强。

反馈网络
结点的输出:依赖于当前的输入,也依赖于自己以前的输出。 (有跨层连接)
前馈网络 | 反馈网络 |
---|---|
“不存储短期记忆” :结点的输出仅仅是 当前输入的加权和(再加激励)。 | 类似“人类的短期记忆”:将以前的输出循环返回到输入。 |

6.2.4 网络训练
任务:给定 n 个观测数据\[\{x_k\}\],训练网络的各层结点之间的连接权重\[w_{ij}\](含偏置项) ,相继加入训练样本,并按预定规则调整网络各权重。
Supervised | Unsupervised |
---|---|
对每个训练数据,通过该网络计算之后能尽可能输出其原先给定的值。 | 不要求有目标向量,网络通过自身的“ 经历”来学会某种功能。 |
(拟合给定的label) | 训练一个网络,使其产生的输出具有某种可理解的规律性。 |
--- | 抽取样本所隐含的统计特征。 |
Hebb训练方法(经验方法) | \(\delta\)训练方法(分析方法) | 随机训练方法 | Kohonen训练方法 | |
---|---|---|---|---|
基本思路 | (突触修正假设):如果两个相互联接的处理单元(结点)处于相同的激励电平(即输出值具有相同的符号), 则突触传导增强(权重增强)。 | 按差值(\(\delta\)值)最小准则连续地修正各连接 权重的强度。(差值最小:处理单元所要求的输出与当前实际 输出间的差值,通过调节各权重值以达到最小)。 | 采用概率和能量关系来调节权重:随机改变一个权重,计算改变后产生的最终能量,并按如下准则来确定是否接受此改变。 | 在训练过程中结点(处理单元)参与彼此竞争,具有最大输出的结点为获胜者。 |
训练策略 | 两结点 i 和 j 的连接权重将按它们的输 出值之积来改变:\(w_{ij}^{(t+1)}=w_{ij}^{(t)}+\eta y_i z_j\),其中\(y_i z_j\)是结点\(i,j\)的输出。 | 梯度下降法:\(\Delta w_{ij}=-\eta\frac{\partial E}{\partial w_{ij}}\) | • 若改变后,网络的能量降低,则接受这一改变。 • 若改变后,能量没有降低,则根据一个预定的概率 分布来保留(接受)这一改变。 • 否则,拒绝这一改变,使权值恢复到原来的值。 | 自组织竞争型神经网络: • 获胜的结点具有抑制其竞争者的能力和激活其近邻结点的能力,只有获胜者和其近邻结点的权重才被允许调节。 • 获胜者的近邻结点的范围在训练中是可变的。 |
学习规则 | 预先设置权饱和值,以防止输出和输出正负始终一致时出现权重无约束增长。前馈、无指导学习规则。 | --- | 典型的随机训练算法:模拟退火算法 | 无监督训练方法 |
6.3 单层前馈神经网络(单层感知机)
6.3.1 感知机结构
该网络由 d+1个输入结点(包含一个 bais 结点)和一 含有 c 个结点的输出层构成,没有隐蔽层。
- input: \(\mathbf{x}=[1,x_1,x_2,\ldots,x_d]^T\)
- output: \(\mathbf{z}=[z_1,z_2,\ldots,z_c]^T\)
- weight set: \(W=\{w_{ij}\}\)
- 输出层结点 \(j\) : \(net_j=\sum^d_{i=0}w_{ij}x_i=\mathbf{w^T_j x}(x_0=1),\mathbf{w}_j=[w_{0j},w_{1j},\ldots,w_{dj}]^T\)
- 输出结点 \(j\) 输出值 \(z_j\) : \(z_j=f(net_j)=f(\sum^d_{i=0}w_{ij}x_i)\), \(f\) 是激励(转移)函数,如符号函数、线性函数、非线性函数。
6.3.2 感知机训练
学习任务:确定网络各个联接权重\(\{w_{ij}\}\)
分类任务:
- 两类:输出层仅有一个结点(output:-1,+1)
- 多类:\(t_j\) 可以为一个类别标签向量中的第 \(j\) 个元素。 \(t_j=1\): \(x_j\)属于第 \(j\) 类。

线性单元: 转移函数是线性函数、且处处可微
训练:设输入端点加上偏置端点共有d+1个,训练样本总数为n,c 为输出层结点个数。
输出值=期望值:\(z_j^k=t_j^k,k=1,\ldots,n\),\(z_j^k=w_0 x_0^k,w_1 x_1^k,\ldots,w_{d+1,j}x_d^k,x_0^k=1\)
线性单元训练:
直接加权 | \(\delta\)规则 |
---|---|
对于第 \(j\)个输出节点,其输出值 $z_j^k $由输入向量 $x^k = [x_0^k, x_1^k, , x_d^k] $和权重向量计算得: \(z_j^k = w_{0j}x_0^k + w_{1j}x_1^k + \dots + w_{d+1,j}x_d^k\) | 定义误差函数为:\(E(W) = \frac{1}{2} \sum_{k,j} (t_j^k - z_j^k)^2 = \frac{1}{2} \sum_{k,j} \left(t_j^k - \sum_i w_{ij} x_i^k\right)^2\) |
输出值\(z_j^k\)需要满足: \(z_j^k = t_j^k, \quad j = 1, 2, \dots, c\) ,即需要解决\(c\)个方程组,求解权重\(w_{ij}\)。 | 利用梯度下降法计算权重更新:\(\Delta w_{ij} = -\eta \frac{\partial E}{\partial w_{ij}} = \eta \sum_k \left(t_j^k - z_j^k\right) x_i^k\) |
适用于简单的线性回归问题。 | 单个训练样本\(k\) 对权重的贡献为:\(\Delta w_{ij} = \eta (t_j^k - z_j^k) x_i^k = \eta \delta_j^k x_i^k, \quad \delta_j^k = t_j^k - z_j^k\) |
非线性单元:转移函数是非线性函数,且处处可微。
--- | \(z_j^k=f(\text{net}_j^k),\ \text{net}_j^k = \sum_i w_{ij} x_i^k\) |
---|---|
误差函数 | \(E(W) = \frac{1}{2} \sum_{k,j} \left(t_j^k - z_j^k\right)^2 = \frac{1}{2} \sum_{k,j} \left[t_j^k - f(\text{net}_j^k)\right]^2\) |
梯度下降更新权重 | \(\frac{\partial E}{\partial w_{ij}} = -\sum_k \frac{\partial E}{\partial z_j^k}\frac{\partial z_j^k}{\partial \text{net}_j^k} \frac{\partial \text{net}_j^k}{\partial w_{ij}}=-\sum_k \left[t_j^k - z_j^k\right] f'(\text{net}_j^k) x_i^k\) |
单个样本 \(k\) 对权重更新的贡献 | \(\Delta w_{ij} =-\eta\frac{\partial E}{\partial w_{ij}}= \eta \left[t_j^k - z_j^k\right] f'(\text{net}_j^k) x_i^k\) |
(\(\delta\)规则) | \(\delta_j^k = \frac{-\partial E}{\partial \text{net}_j^k} = f'(\text{net}_j^k) \left[t_j^k - z_j^k\right]\Rightarrow \Delta w_{ij} = \eta \delta_j^k x_i^k\) |
参数 | 说明 |
---|---|
\(t_j^k\) | 第 $k $ 个样本的目标输出 |
\(z_j^k\) | 第 $k $ 个样本的实际输出 |
$f $ | 非线性激活函数 |
$f' $ | 激活函数的导数 |
\(\eta\) | 学习率 |

例:Sigmoid函数
\[
z=f(net)=\frac{1}{1+e^{-net}}\\
f'(net)=\frac{-e^{-net}}{(1+e^{-net})^2}=\frac{1}{1+e^{-net}}(1-\frac{1}{1+e^{-net}})=z(1-z)\\
\delta_j^k=z_j^k(1-z^k_j)[t_j^k-z^k_j]
\]
实现算法


6.4 多层感知器
6.4.1 多层感知机
以三层网络为例:

目标(Hope):最小化输出与目标之间的误差。希望网络的输出值 \(z_j\) 接近目标值 \(t_j\),即对于所有样本,满足:\(z_1≈t_1, z_2≈t_2, ⋯ , z_c≈t_c\)通过优化权重,使得损失函数趋于零:\(J(w) = \frac{1}{2} \sum_{j=1}^c (t_j - z_j)^2 \approx 0\).
网络描述 | 每个样本k经历的计算 |
---|---|
对第 k 个样本,隐含层 h 结点的输入加权和 | \(\text{net}_h^k=\sum_i w_{ih}x_i^k\) |
经过激励,隐含层 h 结点的输出 | \(y_h^k=f(\text{net}_h^k)\) |
输出层 j 结点的输入加权和 | \(\text{net}_j^k=\sum_h w_{hj}y_h^k\) |
经过激励,输出层 j 结点的输出 | \(z_j^k=f(\text{net}_j^k)\) |
Q: 最终结点的输出是否是数据依赖的?(即必须一步步地计算出前馈的结果才能得到最终输出) \[ Z_j^k=f(\text{net}_j^k)=f(\sum_h w_{hj}y_h^k)=f(\sum_h w_{hj}f(\sum_i w_{ih}x_i^k)) \] 计算:层内并行,层间串行。
前向传播的本质:逐层传递和依赖,最终输出是所有前一层计算结果的非线性组合。
6.4.2 BP(1985, Supervised)
基本原理 :利用输出后的误差来估计输出层的前一层的误差,再用这个误差估计更前一层的误差,如此一层一层地反传下去,从而获得所有其它各层的误差估计。
误差函数:对第k个样本, \[
E(\mathbf{w})^k=\frac12 \sum_j(t_j^k-z_j^k)^2=\frac12
\sum_j\left(t_j^k-f(\sum_h w_{hj}f(\sum_i w_{ih}x_i^k))\right)^2
\]
隐含层-->输出层
误差能量是所有的样本提供的。
\[
\Delta w_{hj}=-\eta\frac{\partial E}{\partial
w_{hj}}=-\eta\sum_k\frac{\partial
E}{\partial\text{net}_j^k}\frac{\partial\text{net}_j^k}{\partial
w_{hj}}\\
\text{net}_j^k=\sum_h
w_{hj}y_h^k,E(\mathbf{w})^k=J(\mathbf{w})^k=\frac12
\sum_j(t_j^k-z_j^k)^2=\frac12 \sum_j(t_j^k-f(net_j^k))^2\\
\Delta
w_{hj}=-\eta\sum_k(t_j^k-z_j^k)f'(\text{net}_j^k)y_{h}^k=-\eta\sum_k\delta_j^k
y_h^k\\
\] 其中\(\delta_j^k=-\frac{\partial
E}{\partial
w_{hj}}=f'(net_j^k)(t_j^k-z_j^k)=f'(net_j^k)\Delta_j^k\)
输出层的误差:\(\Delta_j^k=t_j^k-z_j^k\)

第k个样本对权重\(w_{hj}\)的贡献:\(\Delta w_{hj}|_{\text{sample k}}=\eta\delta_j^k y_h^k, y_h^k=f(\text{net}_h^k)\),误差在权重所联边的指向结点处计算,误差大小=该输出层节点收集到的误差*激励函数对“该节点加权和的导数”。它结合了 前向传播的信号 和 反向传播的误差。
误差反传与权重更新:

输入层-->隐含层
\[ E(\mathbf{w})=\sum_k J(\mathbf{w})=\frac12\sum_{k,j}\left(t_j^k-f\left(\sum_h w_{hj}f(\sum_i w_{ih}x_i^k)\right)\right)^2 \]
更新权重\(w_{ih}\): \[ \begin{align}\Delta w_{ih}=-\eta\frac{\partial E}{\partial(w_{ih})}&=-\eta\sum_{k,j}\frac{\partial E}{\partial z_j^k}\frac{\partial z_j^k}{\partial w_{ih}}\\ &=-\eta\sum_{k,j}\frac{\partial E}{\partial{z_j^k}}\frac{\partial{z_j^k}}{\partial{\text{net}_j^k}}\frac{\partial{\text{net}_j^k}}{\partial w_{ih}}\\ &=-\eta\sum_{k,j}\frac{\partial E}{\partial{z_j^k}}\frac{\partial{z_j^k}}{\partial{\text{net}_j^k}}\frac{\partial{\text{net}_j^k}}{\partial{y_h^k}}\frac{\partial{y_h^k}}{\partial w_{ih}}\\ &=-\eta\sum_{k,j}\frac{\partial E}{\partial{z_j^k}}\frac{\partial{z_j^k}}{\partial{\text{net}_j^k}}\frac{\partial{\text{net}_j^k}}{\partial{y_h^k}}\frac{\partial{y_h^k}}{\partial{\text{net}_h^k}}\frac{\partial{\text{net}_h^k}}{\partial w_{ih}} \end{align} \] 综上,\(\Delta w_{ih}=-\eta\sum_{k,j}\frac{\partial E}{\partial \text{net}_h^k}\frac{\partial \text{net}_h^k}{\partial w_{ih}}\)
现在对上述的链式法则进行计算:
网络描述 | 每个样本k经历的计算 |
---|---|
对第 k 个样本,隐含层 h 结点的输入加权和 | \(\text{net}_h^k=\sum_i w_{ih}x_i^k\) |
经过激励,隐含层 h 结点的输出 | \(y_h^k=f(\text{net}_h^k)\) |
输出层 j 结点的输入加权和 | \(\text{net}_j^k=\sum_h w_{hj}y_h^k\) |
经过激励,输出层 j 结点的输出 | \(z_j^k=f(\text{net}_j^k)\) |
误差函数 | \(E(\mathbf{w})^k=J(\mathbf{w})^k=\frac12 \sum_j(t_j^k-z_j^k)^2\) |
\[ \begin{align} \Delta w_{ih}&=\left(-\eta\sum_{k,j}\frac{\partial E}{\partial{z_j^k}}\frac{\partial{z_j^k}}{\partial{\text{net}_j^k}}\right)\frac{\partial{\text{net}_j^k}}{\partial{y_h^k}}\frac{\partial{y_h^k}}{\partial{\text{net}_h^k}}\frac{\partial{\text{net}_h^k}}{\partial w_{ih}}\\ &=\left(\eta\sum_{k,j}\delta_j^k\right)w_{hj}f'(\text{net}_h^k)x_i^k\\ &=\eta\sum_k\left(f'(\text{net}_h^k)\sum_j\delta_j^kw_{hj}\right)x_i^k\\ &=\eta\sum_k\delta_h^k x_i^k \end{align} \]
\(\text{net}_j^k=\sum_h w_{hj}y_h^k\):对\(\frac{\partial{\text{net}_j^k}}{\partial{y_h^k}}\)求导,只会保留其中与h有关的项,所以没有\(\sum_h\)了。
其中,\(\delta_h^k=-\frac{\partial E}{\partial\text{net}_h^k}=f'(\text{net}_h^k)\sum_j\delta_j^kw_{hj}=f'(\text{net}_h^k)\Delta_h^k\),\(\Delta_h^k=\sum_j \delta_j^k w_{hj}\)
第k个样本对权重\(w_{ih}\)的贡献:\(\Delta w_{ih}|_{\text{sample k}}=\eta\delta_h^k x_i^k\)
没毛病:我疑心的一个点是\(\sum_k\)时有时无,如果只针对sample k来说,确实不存在\(\sum_k\),但是\(\Delta w_{ih}\)是由所有的样本组成的,所以会有\(\sum_k\)。
网络训练
- BP 算法通过前向传播计算输出,再通过后向传播逐层收集误差信号 \(\delta\),用以修正权重。
- 权重更新的幅度由起始结点的输出和指向结点的误差信号共同决定。
权重更新:在 BP 算法中,对任意层权重的加权修正量的一般形式为: \[ \Delta w_{in \to o} = \eta \sum_{\text{all samples}} \delta_o y_{in} \] - \(w_{in \to o}\) 表示从起始结点 \(in\) 到指向结点 \(o\) 的权重。 - \(\eta\) 是学习率。 - \(\delta_o\) 是指向结点的误差信号。 - \(y_{in}\) 是起始结点的输出。
单个样本对权重更新的贡献:对于单个训练样本,其权重更新公式为: \[ \Delta w_{in \to o} = \eta \cdot \delta_o \cdot y_{in} = \eta \cdot \left( \sum_h w_{o \to h} \left[\delta_o\right]_h \right) \cdot y_{in} \] - \(\sum_h w_{o \to h} \left[\delta_o\right]_h\) 表示从后层节点 \(h\) 收集的误差信号。
下标 \(in\) 和 \(o\) 分别指“待更新权重”所连接的起始结点和指向结点。
\(y_{in}\) 是起始结点的实际输出。
\(\delta_o\) 表示指向结点的误差(由后一层收集得到)。
Q: loss function不仅限于均方误差 (MSE),还可能是 Cross-Entropy loss, Softmax loss, Hinge loss等等,这是否会影响我们上述得到的权重更新公式?
A: 不同的目标函数(如 MSE、交叉熵)会改变误差信号 \(\frac{\partial E}{\partial s_j}\) 的计算,但它们的权重更新形式仍遵循相同的梯度传播机制。
如图:
- 节点 \(i\) 输出 \(s_i\),传递给所有指向的下游节点 \(j\)。
- 每个下游节点 \(j\) 收集到的梯度 \(\frac{\partial E}{\partial s_j}\) 会通过权重 \(w_{ij}\) 和激活函数导数 \(f'(\text{net}_j)\) 反馈给节点 \(i\)。
![]()
对于节点 \(i\) 的输出 \(s_i\),其梯度 \(\frac{\partial E}{\partial s_i}\) 的计算公式为:\(\frac{\partial E}{\partial s_i} = \sum_{j \in N(i)} \frac{\partial E}{\partial s_j} \cdot \frac{\partial s_j}{\partial s_i}\)
- \(N(i)\) 表示所有从节点 \(i\) 指向的下游节点集合。
- \(\frac{\partial E}{\partial s_j}\) 是节点 \(j\) 的误差信号。
- \(\frac{\partial s_j}{\partial s_i}\) 是节点 \(j\) 对节点 \(i\) 输出的依赖关系,通常是权重 \(w_{ij}\)。
权重 \(w_{ij}\) 的梯度可以通过链式法则分解为:\(\frac{\partial E}{\partial w_{ij}} = \frac{\partial E}{\partial s_j} \cdot \frac{\partial s_j}{\partial \text{net}_j} \cdot \frac{\partial \text{net}_j}{\partial w_{ij}}\)
- \(\frac{\partial E}{\partial s_j}\):目标函数对节点 \(j\) 输出的梯度。
- \(\frac{\partial s_j}{\partial \text{net}_j}\):激活函数的导数 \(f'(\text{net}_j)\)。
- \(\frac{\partial \text{net}*j}{\partial w*{ij}} = s_i\):节点 \(j\) 的输入加权和对 \(w_{ij}\) 的梯度,等于节点 \(i\) 的输出。
两种实现:随机更新&批量更新

特性 | 随机更新(Stochastic) | 批量更新(Batch) |
---|---|---|
更新频率 | 每个样本更新一次 | 每轮(所有样本)更新一次 |
计算开销 | 低,每次只处理一个样本 | 高,每轮需要遍历所有样本 |
更新稳定性 | 低,容易受噪声影响 | 高,更新更平滑 |
收敛速度 | 快,适合大规模数据集 | 慢,但适合小规模数据集 |
适用场景 | 在线学习、大规模数据 | 小批量或全数据集训练 |
随机更新(Stochastic Backpropagation)
适合于超大规模数据集(如在线学习场景),因为每次只处理一个样本,内存开销小。
收敛速度快,但权重更新可能受噪声影响,导致更新不稳定。
每次随机选取一个样本(pattern),立即更新权重。
更新权重的过程是样本逐步驱动的。
循环:
- 从数据集中随机选取一个样本 \(x^k\)。
- 根据选取的样本计算对应的误差信号 \(\delta_j^k, \delta_h^k\)。
- 更新权重: \(w_{hj} \gets w_{hj} + \eta \delta_j^k y_h^k\) ,\(w_{ih} \gets w_{ih} + \eta \delta_h^k x_i^k\)
- 检查停止条件\(\|\nabla J(\mathbf{w})\| < \theta\),即目标函数梯度是否小于阈值。
- 如果满足条件,停止;否则继续。
- 返回最终的权重 \(\mathbf{w}\)。

批量更新(Batch Backpropagation)
适用于中小规模数据集,或者对更新的稳定性要求较高的场景。
每次需要遍历整个数据集,内存和计算开销较大,但更新更加平滑,受单个样本的噪声影响较小。
在所有样本都完成一次前向传播和误差计算后,再一次性更新权重。
权重更新更加稳定。
循环:
每轮训练(epoch)开始时,将权重增量初始化为零: \(\Delta w_{hj} = 0, \quad \Delta w_{ih} = 0\)
遍历所有样本
- 对每个样本\(x^k\)计算误差信号 \(\delta_j^k, \delta_h^k\)。
累积权重更新量:$w_{hj} w_{hj} + j^k y_h^k \(,\)w{ih} w_{ih} + _h^k x_i^k$
所有样本处理完后,一次性更新权重: \(w_{hj} \gets w_{hj} + \Delta w_{hj}, \quad w_{ih} \gets w_{ih} + \Delta w_{ih}\)
检查停止条件 \(\|\nabla J(\mathbf{w})\| < \theta\),如果满足条件,停止;否则进入下一轮训练。
- 返回最终的权重 \(\mathbf{w}\)。

6.5 BP算法讨论
6.5.1 准则函数
分类问题:
- 对于模式分类问题,假定其类别数为 c,通常输出层的结点个数为 c 。
- 对于训练样本 x,如果它属于第 i 类,则其目标值可以定义为一个 c 维向量,该向量只有第 i 个元素为1,其余元素的值均为 0 (或-1)。这些值分别按序分配给 c 个 输出结点。(one-hot)
- one-hot vectors: A onehot vector is a vector which is 0 in most dimensions, and 1 in a single dimension
准则函数定义:通常是在优化问题中用来衡量某种“优劣”或“质量”的函数。它的作用是帮助我们判断某个解是否是我们想要的最优解。简而言之,准则函数就是用来评价一个解的好坏的“评分标准”。
常用的准则函数:MSE,Cross-Entropy,Minkowski
激励(转移)函数的特性:非线性、连续可导、单调(最好)。
激励函数最好是单调的。否则,误差函数会包含更多的局部极小值点,从而增加训练难度。常用的函数是:
tanh
,sigmoid
,ReLU
等。
6.5.3 隐含层数和结点数
(Heche-Nielsen)证明:当各个结点具有不同的阈值时,具有一个隐含层的网络可以表示任意函数。具有较强的理论指导意义。
感觉此处不是很重要,主要是说在激励函数中采取类似Sigmoid函数+隐含层结点较多=可以拟合任意的函数。
结点选择:
- 多:判决界面仅包含训练样本点而失去推广能力(过拟合)。
- 少:网络难以建立复杂的判别界面(欠拟合)。
所以对隐含层的结点设置一般较大:等到网络训练之后,再考察有没有减少结点数的可能。
- 压缩神经网络
- 稀疏连接的神经网络
- dropout技术
6.5.5 初始权重与正则项
在批处理权重更新算法中,初始权重的更新值\(\Delta w_{ij}\neq 0\),否则不会产生学习。
初始方法选择:
- 随机初始化:从均匀分布or高斯分布红随机选择初始值。
\[ w_{ij}\sim U(-w_0,w_0)\\ w_{ij}\sim N(\mu=0,\sigma=w_0) \]
- 预训练初始化
初始化方法 | 激活函数 | 分布类型 | 公式 |
---|---|---|---|
Xavier 初始化 | Sigmoid, Tanh | 均匀分布 | \(w_{ij} \sim \mathcal{U}\left(-\frac{1}{\sqrt{n}}, \frac{1}{\sqrt{n}}\right)\) 或 \(w_{ij}\sim\mathcal{U}\left(-\frac{\sqrt{6}}{\sqrt{n+m}}, \frac{\sqrt{6}}{\sqrt{n+m}}\right)\) |
He 初始化 | ReLU | 正态分布 | \(w_{ij} \sim \mathcal{N}(0, \sqrt{\frac{2}{n}})\) |
预训练初始化 | 任意 | 通过预训练得到权重分布 | - |
目标函数正则化:
防止出现overfitting.
增加目标函数的约束,防止权重变得过大,从而提高模型的泛化能力。
在原目标函数 \(E(w)\) 的基础上加入一个正则化项: \[ E_{\text{new}}(w) = E(w) + \frac{\varepsilon}{2\eta} w^T w \] 正则化项的作用是让权重值尽可能小,但不为零,这样可以避免过拟合。优化时,我们对 $E_{}(w) $进行梯度下降: \[ \begin{align} w_{ij}& = w_{ij} - \eta \frac{\partial E_{\text{new}}(w)}{\partial w_{ij}}\Leftarrow \frac{\partial E_{\text{new}}(w)}{\partial w_{ij}} = \frac{\partial E(w)}{\partial w_{ij}} + \frac{\varepsilon}{\eta} w_{ij}\\ &= w_{ij} - \eta \left(\frac{\partial E(w)}{\partial w_{ij}} + \frac{\varepsilon}{\eta} w_{ij}\right)\\ &= w_{ij}(1 - \varepsilon) - \eta \frac{\partial E(w)}{\partial w_{ij}} \end{align} \]
6.5.7 学习率和改进梯度下降
学习率:过小会收敛慢、过大会不稳定。
学习率调整策略
在实际训练中,如何调整学习率是一个关键问题。可以通过以下策略判断学习率的优劣。
- 检查误差是否下降:如果目标函数值 \(J(w)\) 没有下降,说明学习率过大,需要减小\(\eta\)。
- 观察下降趋势:如果连续几次迭代都降低了误差,说明当前学习率可能较保守,可以适当增加 \(\eta\)。
![]() |
![]() |
![]() |
![]() |
---|---|---|---|
步长过小,优化路径慢慢向最优点靠近。 | 步长合适,优化路径快速而平稳地到达最优点。 | 步长较大,路径在最优点附近震荡。 | 步长过大,路径直接发散。 |
改进梯度下降
SGD+(附加冲量项, gradient descent with momentum)
- 冲量项会记录前几步的梯度信息,使当前更新方向不仅依赖于当前梯度,还受历史梯度的影响。
- 可以帮助优化在平坦区域加速收敛,同时在陡峭区域减少震荡。
权重更新公式为: \[ m_t = \beta m_{t-1} + (1-\beta) g_t,\quad g_t = \frac{\partial E(w)}{\partial w}\vert_{w=w_t}\\ w_{t+1} = w_t - \eta m_t \] \(m_t\):一阶动量变量,由当前梯度和过去梯度的累积贡献共同决定。\(\beta\):冲量系数,通常取值为 0.9。迭代序列更平滑、通过调整\(\beta\)尽快逃离饱和区。

Adaptive Moment Optimization (Adam)
Adam(Adaptive Moment Estimation)
是梯度下降的一种改进算法,结合了:
- Momentum(冲量项),用于加速收敛。
- RMSProp(自适应学习率),为每个参数动态调整学习率。
\[ m_t = \beta_1 m_{t-1} + (1-\beta_1) g_t\\ v_t = \beta_2 v_{t-1} + (1-\beta_2) g_t^2\\ w_{t+1} = w_t - \eta \frac{m_t}{\sqrt{v_t} + \epsilon} \]
其中\(m_t\)是一阶动量(冲量项),\(v_t\)是二阶动量(梯度平方的累积)。
\(\beta_1,\beta_2\)分别是一阶动量的衰减率,通常为 0.9;二阶动量的衰减率,通常为 0.999。
\(\epsilon\)是防止除零的小常数,通常取 \(10^{-8}\)。

6.5.10 存在问题
尽管BP训练算法应用得很广泛,但其训练过程存在不确定性:
完全难以训练 | 训练时间过长 |
---|---|
网络的麻痹现象 | 尤其对复杂问题需要很长时间训练 |
梯度消失 | 可能选取了不恰当的训练速\(\eta\) |
局部最小和鞍点 | --- |


6.6 径向基函数网络
径向基函数网络(Radial Basis Function networks, RBF networks)
- 三层NN,使用径向基函数\(\phi_h(x)\)作为隐含层计算单元。
- 对模式分类或函数近似任务,径向基函数是一个较好的网络模型
- 与多层神经网络相似,RBF可以对任意连续的非线性函数进行近似,可以处理系统内的难以解析的规律性
- 收敛速度比通常的多层神经网络更快
网络结构
使用径向基函数的线性组合表示每类的判别函数: \[ z_j=\sum_{h = 1}^{H}w_{jh}\phi_h(x),\quad j = 1,2,\cdots,c \]
- \(\phi_h(x)\):为径向基函数,如\(\phi_h(x)=\exp\left(-\frac{\|x - m_h\|^2}{2\sigma^2}\right)\);\(x\)到\(m_h\)之间距离的单调减函数,表示\(x\)与\(m_h\)的相似度。
- \(m_h\):径向基函数的中心。
- RBF网络可看作一种广义线性判别函数,也与核方法有密切关系。
学习过程
通常采用两步方法训练:
- 确定径向基函数的个数、中心
- 小规模数据:用全部样本
- 大规模数据:采样、聚类
- 确定隐层到输出层的权重、高斯核窗宽
- BP等算法根据预测结果与真实标签的误差,调整权重值,使误差最小化。
端到端方法可以优化整个网络:使用BP算法学习径向基函数中心、窗宽、隐层到输出层的权重。
Q: 高斯核窗宽?
A: 高斯核窗宽(即径向基函数的带宽)控制了隐藏层每个神经元的“感受野”大小。可以通过 BP 算法来学习,使其适应数据分布的特点。
- 窗宽小:每个神经元的感受范围较小,更注重局部特征。
- 窗宽大:感受范围较大,更注重全局特征。
Q: 端到端?
传统的 RBF 网络设计通常需要手动选择:
- 隐藏层中心的位置(常通过聚类算法如 K-Means)。
- 核函数的窗宽。
端到端方法通过BP算法一步优化:隐含层中心位置、窗宽大小、隐含层到输出层的权重。
网络结构简化与泛化
- 对于大规模数据,隐含层的结点个数会很大。采用聚类技术对数据进行聚类,将聚类中心作为径向基函数的中心。这样简化了网络规模,提高计算效率。
- 经过聚类处理,还会防止overfitting,增强网络的泛化能力,提高精度。
- 输出层结点也可以采用非线性激活函数。

6.7 反馈神经网络
前馈网络与反馈网络的对比:
特点 前馈网络 反馈网络 信息流向 单向(输入到输出) 允许反馈回路 计算过程 静态,逐层处理 动态,状态不断调整 稳定性 不涉及吸引子 最终收敛到稳定状态(吸引子) 代表模型 多层感知机、CNN Hopfield 网络、Boltzmann 机 应用场景 分类、回归等 联想记忆、生成模型、优化问题
反馈网络是一种信息流动具有反馈回路的神经网络。网络的输出可以作为输入的一部分进行处理,从而动态调整网络的状态。
反馈网络会在运行中不断更新神经元的状态,最终趋于某种稳定状态(即吸引子)。
典型反馈神经网络:Hopfield 网络
、Boltzmann 机
、受限 Boltzmann 机(RBM)
6.7.1 Hopfield网络--联想记忆网络
单层、全连接的反馈网络
目的:从残缺或噪声数据中还原完整数据。

相关定义
设网络有\(d\)个神经元,对于离散型Hopfield网络,各结点一般选取相同的激活函数,如符号函数,即: \[ f_1(x)=f_2(x)=\cdots = f_d(x)=\text{sgn}(x) \]
相关定义 | 对应公式 | 维度空间 | 说明 |
---|---|---|---|
网络的输入 | \(x=(x_1,x_2,\cdots,x_d)\) | \(x\in\{-1,+1\}^d\) | \(x\)具有\(d\)个分量,每个分量可能为\(-1\)或\(+1\)。 |
网络的输出 | \(y=(y_1,y_2,\cdots,y_d)\) | \(y\in\{-1,+1\}^d\) | --- |
网络在时刻\(t\)的状态 | \(v(t)=(v_1(t),v_2(t),\cdots,v_d(t))\) | \(v(t)\in\{-1,+1\}^d\) | \(t\)为离散时间变量。 |
连接权重\(w_{ij}\) | \(w_{ij}=w_{ji}, w_{ii}=0\) (Hopfield网络是对称、无环的) | \(i,j\in\{1,2,\cdots,d\}\) | 网络所有\(d\)个结点之间的连接权重用矩阵\(W=\{w_{ij}\}\in R^{d\times d}\)来表示。 |
网络运行方式
信息在网络中循环往复传递。 \[ \begin{cases} v_j(0)=x_j & x_j是输入信号x的第j个分量\\ v_j(t + 1)=\text{sgn}\left(\sum_{i = 1}^{d}w_{ij}v_i(t)\right)&\iff v(t + 1)=\text{sgn}(Wv(t)) \end{cases} \] 若在某个时刻\(t\),从此之后网络状态不再改变,即:\(v(t + 1)=v(t)\),则输出\(y = v(t)\)。 \[ v=\text{sgn}(Wv) \] Hopfield网络的运行过程为状态的演化过程,即从初始状态\(v_0\)按能量减小的方向进行演化,直到达到稳定状态。其能量函数是: \[ E(v)=-\frac{1}{2}\sum_{i,j = 1}^{d}w_{ij}v_iv_j=-\frac{1}{2}v^TWv \] 将残缺数据\(v_0 = x\)输入网络,网络通过最小化能量函数\(E(v)\)恢复完整数据。
Hopfield网络的学习
- 参数估计(记忆阶段):将完整数据存储进网络。
- 若网络训练的目的是存储\(K\)个完整数据\(\{x^1,x^2,\cdots,x^K\}\),其中\(x^k\in\{- 1,1\}^d\),通常要求\(K < 0.14d\)。
- 外积法(Hebbian learning rule): \[ w_{ij}=\begin{cases} \sum_{k = 1}^{K}x_i^kx_j^k, & i\neq j\\ 0, & i = j \end{cases} \] 可简记为:\(W=\sum_{k = 1}^{K}x^k(x^k)^T - KI\),其中\(I\in R^{d\times d}\)是单位矩阵。
6.7.2 玻尔兹曼机
(Boltzman Machine, BM)
是一种随机的Hopfield网络,是具有隐单元的反馈互联网络。


6.9 深度学习
深层神经网络有效性的原因:
- 浅层与多层网络的疑问
- 浅层神经网络可以近似任意函数,为何还需要多层网络?
- 深层网络的优势
- 在深层网络结构中,特别是卷积神经网络中,高层可以综合应用低层信息。
- 低层关注“局部”,高层关注“全局”,更具有语义化信息。
- 为自适应地学习非线性处理过程提供了一种可能的简洁、普适的结构模型。
- 特征提取与分类器可以一起学习。
6.9.2 深度概率模型
Hopfield网络
单层全互联、对称权值的反馈网络
神经元状态: \(v_j\in \{-1,+1\}\)

玻尔兹曼机 (Boltzmann Machine)
随机Hopfield网络,具有隐单元的反馈互联网络
缺点:网络结构复杂、训练代价大、局部极小

受限玻尔兹曼机 (Restricted Boltzmann Machine,RBM)
BM的简化:层间相连、层内结点不相连、信息可双向流动
RBM中的条件独立性:
- 隐变量状态已知:各观测变量相互独立
- 隐变量状态未知:各隐变量相互独立

网络基本结构:双层结构
层之间通过权重\(w_{ij}\)完全连接,但层内没有连接。
- 可见层\(\{v_i\}\):包含我们可以观测到的数据(比如图像像素、特征向量等)。
- 隐含层\(\{h_j\}\):用于捕捉数据的潜在特征。
能量函数
RBM 的核心是能量函数\(E(v, h; \theta)\),它定义了某种状态\((v, h)\)的“能量值”: \[ E(v, h; \theta) = -\sum_{ij} w_{ij} v_i h_j - \sum_i b_i v_i - \sum_j a_j h_j \] 其中第一项是可见层和隐藏层之间的交互关系,权重由 \(w_{ij}\) 决定;可见层bias:\(b_i\);隐含层bias:\(a_j\).
状态$(v, h) $的能量越低,表示该状态的概率越高。
概率模型
RBM 是基于玻尔兹曼分布的概率模型,联合概率分布 \(p(v, h)\) 定义为: \[ \begin{align} p(v, h) &= \frac{1}{\mathrm{z}(\theta)} \exp(-E(v, h; \theta))\\ &=\frac{1}{Z(\theta)} \prod_{ij}e^{w_{ij}v_i h_j}\prod_{i}e^{b_iv_i}\prod_{j}e^{a_j h_j}\\ \mathrm{z}(\theta)&=\sum_{v,h}\exp(-E(v,h;\theta)) \end{align} \] \(z(\theta)\):归一化常数,用来确保所有概率的总和为 1。
RBM 的重要特点是可见层和隐藏层之间的条件概率可以单独计算: \[ p(v,h)=\frac{\exp(-E(v,h))}{\sum_{v,h}\exp(-E(v,h))}\\ p(v)=\frac{\sum_h \exp(-E(v,h))}{\sum_{v,h}\exp(-E(v,h))},\quad p(h)=\frac{\sum_v \exp(-E(v,h))}{\sum_{v,h}\exp(-E(v,h))}\\ p(v|h)=\frac{\exp(-E(v,h))}{\sum_{v}\exp(-E(v,h))},\quad p(h|v)=\frac{\exp(-E(v,h))}{\sum_{h}\exp(-E(v,h))} \] 网络训练的目标是最大化似然函数:对于给定的N个样本,对RBM进行训练, 以概率最大化生成(观察到)这些样本。 \[ \max \sum_{i=1}^N \log p(v^i)\\ p(v) = \sum_h p(v, h)=\frac{\sum_h \exp(-E(v,h))}{\sum_{v,h}\exp(-E(v,h))}\\ \log p_{\theta}(v)=\log\left(\prod_i\exp(b_iv_i)\prod_j\left(1+\exp(a_j+\sum_iw_{ij}v_i)\right)\right)-\log \mathrm z(\theta) \]
深度信念网络 (Deep Belief Network,DBN)
训练:
- 利用多个RBM进行贪心训练
- 分类上:多加一个前向网络、采用有标签数据进行fine-tuning

6.9.3 CNN
局部连接
,权值共享
,多层感知机(MLP)
- MLP: 对平移、比例缩放、倾斜、或者其他形式的变形具有一定的不变性。
- CNN:网络结构类似生物神经网络。由于权值数量的减少、网络模型的复杂度更低。
CNN中的卷积实际是图像处理中的相关操作:\((f\star h)(x,y)\)
感受野(receptive field):卷积核的大小

解决上述问题的方法:
局部连接 | 权值共享 |
---|---|
理论依据:视觉系统局部感受野、图像空间相关性 | 保证了CNN提取的特征具有平移不变性 |
每个神经元其实没有必要对全局图像进行感知,只需要对局部进行感知(局部感受野);在更高层将局部的信息综合起来获得全局信息 | 从图像任何一个局部区域内连接到同一类型的隐含结点,其权重保持不变 |

网络训练
采用BP算法:选择样本x(Batch),信息从输入层经过逐级变换、传送到输出层;然后计算该样本的实际输出与理想输出t(label)之间的差;按极小化误差bp调整权重。
Q: 权值共享机制下,对权值的梯度如何计算?
A: 在卷积神经网络(CNN)中,权值共享意味着同一个卷积核(权值)在整个输入特征图上滑动时会重复使用。因此,权值共享下,梯度的计算需要汇总所有卷积核应用到不同位置时的梯度贡献。
Q: 卷积神经网络中有一个pooling操作,因为这一点需要对现有BP算法做一些修改,如何改?
A: 在卷积神经网络中,Pooling 操作(通常是 Max Pooling 或 Average Pooling)会降低特征图的尺寸,同时保留主要特征。这种操作会对反向传播过程提出特殊要求,因为 pooling 本身不涉及权值,而是选择性传递或汇总输入数据。
- Max Pooling 的反向传播非常稀疏,梯度只会流向被选中的最大值位置。
- Average Pooling 的反向传播更加平滑,每个输入值都会接收到等量的梯度。
反向传播 Max Pooling Average Pooling --- 损失梯度只会流向池化窗口中选出的最大值的位置,其他位置的梯度为 0。 损失梯度会均匀分配到池化窗口的所有输入值。 --- 池化窗口中被选为最大值的输入位置 $x_{ij} \(会接收完整的梯度:\) = $ 每个输入值 \(x_{ij}\) 接收到的梯度为: --- 对于其他非最大值的位置:\(\frac{\partial L}{\partial x_{ij}} = 0\) \(\frac{\partial L}{\partial x_{ij}} = \frac{1}{K \times K} \cdot \frac{\partial L}{\partial y_{mn}}\)
总结:
- 我们之所以决定使用卷积后的特征是因为图像具有一种“静态性”的属性,这也就意味着在一个图像区域有用的特征极有可能在另一个区域同样适用。
- 局部感受野、权值共享以及时间或空间下采样这三种结构化思想结合起来获得了某种程度的位移、尺度、形变不变性
6.9.4
自编码器(Autoencoder)--无监督
训练目标:输出=输入、用于特征提取。表示学习方法


自编码器网络通常有多个隐藏层(多层编码器和解码器),直接对整个深度网络进行端到端训练可能会遇到困难,比如梯度消失、局部最优等问题。
训练中,进行逐层预训练。
- 将网络分成多个层,逐层单独训练,每次只优化一个编码器-解码器模块,使这一层能够很好地表示输入数据。
- 训练完当前层后,将其固定为“静态”,然后把输出作为下一层的输入,继续训练下一层。
- 最后,将所有层联合起来进行微调(全局调优)。


扩展:VAE-变分自编码器-ddpm的基础/求解变分下界

6.9.5 RNN
RNN:至少包含一个反馈连接的神经网络结构。网络输出可以沿loop(环)流动,适合处理时序数据。
经典RNN | 说明 |
---|---|
Hopfield 网络 | 全连接 |
Elman 网络 | 包含输入层、隐含层和输出层,但隐含层和输入层之间存在一个反馈连接,这种连接通常称为recurrent 连接, 即回归连接。这种回归连接使得Elman 网络具有检测和产生时变模式的能力。 |
对角自反馈神经网络 | 隐含层的神经元具有反馈连接,但隐含层神经元之间并不连接。 |
\[
net_t=b+Wh_{t-1}Ux_t\\
h_t=f(net_t)\\
p_t=c+Wh_t
\] RNN 的隐藏状态 \(h_t\)
是一个动态的“记忆单元”,能够捕捉当前输入\(x_t\) 的信息,同时总结之前所有输入 \(x_1, x_2, \ldots, x_{t-1}\)的信息。
RNN | Hopfield | MLP |
---|---|---|
\(h_t=f(b+Wh_{t-1}+Ux_t)\) | \(h_t=f(b+Wh_{t-1}),h_0=x,W=W^T\) | \(h=f(b+Ux)\) |
\(o_t=c+Vh_t\) | \(o=h_T\) | \(o=c+Vh\) |
网络训练
RNN的基本结构:
\(h_t = f(b + W h_{t-1} + U x_t)\) 其中:
- \(h_t\) 是当前时间步的隐藏状态,用于总结前面时间步的输入。
- \(W\) 是隐藏状态的权重矩阵。
- \(U\) 是输入\(x_t\)的权重矩阵。
- \(b\) 是偏置向量。
- \(f(\cdot)\) 是激活函数。
输出:\(o_t = c + V h_t\)
- \(o_t\) 是输出层值,通过隐藏状态\(h_t\)与权重\(V\)和偏置\(c\)计算得出。
用 softmax 函数计算输出的类别概率分布: \[ \hat{y_t} = \text{softmax}(o_t) \] 这表示当前时间步\(t\)的样本属于某个类别的概率。
对于序列标注问题,目标是最小化整个序列的总损失: \[ L(x, y) = \sum_{t} L_t(x, y) = -\sum_t \log \hat{y_t}[y_t] \] 其中:
- \(L_t(x, y)\) 是时间步\(t\)的交叉熵损失。
- \(\hat{y_t}[y_t]\) 是输出预测的类别 \(y_t\) 的概率。
- 损失按时间累加,即将每个时间步的误差都考虑进去。


时间步\(t\)的隐藏状态\(h_t\)依赖前一时间步的隐藏状态\(h_{t-1}\)和当前输入\(x_t\) ;输出\(o_t\)用于计算当前时间步的预测概率\(\hat{y_t}\);每一时间步都会计算对应的损失 \(L_t\)。
时间反向传播算法(BPTT):
核心思想:在展开后的时间维度中,损失函数对所有参数(如 \(U, V, W, b, c\))的梯度需要从每个时间步累计。这就类似于标准反向传播算法,但要沿着时间维度反向传播。
具体步骤:
- 前向传播:按时间步依次计算所有的神经元输出值(\(x_t, h_t, o_t, \hat{y_t}\))。
- 反向传播:按时间反向计算每个神经元的误差项(即损失函数 \(L\) 对每个神经元输出的偏导数)。通过链式法则,将损失对网络参数(如 \(U, V, W, b, c\))的梯度累积下来。
- 更新权重:使用梯度下降法或其他优化方法更新参数。
例:一步时间延迟
- 节点包含:输入 \(x_t\),隐藏状态 \(h_t\),输出 \(o_t\),以及损失 \(L_t\)。
- 参数:\(U, V, W, b, c\)
- 核心任务:计算目标函数 \(L\) 对这些参数的梯度:\(\nabla_U L, \nabla_V L, \nabla_W L, \nabla_b L, \nabla_c L\)。

6.9.6 LSTM
RNN缺点:RNN更新方式使\(h_t\)随时间\(t\)发生较大改变\(\Rightarrow\)历史信息快速遗忘。训练时,梯度容易消失or爆炸: \[ \text{recall} \quad \frac{\partial E}{\partial \text{net}_l}=f'(\text{net}_l)\odot W_{l,l + 1}\frac{\partial E}{\partial \text{net}_{l + 1}} \] 圈乘\(\odot\)是哈达玛积/按元素相乘。
LSTM的核心思想: 通过精细控制“历史信息(记忆)”的操作,缓解了RNN的遗忘问题和训练问题。
网络结构
- LSTM网络将隐含层的细胞单元(隐含单元)设计为所谓的LSTM细胞单元。
- 每一个LSTM细胞含有与传统的RNN细胞相同的输入和输出,但它额外包含一个控制信息流动的“门结点系统”。
- 门系统包含三个部分,除了对LSTM细胞的输入、输出进行加权控制之外,还对记忆(遗忘)进行加权控制。

输入门 | 遗忘门 |
---|---|
提供一个是否接收当前输入信息的权重(0~1)。 | 提供一个是否遗忘当前记忆的权重(0~1)。 |
其值取决于当前输入信号和前一时刻隐含层的输出。 | 其值取决于当前输入信号和前一时刻隐含层的输出。 |
\(\mathbf{in}_t=sigmoid(b_{in}+U_{in}x_t+W_{in}h_{t-1})\) | \(f_t=sigmoid(b_f+U_fx_t+W_fh_{t-1})\) |
![]() |
![]() |
产生新记忆 | 输出门 |
---|---|
LSTM 细胞产生的新记忆,由输入与遗忘两部分组成。 | 对当前输出提供一个 0~1之间的权重(对输出的认可程度)。 |
候选新记忆:\(c_t=\tanh(b + Ux_t + Wh_{t - 1})\) | 其值取决于当前输入信号和前一时刻隐含层的输出。 |
\(s_t = f_t \otimes s_{t - 1}+in_t \otimes c_t\) | \(o_t=\text{sigmoid}(b_o + U_ox_t + W_oh_{t - 1})\) |
![]() |
![]() |
Q: \(\otimes,\odot\)?
A: 基本一致,ppt上都是标注:逐元素相乘(element-wise multiplication)
- 如果你看到 \(\odot\),几乎总是指 逐元素相乘。
- 如果你看到 \(\otimes\)
- 如果涉及张量运算,可能是张量积(Kronecker Product)。
- 如果在深度学习文档中,有时也可能被滥用为逐元素相乘的符号,但更常见的逐元素相乘是用 \(\odot\) 标记的。

\(h_t\)更新--隐含层结点的输出由激励后的内部状态(此时称为记忆)与 输出门权重共同决定: \[ h_t=o_t\otimes tanh(s_t) \] 这部分内容讲的是 LSTM网络(长短时记忆网络)训练中的挑战和缓解策略,重点在于分析梯度消失和梯度爆炸的问题,以及可能采取的应对方法。
网络训练的目标
- 参数估计:目标是估计 LSTM 网络中的各种矩阵和向量参数。
- 输入门、输出门、遗忘门、候选记忆单元相关的权重矩阵和偏置项: \((U_{in}, W_{in}, b_{in}),\ (U_{o}, W_{o}, b_{o}),\ (U_{f}, W_{f}, b_{f})\)
- 其他网络层相关的参数: \((U, W, b),\ (V, c)\)
- 基于两点实现:
- 基于信息流动的方式,采用 反向传播算法(Backpropagation Through Time, BPTT)。
- 计算目标函数,求每个时间步 \(t\) 对这些参数的偏导数。
LSTM的优势与局限
优势 | 局限 |
---|---|
相比传统 RNN,LSTM 缓解了梯度消失/爆炸的问题。通过引入 遗忘门(forget gate) 和 记忆单元(memory cell),它能更好地捕捉长距离依赖关系。 | 部分缓解 了梯度消失/爆炸问题,而非完全消除。梯度问题依然存在于复杂序列任务或较长时间跨度的信息流动中。 |
为进一步缓解梯度消失/爆炸,ppt中提到以下技术:
- 充分利用二阶梯度信息:二阶梯度包含更全面的信息,但计算成本高,因此通常不被鼓励。
- 更好的初始化:选择更优的初始参数,可以减少训练初期梯度的异常情况。
- 动量机制:在参数更新中引入动量,避免仅依赖当前梯度,有助于加速收敛。
- 对梯度模或元素作裁剪(Gradient Clipping):如果梯度过大或过小,通过裁剪限制其幅度,避免梯度爆炸或消失。
- 正则化:对目标函数加入正则化项,限制权重的幅度,从而防止过拟合,并改善梯度问题。
- 奖励信息流动:通过设计合适的目标函数,鼓励梯度在更长时间跨度内保留。
6.9.7 Transformer
注意力机制的基本原理
对于输入序列\(\{x_1,x_2,\cdots,x_n\}\),计算\(x_t\)的特征表示:
\(x_t\)与\(x_i\)的相似度 | 注意力系数 | 加权和 |
---|---|---|
\(s_{ti}=x_t^Tx_i\),\(i = 1,\cdots,n\) | \(\alpha_{ti}=\frac{\exp(s_{ti})}{\sum_{j = 1}^{n}\exp(s_{tj})}\) | \(x_t'=\sum_{i = 1}^{n}\alpha_{ti}x_i\) |
注意力系数反应数据相关性的强弱,按注意力系数对所有数据求和(凸组合),实现了全局感受野,是Transformer的核心。
单头自注意力(single - head self - attention)

实际中,引入三个线性变换\(W^Q\),\(W^K\),\(W^V\):
Query | Keys | Values |
---|---|---|
\(\{W^Qx_t\}\) | \(\{W^Kx_i\}\) | \(\{W^Vx_i\}\) |
\(x_t\)与\(x_i\)的相似度 | 注意力系数 | 加权和 |
---|---|---|
\(s_{ti}=(W^Qx_t)^T(W^Kx_i)\) | \(\alpha_{ti}=\frac{\exp(s_{ti})}{\sum_{j = 1}^{n}\exp(s_{tj})}\) | \(x_t'=\sum_{i = 1}^{n}\alpha_{ti}(W^Vx_i)\) |
多头自注意力(multi - head self - attention)

为进一步提升模型能力,引入多组注意力参数\(\{W_h^Q,W_h^K,W_h^V\}\),\(h = 1,\cdots,H\):
注意力系数 | 加权和 | 多头特征融合 |
---|---|---|
\(\alpha_{ti}^h=\frac{\exp((W_h^Qx_t)^T(W_h^Kx_i))}{\sum_{j = 1}^{n}\exp((W_h^Qx_t)^T(W_h^Kx_j))}\) | \(x_{th}=\sum_{i = 1}^{n}\alpha_{ti}^h(W_h^Vx_i)\) | \(x_t'=W^O\text{Concat}(x_{t1},x_{t2},\cdots,x_{tH})\) |
Concat()
:对向量/矩阵的拼接操作,增加提取特征的多样性,增强表示学习能力。
多头自注意力的矩阵表示
对于输入序列\(\{x_1,x_2,\cdots,x_n\}\),计算所有数据点的特征表示,记\(X = [x_1,x_2,\cdots,x_n]\in R^{d\times n}\):
注意力系数 | 加权和 | 多头融合 |
---|---|---|
\(\Lambda^h=\text{softmax}(((W^Q_hX)^T(W^K_hX)))\in R^{n\times n}\) | \(X^h=(W^V_hX)\Lambda^h\),\(h = 1,\cdots,H\) | \(X'=W^O\text{Concat}(X^1,X^2,\cdots,X^H)\) |
自注意力模块:两个子模块

注意力子模块 | 逐时刻数据特征变换 |
---|---|
\(X'=\text{MultiHeadAttention}(X)\) | \(X'''=W_2\text{ReLU}(W_1X'' + b_1)+b_2\) |
\(X''=\text{LayerNorm}(X + X')\) | \(X''''=\text{LayerNorm}(X'' + X''')\) |
输入序列与输出序列的长度相同,将多个自注意力模块串联起来,构成Transformer encoder。
交叉注意力(cross - attention)
很多任务中,存在输入序列与输出序列不等长(如机器翻译)甚至不同模态(如图像描述)的问题,可采用基于encoder - decoder结构的模型处理此类问题:
- encoder负责对源数据提取特征;
- decoder负责输出目标数据。
如何让decoder有效利用encoder的输出?
- 交叉注意力(cross - attention)
假设编码器的输出为\(Z = [z_1,z_2,\cdots,z_n]\in R^{d_1\times n}\)、解码器第\(t\)时刻输入为\(y_t\in R^{d_2}\)
相似度 | 注意力系数 | 加权和 |
---|---|---|
\(s_{ti}=(W^Qy_t)^T(W^Kz_i)\) | \(\alpha_{ti}=\frac{\exp(s_{ti})}{\sum_{j = 1}^{n}\exp(s_{tj})}\) | \(y_t'=\sum_{i = 1}^{n}\alpha_{ti}(W^Vz_i)\) |
通过注意力访问全部编码器输出数据,可类似使用多头注意力。
交叉注意力模块:三个子模块

Q: Transformer和Attention机制本质上是顺序无关的,如何表示位置?
Transformer本质上是顺序无关的模型,而自然语言处理(NLP)中的输入序列是有顺序的(比如句子中单词的前后顺序)。
通过位置编码(Positional Encoding)和词表示(Word Representation),Transformer得以弥补这一缺陷。
- 位置编码:为了解决顺序无关的问题,Transformer引入了显式的位置编码,将序列中每个token的位置信息以数学方式编码进模型的输入。
- 偶数:\(PE(pos,2i)=\sin(pos/10000^{2i/d_{\text{model}}})\)
- 奇数:\(PE(pos,2i + 1)=\cos(pos/10000^{2i/d_{\text{model}}})\)
- 如何表示字/词/token?Transformer模型的输入是分词后的token序列(字/词),这些token以固定大小的向量表示,称为 词嵌入(Word Embedding)。
- 分布式词表示(distributed word representation)。
6.9.8 图神经网络

基本思想: 以“边”为基础进行近邻节点间的信息传递、节点利用从近邻收到的信息更新自己的表示。

如果将节点看作像素,图上的消息传递操作和卷积操作非常相似:局部连接、权值共享。因此,图神经网络也被称为图卷积网络(Graph Convolution Networks, GCN)


