文章目录
lhy机器学习笔记-5
局部最小值local minimal和鞍点 saddle point
训练过程中发现loss 无法下降时,并不一定是到达了local minimal,只能说是卡在了某个critical point
critical point可能有许多情况,local minimal、local maximal、saddle point
存在方法去 判断 critical point是local minimal 还是 saddle point:
根据泰勒展开式:
L
(
θ
)
≈
L
(
θ
′
)
+
(
θ
−
θ
′
)
T
g
+
1
2
(
θ
−
θ
′
)
T
H
(
θ
−
θ
′
)
L(\theta) \approx L(\theta') + (\theta - \theta')^Tg + \frac{1}{2}(\theta - \theta')^TH(\theta - \theta')
L(θ)≈L(θ′)+(θ−θ′)Tg+21(θ−θ′)TH(θ−θ′)
其中$ H $是黑塞矩阵,
H
i
j
=
∂
2
∂
θ
i
∂
θ
j
L
(
θ
′
)
H_{ij} = \frac{\partial^2} {\partial\theta_i\partial\theta_j} L(\theta')
Hij=∂θi∂θj∂2L(θ′)
计算黑塞矩阵的特征值eigenvalue:
- 如果特征值全为正,则 矩阵正定,该点(critical point,下同)为 local minimal
- 如果特征值全为负,则 矩阵负定,该点为 local maximal
- 如果特征值有正有负,则 该点为 鞍点
critical point为鞍点时,模型的Loss还可以继续通过训练来降低,黑塞矩阵可指示梯度更新的方向:
令 u u u 是 H H H 的特征向量, λ \lambda λ 是 H H H 的特征值
则,
u
T
H
u
=
u
T
(
λ
u
)
=
λ
∣
∣
u
∣
∣
2
u^THu = u^T(\lambda u) = \lambda ||u||^2
uTHu=uT(λu)=λ∣∣u∣∣2
L ( θ ) ≈ L ( θ ′ ) + 1 2 ( θ − θ ′ ) T H ( θ − θ ′ ) L(\theta) \approx L(\theta') + \frac{1}{2}(\theta - \theta')^TH(\theta - \theta') L(θ)≈L(θ′)+21(θ−θ′)TH(θ−θ′)
由上式,当特征值小于0时, L ( θ ) < L ( θ ′ ) L(\theta) < L(\theta') L(θ)<L(θ′)
因此, 令 θ = θ ′ + u \theta = \theta' + u θ=θ′+u ,即可降低 损失函数的值
沿着 u u u的方向更新参数,即可逃离鞍点继续降低损失函数的值
幸运的是,训练过程中,Loss下降时往往是卡在了 saddle point,即还有方法可以救
batch批次 and momentum动量
对于大量训练数据,可以对数据进行分批,来进行训练,选取大的batch和小的batch的影响如下表:
由于大的batch和小的batch对模型训练有影响,因此batch size也是一个需要决定的超参数
momentum: 对抗 minimal 和 saddle point 的方法
实际训练中往往采用梯度下降和动量结合的方法(gradient descent + momentum):
即更新参数(移动)时:前一步的参数的变化量(前一步的移动) 减去 现在的梯度
adaptive learning rate(optimizer)
注:critical point 并不是 训练时真正面对的问题
Training can be difficult even without critical points.
实际训练过程中,当loss不再变动时,gradient可能并没有很小
可能是处在上图的情况,参数在两个谷壁之间来回变动
解决方法:采用adaptive learning rate 方法,对不同参数采用不同的learning rate
方法1:Adagrad
采用这种方法,参数变化的表达式为:
θ
i
t
+
1
←
θ
i
t
−
η
σ
i
t
g
i
t
\theta^{t+1}_i \leftarrow \theta_i^t - \frac{\eta}{\sigma_i^t}g_i^t
θit+1←θit−σitηgit
其中,
θ
i
t
=
1
t
+
1
∑
i
=
0
t
(
g
i
t
)
2
\theta^t_i = \sqrt{\frac{1}{t+1}\sum_{i=0}^t(g_i^t)^2}
θit=t+11i=0∑t(git)2是参数独立的,对每个参数,甚至每一层都是不同的;η是学习率(learning rate)
采用这样的方法,可以使得在梯度较大的地方,参数变动的步伐稍小;在梯度较小的时候,参数变动的步伐稍大;随着gradient的变化,来自动调整learning rate
方法2:RMSProp
σ i t = α ( σ i t − 1 ) 2 + ( 1 − α ) ( g i t ) 2 \sigma_i^t = \sqrt{\alpha(\sigma_i^{t-1})^2 + (1-\alpha)(g_i^t)^2} σit=α(σit−1)2+(1−α)(git)2
Adam: RMSProp + Momentum
learning rate scheduling
- Learing Rate Decay:
随着时间的推移,随着慢慢靠近终点,逐渐减小learning rate
θ
i
t
+
1
←
θ
i
t
−
η
t
σ
i
t
g
i
t
\theta^{t+1}_i \leftarrow \theta_i^t - \frac{\eta^t}{\sigma_i^t}g_i^t
θit+1←θit−σitηtgit
2. warm up
learning rate 先变大 后变小
classification
classification:输出是一个向量
把类别编码:one-hot vector
Softmax:利用其可以得到分类结果向量
分类的Loss Function:
常用cross-entropy:(更常用于分类问题上)
e
=
−
∑
i
y
^
i
l
n
y
i
′
e = -\sum_i\hat y_i lny_i'
e=−i∑y^ilnyi′
最小化 交叉熵 等价于 最大化 likelyhood
cross-entropy 更容易训练
batch normalization
normalization 的目的是 使向量中的每一维的取值范围是一样的,使得模型训练更加容易
实际在进行操作的时候,会将输入数据分成若干batch,每个 batch 做 normalization 输入到神经网络中做训练。
该方法适用于 batch size 比较大的时候
batch normalization的 Testing:
测试阶段并不是总是有batch
因此,对于batch normalization的Testing阶段,在训练时会计算 batch 的 移动平均,
μ
‾
←
p
μ
‾
+
(
1
−
p
)
μ
t
\overline \mu \leftarrow p \overline \mu + (1-p)\mu^t
μ←pμ+(1−p)μt
在训练时用这个移动平均值替代测试阶段要用到的,如下图
为什么 batch normalization 会work?
How does Batch Normalization Help Optimization?(paper)
实验结果和理论分析 支持batch normalization 可以改变 error surface 的 landscape
其他的normalization方法: