前言
到神经网络了,后面两小章看的有些水,有点疲惫
第五章
本节学习神经网络
5.1 神经元和感知机
神经网络是生物神经系统的抽象,由神经元 作为基本单位组成。神经元可以接受、处理、输出信息,每一个神经元具有以下特征:
接受输入 :类比生物神经元可以接受信号,神经元也可以接受其他神经元的数值形式 的输入。
输入权重 :每一个输入都会被赋予一个权重 ,总输入 是这些输入的加权求和 。
激活函数 :总输入会与一个阈值 θ \theta θ 比较,若超过阈值,神经元被激发 ,此时总输入作为自变量传入激活函数,输出结果传递到下一神经元。激活函数的引入是为了引入非线性 ,否则神经网络只能表达线性模型,能力有限。
更形式化地,输入层每一个神经元都代表着一个属性 ,用 x i x_{i} x i 表示第 i i i 个神经元的输入,w i w_{i} w i 表示第 i i i 个输入的权重,f f f 表示激活函数,θ \theta θ 为阈值,则神经元输出为:
y = f ( ∑ i = 1 N w i x i − θ ) \text{y} = f\left( \sum_{i=1}^{N} w_{i}x_{i} - \theta \right) y = f ( i = 1 ∑ N w i x i − θ )
可以见得阈值通过对激活函数的输入的控制决定输出的内容,一个朴素的激活函数是阶跃函数 :
f ( x ) = { 1 if x ≥ 0 , 0 if x < 0. f(x) =
\begin{cases}
1 & \text{if } x \geq 0, \\
0 & \text{if } x < 0.
\end{cases} f ( x ) = { 1 0 if x ≥ 0 , if x < 0.
但阶跃函数不连续 性质不好,因此更常用光滑 的激活函数,如 Sigmoid :
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1 + e^{-x}} f ( x ) = 1 + e − x 1
其值域为 [ 0 , 1 ] [0,1] [ 0 , 1 ] ,能将任意实数压缩到该区间(故称挤压函数 ),且满足 f ( 0 ) = 0.5 f(0)=0.5 f ( 0 ) = 0.5 以及f ′ ( x ) = f ( x ) ( 1 − f ( x ) ) f'(x)=f(x)(1-f(x)) f ′ ( x ) = f ( x ) ( 1 − f ( x )) (这个导数结论会在下一节用到 )。
若将神经元按输入层/输出层 组织为层层连接 结构,则构成神经网络 ——本质上是一个由权重参数 和阈值参数 构成的训练模型。我们先考察单个输出神经元连接一个或多个输入神经元 的情况,这种结构称为感知机 (Perceptron),如图所示:
graph LR
A[输入神经元x1] -- w1 --> C[神经元]
B[输入神经元x2] -- w2 --> C
C --> D[输出 y]
style A fill:#f9f,stroke:#333
style B fill:#f9f,stroke:#333
style C fill:#bbf,stroke:#333
style D fill:#9f9,stroke:#333
此时模型输出即神经元的输出,表达式为:
y = f ( ∑ i = 1 N w i x i − θ ) y = f\left( \sum_{i=1}^{N} w_{i}x_{i} -\theta \right) y = f ( ∑ i = 1 N w i x i − θ )
可以见得 :
感知机 是单层功能神经网络 (输入层仅传递数据,不计入层数)。
其决策边界为超平面 ∑ i w i x i − θ = 0 \sum_{i} w_i x_i - \theta = 0 ∑ i w i x i − θ = 0 ,本质是线性分类器 :
仅能将数据分为超平面两侧的两类,适用于线性可分问题 。
收敛性 :因决策边界为超平面,若数据线性可分,则算法必收敛。
逻辑分类能力:
可实现与 、或 、非 等线性可分逻辑(如通过调整权重 w i w_i w i 和阈值 θ \theta θ )。
无法实现异或 :因异或需两个超平面(线性不可分问题),单层感知机无法解决。
不要混淆激活函数的分线性和模型分类决策的线性关系
激活函数 y ( ⋅ ) y(\cdot) y ( ⋅ ) 的非线性 仅影响神经元输入-输出映射
模型分类能力仍由线性决策边界 决定
现在我们来看如何学习一个感知机 ,学习目的 是确定两个参数:权重 和阈值 。
依旧是通过向量化技巧简化计算:
将权重和阈值合并为增广向量 w = ( w 1 , w 2 , . . . , w n , − θ ) T \mathbf{w} = (w_1, w_2, ..., w_n, -\theta)^T w = ( w 1 , w 2 , ... , w n , − θ ) T
输入样本扩展为 x = ( x 1 , x 2 , . . . , x n , 1 ) T \mathbf{x} = (x_1, x_2, ..., x_n, 1)^T x = ( x 1 , x 2 , ... , x n , 1 ) T
此时我们需要确定的参数就是这个权重向量了。对于训练样例 ( x , y ) (\mathbf{x}, y) ( x , y ) ,输出预测值 通过激活函数 f f f 计算:
y ^ = f ( w T x ) \hat{\mathbf{y}} = f(\mathbf{w}^T \mathbf{x}) y ^ = f ( w T x )
比较预测值和真实值,如果分量不一致(当 y ^ i ≠ y i \hat{y}_{i} \neq y_{i} y ^ i = y i 时),修改对应分量权重:
w i ← w i + η ( y − y ^ ) x i w_i \leftarrow w_i + \eta (y - \hat{y}) x_i w i ← w i + η ( y − y ^ ) x i
其中:
η \eta η 为学习率 (一般设为0.1 0.1 0.1 等较小值),控制更新步长
更新仅发生在误分类时(错误驱动学习 )
终止条件:
所有样本被正确分类
达到预设的最大迭代次数
正如我们上文所述,感知机的功能只能应用在线性可分问题上 ,如果需要处理线性不可分问题 ,我们需要添加更多层的功能神经元。这种情况下神经网络分为:
输入层 :最开始输入样本的神经元层(不参与信息处理 )
输出层 :最终输出结果的神经元层
隐含层 (隐藏层):输入层和输出层之间的神经元层
这种包含隐含层的神经网络,我们通常称为多层神经网络 (Multilayer Neural Network)。其层数定义规则为:对于n n n 层神经网络,n n n 仅统计隐含层和输出层的数量 (因输入层无计算功能)。例如感知机实际是1 1 1 层神经网络(仅含输出层)。
当神经网络满足:
全连接 :每层神经元与下一层神经元完全连接
无循环 :不存在同层连接或跨层连接
这种结构称为多层前馈神经网络 (Multi-layer Feedforward Neural Network)。
5.2 误差逆传播算法
在多层神经网络中,使用感知机 的简单算法进行训练是不足 的,我们需要一个更强大的算法——误差逆传播算法 (又称反向传播算法,简称BP)。该算法不仅适用于多层前馈神经网络 ,还可用于其他类型的神经网络(例如递归网络 的训练)。但需注意,当我们提到BP网络时,通常特指用BP算法训练的多层前馈神经网络 。
其核心思想可归纳为以下关键步骤:
前向传播 过程中,神经网络每一层的输出仅依赖于上一层输入,误差会随传播路径逐层累积
最终输出层产生预测值,与真实标签y y y 计算误差函数值
反向传播 阶段计算每个参数贡献的误差
根据误差贡献调整参数,实现误差最小化
从形式角度看:
误差δ ( W , b ) \delta(\mathbf{W}, \mathbf{b}) δ ( W , b ) 仅是所有权重和阈值的函数 (最先输入数据不会造成误差,所以不会被显示依赖)
误差对参数的偏导数给出了该参数的误差的贡献,而对所有参数求偏导的过程就是求梯度
反向传播实质是高效计算梯度 的算法,将误差重新分配到隐藏层中
现在我们就来学习具体的BP算法(和书上差异较大,可以选择喜欢的方法看)
首先先定义神经网络结构:
假设有L L L 层神经网络,定义 ( n l × n l − 1 ) (n_{l}\times n_{l-1}) ( n l × n l − 1 ) 维权重矩阵 W l W^{l} W l 和 ( n l × 1 ) (n_{l}\times 1) ( n l × 1 ) 维阈值向量 Θ l \Theta^{l} Θ l ,其中:
0 ≤ l ≤ L 0\leq l \leq L 0 ≤ l ≤ L 表示层数(输入层为第0 0 0 层)
W i j l W^{l}_{ij} W ij l 表示连接第l − 1 l-1 l − 1 层第j j j 个神经元和第l l l 层第i i i 个神经元的权重 ,也就是说所有样本都会被同一个权重参数影响。
n l n_{l} n l 为第l l l 层神经元个数
m m m 为样本数量
激活函数选择 sigmoid函数 σ ( x ) = 1 1 + e − x \sigma(x) = \frac{1}{1+e^{-x}} σ ( x ) = 1 + e − x 1
考虑前向传播阶段(1 ≤ l ≤ L 1 \leq l \leq L 1 ≤ l ≤ L )有:
Z l = W l A l − 1 − Θ l 1 m T = W l A l − 1 + B l 1 m T A l = σ ( Z l ) \begin{align}
Z^{l} &= W^{l}A^{l-1} - \Theta^{l}\mathbb{1}_{m}^{T} =W^{l}A^{l-1} + B^{l}\mathbb{1}_{m}^{T} \\
A^{l} &=\sigma(Z^{l})
\end{align} Z l A l = W l A l − 1 − Θ l 1 m T = W l A l − 1 + B l 1 m T = σ ( Z l )
其中
Z l Z^{l} Z l :第l l l 层的线性变换结果 ,每一列代表一个样本在第l l l 层的线性输入向量。
B l : = − Θ l B^{l} := -\Theta^{l} B l := − Θ l :偏置向量 (与阈值Θ l \Theta^{l} Θ l 为相反数关系)
1 m T \mathbb{1}_{m}^{T} 1 m T 是分量全为1 1 1 的横向量,这样B l 1 m T B^{l}\mathbb{1}_{m}^{T} B l 1 m T 就是所有样本都是相同偏置的矩阵了
A l A^{l} A l :第l l l 层的输出矩阵 ,维度( n l × m ) (n_{l} \times m) ( n l × m ) ,每一列代表一个样本在第l l l 层的激活输出向量
特别的:
A 0 = X A^{0} = X A 0 = X 为输入样本矩阵,维度( n 0 × m ) (n_{0} \times m) ( n 0 × m ) ,其中 n 0 = d n_{0}=d n 0 = d 是属性维度,基本上其他层n l ≠ d n_{l}\neq d n l = d
A L A^{L} A L 为输出层结果,维度( n L × m ) (n_{L} \times m) ( n L × m )
偏置项B B B 的引入
查资料的时候发现比起阈值,偏置项似乎更常见,他们的关系就是相反数的关系。这种表示法在梯度推导时更直观。
前向传播结束就会得到我们的预测值,我们需要计算误差 ,这里我们选择简单的均方误差那么有:
M S E = 1 2 m ∑ j = 1 m ∑ i = 1 n L ( Y i j − A i j L ) 2 MSE = \frac{1}{2m}\sum_{j=1}^{m} \sum_{i=1}^{n_{L}} (Y_{ij} - A^{L}_{ij})^{2} MSE = 2 m 1 j = 1 ∑ m i = 1 ∑ n L ( Y ij − A ij L ) 2
其中A i j L A^{L}_{ij} A ij L 是L L L 层输出结果——预测矩阵的第j j j 个样本的第i i i 的预测值,2 2 2 是为了后面计算方便的常数。有了误差值之后,我们就可以反向传播该误差了。
我们的目标是计算出MSE 对权重分量 W i j l W^{l}_{ij} W ij l 的偏导数的值 ,即 ∂ MSE ∂ W i j l ∣ W i j l \frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}} ∂ W ij l ∂ MSE ∣ W ij l 。该偏导数的绝对值 反映了误差沿该权重变化的快慢程度 。我们先介绍如何利用该偏导数的值更新权重以使误差减小,即梯度下降法 。
考虑权重W i j l W^{l}_{ij} W ij l 处的偏导数∂ MSE ∂ W i j l \frac{\partial \text{MSE}}{\partial W^{l}_{ij}} ∂ W ij l ∂ MSE 的取值:
若∂ MSE ∂ W i j l ∣ W i j l > 0 \frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}}>0 ∂ W ij l ∂ MSE ∣ W ij l > 0 :增加W i j l W^{l}_{ij} W ij l 会导致误差上升 ,因此应减小W i j l W^{l}_{ij} W ij l 的值 。
若∂ MSE ∂ W i j l ∣ W i j l < 0 \frac{\partial \text{MSE}}{\partial W^{l}_{ij}}|_{W^{l}_{ij}}<0 ∂ W ij l ∂ MSE ∣ W ij l < 0 :增加W i j l W^{l}_{ij} W ij l 会降低误差 ,因此应增大W i j l W^{l}_{ij} W ij l 的值 。
基于此,权重的更新公式为:
W i j l ← W i j l − η ∂ MSE ∂ W i j l ∣ W i j l W^{l}_{ij} \leftarrow W^{l}_{ij} - \eta \left.\frac{\partial \text{MSE}}{\partial W^{l}_{ij}}\right|_{W^{l}_{ij}} W ij l ← W ij l − η ∂ W ij l ∂ MSE W ij l
其中,η \eta η 为学习率 (取值较小的正实数),控制更新步长与感知机的权重更新原理一致,对于偏置也有类似的更新方式。
对梯度下降法的补充
一元函数导数的类比 :若函数f ( x ) f(x) f ( x ) 在x x x 处的导数f ′ ( x ) > 0 f'(x)>0 f ′ ( x ) > 0 ,增大x x x 会升高函数值 ;反之,若f ′ ( x ) < 0 f'(x)<0 f ′ ( x ) < 0 ,增大x x x 会降低函数值 ,梯度下降法的思想就是这个。
梯度下降法仅通过调整参数改变取值 ,而不会直接修改误差曲面本身 (即MSE \text{MSE} MSE 的几何形状保持不变)。
知道如何更新权重后,我们来看如何求偏导数,我们将分为3 3 3 步走。我们首先 分析输出层L L L 的情形(权重涉及L − 1 L-1 L − 1 层的情况暂不讨论),此时均方误差由M S E = M S E ( Z 00 L , Z 01 L , … , Z n L m L ) MSE = MSE(Z^{L}_{00}, Z^{L}_{01}, \dots, Z^{L}_{n_{L}m}) MSE = MSE ( Z 00 L , Z 01 L , … , Z n L m L ) 给出。其偏导数为:
∂ M S E ∂ Z i j L = ∂ M S E ∂ A i j L ⋅ ∂ A i j L ∂ Z i j L = ∂ M S E ∂ A i j L ⋅ σ ′ ( Z i j L ) \frac{ \partial MSE }{ \partial Z^{L}_{ij} } = \frac{ \partial MSE }{ \partial A^{L}_{ij} } \cdot \frac{ \partial A^{L}_{ij} }{ \partial Z^{L}_{ij} } = \frac{ \partial MSE }{ \partial A^{L}_{ij} } \cdot \sigma'(Z^{L}_{ij}) ∂ Z ij L ∂ MSE = ∂ A ij L ∂ MSE ⋅ ∂ Z ij L ∂ A ij L = ∂ A ij L ∂ MSE ⋅ σ ′ ( Z ij L )
第二项就是激活函数sigmoid的导数(具体形式在感知机一节中提到过),因此我们只需要计算第一项:
∂ M S E ∂ A i j L = 1 2 m ∂ ∂ A i j L [ ∑ q = 1 m ∑ p = 1 n L ( A p q L − Y p q ) 2 ] = 1 2 m ∂ ∂ A i j L ( A i j L − Y i j ) 2 = 1 m ( A i j L − Y i j ) \begin{align}
\frac{ \partial MSE }{ \partial A^{L}_{ij} } &=\frac{1}{2m} \frac{ \partial }{ \partial A^{L}_{ij} }\left[ \sum_{q=1}^{m} \sum_{p=1}^{n_{L}} (A^{L}_{pq}-Y_{pq})^{2} \right] \\
&= \frac{1}{2m}\frac{ \partial }{ \partial A^{L}_{ij} } (A^{L}_{ij}-Y_{ij})^{2} \\
&= \frac{1}{m}(A^{L}_{ij}-Y_{ij})
\end{align} ∂ A ij L ∂ MSE = 2 m 1 ∂ A ij L ∂ [ q = 1 ∑ m p = 1 ∑ n L ( A pq L − Y pq ) 2 ] = 2 m 1 ∂ A ij L ∂ ( A ij L − Y ij ) 2 = m 1 ( A ij L − Y ij )
因此有∂ M S E ∂ Z i j L = 1 m ( A i j L − Y i j ) σ ′ ( Z i j L ) : = δ i j L \frac{ \partial MSE }{ \partial Z^{L}_{ij} }=\frac{1}{m}(A^{L}_{ij}-Y_{ij})\sigma'(Z^{L}_{ij}):=\delta^{L}_{ij} ∂ Z ij L ∂ MSE = m 1 ( A ij L − Y ij ) σ ′ ( Z ij L ) := δ ij L ,定义为误差信号 矩阵元δ i j L \delta^{L}_{ij} δ ij L ,将其矩阵化并且把系数1 m \frac{1}{m} m 1 吸收进梯度下降时的学习率η \eta η 中有
δ L = ( A L − Y ) ⊙ σ ′ ( Z L ) \delta^{L} = (A^{L}-Y) \odot\sigma'(Z^{L}) δ L = ( A L − Y ) ⊙ σ ′ ( Z L )
其中⊙ \odot ⊙ 表示两矩阵对应位置矩阵元直接乘积,L L L 层误差信号矩阵的维度是( n L × m ) (n_{L}\times m) ( n L × m ) 。
接下来 我们考虑隐藏层第l l l 层的误差信号矩阵δ l \delta^{l} δ l ,这里我们用递推的思想,假设我们已经知道δ l + 1 : = ∂ M S E ∂ Z l + 1 \delta^{l+1}:=\frac{ \partial MSE }{ \partial Z^{l+1} } δ l + 1 := ∂ Z l + 1 ∂ MSE ,那么对l l l 层的误差信号矩阵元有
δ i j l = ∂ M S E ∂ Z i j l = ∂ M S E ∂ A i j l ⋅ ∂ A i j l ∂ Z i j l \delta^{l}_{ij}=\frac{ \partial MSE }{ \partial Z^{l}_{ij} } =\frac{ \partial MSE }{ \partial A^{l}_{ij} } \cdot \frac{ \partial A^{l}_{ij} }{ \partial Z^{l}_{ij} } δ ij l = ∂ Z ij l ∂ MSE = ∂ A ij l ∂ MSE ⋅ ∂ Z ij l ∂ A ij l
第二项我们已经知道是σ ′ ( Z i j l ) \sigma'(Z^{l}_{ij}) σ ′ ( Z ij l ) ,那么重点还是第一项,但是和L L L 层不同的是这里没有M S E MSE MSE 和A i j l A^{l}_{ij} A ij l 的直接关系式,但根据假设我们已知δ i j l + 1 = ∂ M S E ∂ Z i j l + 1 \delta^{l+1}_{ij}=\frac{ \partial MSE }{ \partial Z^{l+1}_{ij} } δ ij l + 1 = ∂ Z ij l + 1 ∂ MSE ,所以将其引入进来,并且要注意l + 1 l+1 l + 1 层的所有神经元的输入向量Z ( ) j l + 1 Z^{l+1}_{()j} Z ( ) j l + 1 都和l l l 层的激活输出向量A ( ) j l A^{l}_{()j} A ( ) j l 有关,因此写成偏导数为
∂ M S E ∂ A i j l = ∑ p = 1 n l + 1 ∂ M S E ∂ Z p j l + 1 ⋅ ∂ Z p j l + 1 ∂ A i j l = ∑ p = 1 n l + 1 δ p j l + 1 ⋅ ∂ Z p j l + 1 ∂ A i j l \frac{ \partial MSE }{ \partial A^{l}_{ij} } = \sum_{p=1}^{n_{l+1}}\frac{ \partial MSE }{ \partial Z^{l+1}_{pj} } \cdot \frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} } = \sum_{p=1}^{n_{l+1}} \delta^{l+1}_{pj} \cdot \frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} } ∂ A ij l ∂ MSE = p = 1 ∑ n l + 1 ∂ Z p j l + 1 ∂ MSE ⋅ ∂ A ij l ∂ Z p j l + 1 = p = 1 ∑ n l + 1 δ p j l + 1 ⋅ ∂ A ij l ∂ Z p j l + 1
根据向前传播中Z l + 1 Z^{l+1} Z l + 1 和A l A^{l} A l 的关系,我们有
∂ Z p j l + 1 ∂ A i j l = ∂ ∂ A i j l [ ∑ q = 1 n l W p q l + 1 A q j l + B p l + 1 ] = W p i l + 1 \frac{ \partial Z^{l+1}_{pj} }{ \partial A^{l}_{ij} } = \frac{ \partial }{ \partial A^{l}_{ij} } \left[ \sum_{q=1}^{n_{l}}W^{l+1}_{pq}A^{l}_{qj} +B^{l+1}_{p} \right] = W^{l+1}_{pi} ∂ A ij l ∂ Z p j l + 1 = ∂ A ij l ∂ [ q = 1 ∑ n l W pq l + 1 A q j l + B p l + 1 ] = W p i l + 1
于是
δ i j l = ( ∑ p = 1 n l + 1 δ p j l + 1 W p i l + 1 ) σ ′ ( Z i j l ) \delta^{l}_{ij}=\left(\sum_{p=1}^{n_{l+1}} \delta^{l+1}_{pj}W^{l+1}_{pi}\right) \sigma'(Z^{l}_{ij}) δ ij l = ( p = 1 ∑ n l + 1 δ p j l + 1 W p i l + 1 ) σ ′ ( Z ij l )
我们就得到了l l l 层误差信号矩阵元,其矩阵形式为(注意到乘积第一项是δ l + 1 \delta^{l+1} δ l + 1 与( W l + 1 ) T (W^{l+1})^{T} ( W l + 1 ) T 的矩阵乘法分量表示形式)
δ l = ( ( W l + 1 ) T δ l + 1 ) ⊙ σ ′ ( Z l ) \delta^{l} = ((W^{l+1})^{T}\delta^{l+1})\odot\sigma'(Z^{l}) δ l = (( W l + 1 ) T δ l + 1 ) ⊙ σ ′ ( Z l )
最后 我们再来看权重梯度的计算
我们的目标是求得∂ M S E ∂ W i j l \frac{ \partial MSE }{ \partial W^{l}_{ij} } ∂ W ij l ∂ MSE 误差函数对任一l l l 层的权重的偏导数,考虑到该偏导数会影响到所有经过该神经元(l l l 层第i i i 个神经元)的样本,所以Z i p l , p = 1 , 2 , 3 , … , m Z^{l}_{ip},p=1,2,3,\dots,m Z i p l , p = 1 , 2 , 3 , … , m 都依赖于该权重参数W i j l W^{l}_{ij} W ij l 有
∂ M S E ∂ W i j l = ∑ p = 1 m ∂ M S E ∂ Z i p l ⋅ ∂ Z i p l ∂ W i j l \frac{ \partial MSE }{ \partial W^{l}_{ij} } = \sum_{p=1}^{m} \frac{ \partial MSE }{ \partial Z^{l}_{ip} } \cdot \frac{ \partial Z^{l}_{ip} }{ \partial W^{l}_{ij} } ∂ W ij l ∂ MSE = p = 1 ∑ m ∂ Z i p l ∂ MSE ⋅ ∂ W ij l ∂ Z i p l
第一项正是δ i p l \delta^{l}_{ip} δ i p l 现在需要计算第二项,和之前一样考虑向前传播中Z l Z^{l} Z l 和l ^{l} l 的关系,有
∂ Z i p l ∂ W i j l = ∂ ∂ W i j l [ ∑ q = 1 n l − 1 W i q l A q p l − 1 + B i l ] = A j p l − 1 \frac{ \partial Z^{l}_{ip} }{ \partial W^{l}_{ij} } = \frac{ \partial }{ \partial W^{l}_{ij} } \left[ \sum_{q=1}^{n_{l-1}} W^{l}_{iq}A^{l-1}_{qp}+B^{l}_{i} \right]=A^{l-1}_{jp} ∂ W ij l ∂ Z i p l = ∂ W ij l ∂ [ q = 1 ∑ n l − 1 W i q l A qp l − 1 + B i l ] = A j p l − 1
所以
∂ M S E ∂ W i j l = ∑ p = 1 m δ i p l A j p l − 1 \frac{ \partial MSE }{ \partial W^{l}_{ij} } =\sum_{p=1}^{m} \delta^{l}_{ip}A^{l-1}_{jp} ∂ W ij l ∂ MSE = p = 1 ∑ m δ i p l A j p l − 1
这一项正好是矩阵( A l − 1 ) T (A^{l-1})^{T} ( A l − 1 ) T 和δ l \delta^{l} δ l 乘法的矩阵元表示,所以最终有
∂ M S E ∂ W l = δ l ( A l − 1 ) T \frac{ \partial MSE }{ \partial W^{l} } = \delta^{l}(A^{l-1})^{T} ∂ W l ∂ MSE = δ l ( A l − 1 ) T
其中δ l \delta^{l} δ l 是( n l × m ) (n_{l}\times m) ( n l × m ) 维,而A l − 1 A^{l-1} A l − 1 是( n l − 1 × m ) (n_{l-1}\times m) ( n l − 1 × m ) 维,梯度矩阵是( n l × n l − 1 ) (n_{l}\times n_{l-1}) ( n l × n l − 1 ) 矩阵
不要忘记样本数1 m \frac{1}{m} m 1 已经被吸收进学习率η \eta η 中了
类似的,我们也可以求得∂ M S E ∂ B l = δ l 1 m \frac{ \partial MSE }{ \partial B^{l} }=\delta^{l}\mathbb{1}_{m} ∂ B l ∂ MSE = δ l 1 m
那么我们整个流程也就很清晰了:
初始化:随机初始化矩阵W l W^{l} W l 和B l B^{l} B l
重复以下步骤直到满足停止条件
向前传播 :计算所有的Z l , A l Z^{l},A^{l} Z l , A l
计算误差 :使用均方误差函数 M S E MSE MSE
反向传播 :计算误差信号δ l \delta^{l} δ l
计算梯度,依照梯度下降法更新参数值
停止条件一般是达到最大迭代次数或误差足够小
书上称这种算法为累积BP算法 ,如果只针对一个样例的时候m = 1 m=1 m = 1 ,称为标准BP算法 ,我们最后看看这种特例:
当m = 1 m=1 m = 1 时,除了权重矩阵W l W^{l} W l 和偏置向量B l B^{l} B l 其他的矩阵都变为向量
简单带入此时W l ← W l − η δ l ( a l − 1 ) T W^{l} \leftarrow W^{l}-\eta\delta^{l}(a^{l-1})^{T} W l ← W l − η δ l ( a l − 1 ) T
和书上可以对应上g j → δ l , b h → a l − 1 g_{j}\rightarrow \delta^{l},b_{h}\rightarrow a^{l-1} g j → δ l , b h → a l − 1
以下是优化后的表述,已对重点内容进行标记并补充了缺失部分:
一般来说,先通过累积BP算法 (即在整个训练集上计算误差后统一更新权重)使模型误差下降到一定程度后,当发现收敛速度明显降低 时,转为使用标准BP算法 (每个样本单独更新权重)往往能获得更优解。
虽然BP神经网络具有强大的拟合能力,但容易遭遇过拟合问题 。常用的缓解方法包括:
早停(Early Stopping)
在每次参数更新后,用验证集 估计模型性能
当验证误差上升 时立即终止训练
正则化(Regularization) :在误差函数中增加一个用于描述网络复杂度的部分,将误差和复杂度进行折中
最后关于隐层神经元个数的选取仍然是个未解决的问题,实践中一般采用试错法。
5.3 全局最小和局部极小
由数学知识可知,单纯使用梯度下降法 (Gradient Descent)得到的驻点可能只是局部极小值 而非全局最优解。为缓解此问题,常用以下方法增强搜索能力:
多初始点策略
多次随机初始化参数,通过反向传播(BP)分别计算误差,最终选择所有结果中误差最小的参数组合。本质是通过增加搜索起点数量 ,提升找到全局最小值的概率。
模拟退火(Simulated Annealing)
在迭代过程中以概率 p p p 接受比当前解更差的结果,其中接受概率 p p p 随温度参数 T T T 衰减,通常按 p = e − Δ E / T p = e^{-\Delta E/T} p = e − Δ E / T 计算。通过阶段性允许“上山”行为逃离局部极小值 ,同时保证算法最终收敛。
随机梯度下降(SGD)
在计算梯度时引入随机性(如mini-batch采样),使得即使到达局部极小值,由于梯度估计噪声存在,∇ f ( x ) ≠ 0 \nabla f(x) \neq 0 ∇ f ( x ) = 0 仍可能继续搜索。噪声机制提供逃离局部极小的可能性 。
遗传算法(Genetic Algorithm)
通过种群进化机制(选择、交叉、变异)在参数空间进行全局探索,适合高维非凸优化问题 。
这些方法的共同特点是:
增加找到全局最小值的概率 (通过扩大搜索范围或引入随机性)
可能牺牲部分收敛速度 (如模拟退火的退火过程需要精细调参)
无法严格保证获得全局最优解 ,但在实际工程中往往能显著改善模型性能
5.4 其他神经网络
5.4.1 RBF网络
重点 :径向基函数网络 是一种两层前馈网络,通过径向基函数 实现输入到隐层的映射。其核心公式为隐藏层神经元的激活函数:
φ ( x ) = ∑ i = 1 q w i ρ ( x , c i ) \varphi(\mathbf{x}) = \sum_{i=1}^{q}w_{i}\rho(\mathbf{x},\mathbf{c}_{i}) φ ( x ) = i = 1 ∑ q w i ρ ( x , c i )
特点 :
首先确定基函数中心c i \mathbf{c}_{i} c i
ρ \rho ρ 是径向基函数,要求径向对称(只显示依赖于径向距离)
一般采用高斯径向基函数e − β i ∣ ∣ x − c i ∣ ∣ 2 e^{-\beta_{i}||\mathbf{x}-\mathbf{c}_{i}||^{2}} e − β i ∣∣ x − c i ∣ ∣ 2
输出层为线性组合 ,适合函数逼近任务
然后用BP算法等确定参数 w i , β i w_{i},\beta_{i} w i , β i
5.4.2 ART网络
自适应共振理论 (Adaptive Resonance Theory, ART ) 网络是一种基于无监督学习 的神经网络模型。它通过模拟生物大脑的稳定性-可塑性平衡 ,解决了机器学习中“学习新信息时遗忘旧知识”的核心矛盾。
其核心机制包含两个关键阶段:
共振机制 (Resonance)
输入模式与所有已存储的类别原型进行相似度比较(选择阶段 )
用预设的警惕参数 ρ \rho ρ (Vigilance Parameter)进行最佳匹配类别。
匹配度检测 (Match Tracking)
匹配成功 :更新原型权重
匹配失败 :抑制当前类别并重新选择,若无合适类别则动态扩展网络结构 创建新类别
这种抑制其他类别,同一时刻只有一个神经元胜出的策略被称为竞争型学习,是无监督学习常用的策略
目前已经成为算法族,主要变体家族:
基础型 :ART1(二进制输入)、ART2(连续值输入)
扩展型 :模糊ART (Fuzzy ART,支持混合数据) ARTMAP (监督学习版本,含反馈机制)
5.4.3 SOM网络
SOM(自组织映射) 是一种无监督神经网络 ,其核心功能是将高维数据 映射到低维网格 (通常是二维)上,同时保持数据的拓扑结构 。
核心原理 :
竞争机制 :输入数据会激活网络中最相似的神经元 (称为最佳匹配单元(BMU) ),通过距离度量(如欧氏距离)确定。
权重调整 :不仅调整 BMU 的权重,其网格空间中的邻近神经元 也会根据输入数据更新权重
动态衰减 :随着训练进行,邻域范围 和学习率 逐渐减小,最终形成有序的映射结构,反映数据的内在分布。
5.4.4 级联相关网络
级联相关网络 是一种监督学习算法 ,其核心特征是在训练过程中动态扩展网络结构 ,通过逐个添加隐藏单元来优化性能。
原理:
初始结构 :网络从最小架构开始(仅包含输入层 和输出层 )。
误差评估 :若当前网络的输出误差未达目标,则触发候选单元生成 。
候选单元训练 :
新隐藏单元作为候选加入,其训练目标为最大化输出与网络残差的相关性
单元固化 :选择相关性最高的候选单元永久加入网络 ,并冻结其输入权重 。
输出层调参 :重新训练所有输出层连接权重(使用反向传播等算法)。
终止条件 :重复步骤2-5,直至达到预设的误差阈值 或最大单元数 。
优势 :
结构自适应性 :无需预设隐藏层规模。
训练效率 :固定权重的单元减少后续计算量。
但是数据量小的时候容易过拟合
5.4.5 Elman网络
Elman网络 是一种早期的、结构相对简单的循环神经网络(RNN) ,它的核心机制是通过一个显式的上下文层 来实现时间上的信息传递和记忆。
工作原理 :
在每个时间步,网络的隐层 不仅接收当前的外部输入 。
同时,它还会接收来自上下文层 的输入。
这个上下文层 的作用很简单:它完整地复制并保存了上一个时间步隐层的激活值(状态) 。
因此,当前隐层的计算是基于当前输入 和上一时刻的隐层状态 共同决定的,这就形成了时间上的递归 。
关键特点 :
简单反馈回路 :通过上下文层实现了隐层状态向下一步的直接反馈。
动态记忆 :这种反馈机制使网络能够拥有一定的“记忆”能力,处理与时间顺序相关的信息。
短期记忆局限 :由于上下文层只存储紧邻前一时间步 的状态,对于需要回顾更早信息的长期依赖问题,Elman网络的表现通常不佳。
主要应用 : 因其结构简单和短期记忆特性,常用于:
处理具有较短时间依赖 的时间序列数据(例如简单的信号预测)。
作为早期研究中进行小规模序列建模 的基础(如初期的语音识别或简单文本生成任务)。
5.4.6 Boltzmann机
Boltzmann机 是一种基于能量函数 和概率统计 的随机神经网络,其核心特性是网络中的单元状态通过概率性决策 确定。
-原理:
网络通过定义全局能量函数 E ( s ) = − ∑ i < j w i j s i s j E(\mathbf{s}) = -\sum_{i<j} w_{ij} s_i s_j E ( s ) = − ∑ i < j w ij s i s j (其中 w i j w_{ij} w ij 为连接权重,s i s_i s i 为单元状态)来描述系统状态。
能量最小化驱动 :单元状态按概率 P ( s i = 1 ) = 1 1 + e − Δ E i / T P(s_i=1) = \frac{1}{1+e^{-\Delta E_i/T}} P ( s i = 1 ) = 1 + e − Δ E i / T 1 更新(Δ E i \Delta E_i Δ E i 为状态变化能量差,T T T 为温度参数),通过模拟退火 等随机过程逐步收敛到低能量状态。
学习目标 :调整权重 w i j w_{ij} w ij ,使网络在热平衡时的状态分布 P ( s ) P(\mathbf{s}) P ( s ) 逼近训练数据的真实概率分布 ,通常通过对比散度(Contrastive Divergence)等算法实现。
本节不是重点,所以我也只是囫囵吞枣地看了一遍,只有玻尔兹曼让我有点熟悉
5.5 深度学习
深度学习是机器学习的一个分支,其核心在于使用包含多个处理层 (即“深度”结构)的模型,通过自动学习数据从低级到高级的层次化特征表示 来解决问题。与传统机器学习相比,深度学习具有两大优势:
减少人工特征工程 :传统方法依赖领域知识手动设计特征,耗时且性能受限;
更强的表征能力 :浅层模型只能捕捉简单特征,而深层模型可表达复杂非线性关系。
早期深度网络面临梯度消失/爆炸 问题,导致误差在多隐层反向传播时难以收敛。突破性解决方案包括:
1. 逐层预训练 (Layer-wise Pre-training)
无监督初始化 :逐层训练(如用RBM)获得输入数据的有效表示,初始化权重
监督微调 (Fine-tuning) :用有标签数据和反向传播(BP)联合优化整个网络
本质是通过分组参数优化(预训练+微调)解决问题。典型实现如深度信念网络 (DBN) ,由多层受限玻尔兹曼机 (RBM)堆叠后BP微调。
2. 权共享 (Weight Sharing)
通过让一组神经元共享连接权重显著减少参数量,这一策略在卷积神经网络 (CNN)中成为处理网格结构数据(如图像)的关键。
深度学习在我的学习计划之内,所以这一章节我仅仅看个大概
本文由博客一文多发平台 OpenWrite 发布!