课程小结一:BP神经网络与优化算法
1. 多层前馈网络与误差反传算法
1.1. 多层感知机
1.1.1. XOR问题
线性不可分问题:无法进行线性分类。 Minsky于1969 年提出 XOR问题。
1.1.2. 多层感知机
在输入和输出层间加一或多层隐单元,构成多层感知器(多层前馈神经网络):
设
y
=
f
(
∑
(
w
i
x
i
)
−
θ
)
y=f(\sum(w_ix_i)-\theta)
y=f(∑(wixi)−θ),其中
f
f
f是激活函数,
w
i
w_i
wi是权重,
x
i
x_i
xi是输入,
θ
\theta
θ是阈值。
三层感知器可识别任一凸多边形或无界的凸区域。更多层感知器网络,可识别更为复杂的图形。
多层感知器网络,有如下定理:
- 定理1:若隐层节点(单元)可任意设置,用三层阈值节点的
网络,可以实现任意的二值逻辑函数。 - 定理2:若隐层节点(单元)可任意设置,用三层 S 型非线性特
性节点的网络,可以一致逼近紧集上的连续函数或按 范数逼近紧
集上的平方可积函数。
1.2. BP神经网络
1.2.1. 多层前馈网络
多层感知机是一种多层前馈网络, 由多层神经网络构成,每层网络将输出传递给下一层网络。神经元间的权值连接仅出现在相邻层之间,不出现在其他位置。如果每一个神经元都连接到上一层的所有神经元(除输入层外),则成为 全连接网络 。
多层前馈网络的反向传播(BP)学习算法,简称 BP 算法 ,是有导数的学习,它是梯度下降法在多层前馈网中的应用。
网络结构: 𝐮(或 𝐱)、 𝐲是网络的输入、输出向量,神经元用节点表示,网络由输入层、隐层和输出层节点组成,隐层可一层,也可多层(图中是单隐层),前层至后层节点通过权联接。由于用 BP 学习算法,所以常称 BP 神经网络。
1.2.2 BP算法
- BP 学习算法由正向传播和反向传播组成:正向传播是输入信号从输入层经隐层,传向输出层,若输出层得到了期望的输出,则学习算法结束;否则,转至反向传播。
- 反向传播是将误差样本输出与网络输出之差)按原联接通路反向计算,由梯度下降法调整各层节点的权值和阈值,使误差减小。
1.3. BP算法详解
BP算法是一种用于训练神经网络的反向传播算法。其基本算法可以概括如下:
- 前向传播:通过神经网络计算出模型的输出。
对于隐藏层的第 j j j 个神经元,其输入可以表示为:
z j ( 1 ) = ∑ i = 1 n w i j ( 1 ) x i + b j ( 1 ) z_j^{(1)} = \sum_{i=1}^{n} w_{ij}^{(1)} x_i + b_j^{(1)} zj(1)=i=1∑nwij(1)xi+bj(1)
其中, x i x_i xi 是输入数据的第 i i i 个特征, w i j ( 1 ) w_{ij}^{(1)} wij(1) 是连接输入层和隐藏层的权重, b j ( 1 ) b_j^{(1)} bj(1) 是隐藏层的偏置。这个式子实际上是一个加权求和,然后加上偏置项的结果。
然后,应用激活函数 f f f,得到隐藏层的输出:
a j ( 1 ) = f ( z j ( 1 ) ) a_j^{(1)} = f(z_j^{(1)}) aj(1)=f(zj(1))
其中, a j ( 1 ) a_j^{(1)} aj(1) 是隐藏层的第 j j j 个神经元的输出,可以作为下一层的输入。 - 计算损失:将模型的输出与真实标签进行比较,计算出模型的预测与实际标签之间的差异。
均方误差(Mean Squared Error,MSE)损失函数公式如下:
M S E = ( 1 / N ) ∗ Σ ( y i − y ^ i ) 2 MSE = (1/N) * Σ(y_i - ŷ_i)^2 MSE=(1/N)∗Σ(yi−y^i)2
其中, N N N 是样本数量, y i y_i yi 是第 i i i 个样本的真实值, y ^ i ŷ_i y^i 是对应的模型预测值。 - 反向传播:计算损失函数对模型参数(权重和偏置)的梯度。
下面是反向传播算法中常见的权重更新公式的一个例子,使用梯度下降算法:
假设 w w w 是要更新的权重,学习率为 α \alpha α,损失函数为 L L L,那么权重的更新可以用以下公式表示:
w new = w − α ⋅ ∂ L ∂ w w_{\text{new}} = w - \alpha \cdot \frac{\partial L}{\partial w} wnew=w−α⋅∂w∂L
这里 ∂ L ∂ w \frac{\partial L}{\partial w} ∂w∂L 是损失函数 L L L 对权重 w w w 的偏导数,表示损失函数关于权重的梯度。 - 参数更新:利用梯度下降或其变种方法,根据损失函数的梯度更新神经网络的参数。
1.4. 算法评述
1.4.1. 优点
- 学习完全自主;
- 可逼近任意非线性函数;
1.4.2. 缺点
- 算法非全局收敛;
- 收敛速度慢;
- 学习速率 α 选择
- 神经网络如何设计
2. 性能优化
2.1. 常用技巧
- 模型初始化:简单的考虑,把所有权值在[1,1] 区间内按均值或高斯分布进行初始化。
- Xavier初始化:为了使得网络中信息更好的流动,每一层输出的方差应该尽量相等。
- 训练数据与测试数据:数据包括:训练数据、验证数据、测试数据,通常三者比例为70%、15%、15%或60%、20%、20%,当
数据很多时,训练和验证数据可适当减少- 𝐾折交叉验证:原始训练数据被分成K 个不重叠的子集。 然后执行 K 次模型训练和验证,每次在 K −1 个子集上进行训练, 并在剩余的一个子集(在该轮中没有用于训练的子集)上进行验证。 最后,通过对 K 次实验的结果取平均来估计训练和验证误差。
- 欠拟合与过拟合
- 欠拟合:误差一直比较大
- 过拟合:在训练数据集上误差小而在测试数据集上误差大
- 权重衰减(𝐿2正则化):为防止过拟合和权值震荡,加入新的指标函数项。
- Dropout(暂退):在整个训练过程的每一次迭代中,标准暂退法包括在计算下一层之前将当前层中的一些节点置零。
2.2. 动量法
2.2.1. 病态曲率
一个经典的病态曲率的例子是 Rosenbrock 函数(也称为“香蕉函数”),它是一个非常著名的优化问题,通常用来测试优化算法的性能。
Rosenbrock 函数的定义如下:
f
(
x
,
y
)
=
(
a
−
x
)
2
+
b
(
y
−
x
2
)
2
f(x, y) = (a - x)^2 + b(y - x^2)^2
f(x,y)=(a−x)2+b(y−x2)2
其中,
a
a
a 和
b
b
b 是常数,通常设置为
a
=
1
a = 1
a=1 和
b
=
100
b = 100
b=100。这个函数的全局最优解位于
x
=
a
x = a
x=a 和
y
=
a
2
y = a^2
y=a2 处,其中
f
(
x
,
y
)
=
0
f(x, y) = 0
f(x,y)=0。
然而,Rosenbrock 函数的曲率在全局最优解附近变得非常病态。在该点附近,Hessian 矩阵的特征值之间存在数量级的差异,其中一个特征值非常小而另一个特征值非常大。这导致优化算法在接近全局最优解时变得非常困难,因为算法可能会受到非常大的梯度幅度的干扰,从而使得步长难以确定,很可能会偏离正确的方向。
2.2.2. 动量法与NAG
动量法(Momentum)是一种优化算法,用于训练神经网络时加速收敛速度和减小震荡。其基本思想是在更新参数时,不仅考虑当前的梯度信息,还考虑之前的更新方向,从而在参数更新时引入动量。
下面是动量法的参数更新公式:
v
t
+
1
=
β
⋅
v
t
+
(
1
−
β
)
⋅
∇
L
(
θ
t
)
v_{t+1} = \beta \cdot v_{t} + (1 - \beta) \cdot \nabla L(\theta_t)
vt+1=β⋅vt+(1−β)⋅∇L(θt)
θ
t
+
1
=
θ
t
−
α
⋅
v
t
+
1
\theta_{t+1} = \theta_{t} - \alpha \cdot v_{t+1}
θt+1=θt−α⋅vt+1
其中:
- v t v_t vt 是时间步 t t t的动量(momentum),它是之前所有梯度的加权平均。
- β β β 是动量系数,通常取值为 0 0 0 到 1 1 1 之间的一个小数,表示之前动量对当前更新的影响程度。
- ∇ L ( θ t ) \nabla L(\theta_t) ∇L(θt)是当前参数 θ t \theta_t θt 处的梯度。
- α \alpha α 是学习率,用于控制参数更新的步长。
2.3. 自适应梯度算法
2.3.1. AdaGrad算法
Adaptive Gradient:自适应梯度
- 参数自适应变化:具有较大偏导的参数相应有一个较大的学习率,而具有小偏导的参数则对应一个较小的学习率
- 具体来说,每个参数的学习率会缩放各参数反比于其历史梯度平方值总和的平方根
2.3.2. RMSProp算法
RMSProp: Root Mean Square Prop:
- RMSProp 解决AdaGrad 方法中学习率过度衰减的问题
- RMSProp 使用指数衰减平均以丢弃遥远的历史,使其能够快速收敛;此外,RMSProp 还加入了超参数𝜌 控制衰减速率。
2.3.3. Adam算法
Adam算法:
- Adam 在 RMSProp 方法的基础上更进一步:
- 除了加入历史梯度平方的指数衰减平均( 𝑟)外
- 还保留了历史梯度的指数衰减平均( 𝑠),相当于动量。
- Adam 行为就像一个带有摩擦力的小球,在误差面上倾向于平坦的极小值。
2.4. 总结
-
训练中常用技巧包括样本选择、权重衰减、暂退等
-
动量法可有效改善收敛速度,以及避免一些陷入局部极小值
-
AdaGrad及Adam等算法可自适应调节学习速率,加速收敛