Tips for training
如何得到更好的训练结果
Tips for training.
Model bias
The model is too simple.
Solution: redesign your model to make it more flexible.
Optimization
Optimization fails because of critical point(微分为0的点,包括 local minama 和 saddle point 马鞍面的鞍点)
说明:
-
每多一个参数,维度就会升高一个,就更容易产生 saddle point,而不是 local minima。
-
从经验上看起来,local minima 并没有那么常见,因此很多情况下,是可以使用 saddle point 来对 less 做优化的。
-
下面通过 saddle point 继续减少 Less 的值。
Hessian 矩阵法优化
当走到 critical point 时,梯度为0,则绿的的这一项为0。
H 可以告诉我们参数更新的方向:
如果遇到了 Saddle point,可以使用 Hessian 矩阵中为负的特征值,找出它对应的特征矩阵 μ,θ - θ’ = μ,则 θ’ = θ - μ,就可以降低 L(θ) 的值。
但是这种方法需要计算 Hessian 矩阵,涉及二阶导数,还需要求出矩阵的特征值,特征矩阵,计算量是很大的,所以一般实际操作中不使用这种方法。
Small Batch
小的 batch 往往会得到比大的 batch 更好的结果。
- 当一次梯度下降被卡住时,换一个 batch,可能就不会被卡住了,避免了掉入 local minama 跳不出来的问题,这就是 batch 比较多的优势。
Gradient Descent + Momentum
模拟物理中的惯性的思想:使运动的方向不仅仅取决于梯度的方向,还取决于上一步运动的方向。
Movement = movement of last step minus gradient at present.
- 这样可以一定程度上避免掉入 local minama 跳不出来的问题。
根据迭代,每次的 movement mi 可以用前 i - 1 次的梯度来表示:
Adaptive Learning Rate
当 loss 不再下降时,gradient 不一定真的变得很小。
因此需要对每个参数有特制化的 learning rate 。
可能是卡在 误差曲面 如左图所示的山谷中,由于 learning rate 固定,所以 less 无法再下降。
因此,直接把 learning rate 调小一点不就可以解决问题了吗?
但是,直接把 learning rate 调小一点,或许可以使训练进入“山谷”里面,但是在较平滑的地方,由于 learning rate 太小了,就难以使训练前进。
因此希望:
- 在较平滑的地方 learning rate 大。
- 在较陡峭的地方 learning rate 小。
解决方案:
在原来的 learning rate 上除以一个 σ。
一般有两种计算 σ 的方法
- Root Mean Square
- RMSProp
- Adam
Root Mean Square
σ 为之前训练得到的 gradient 平方和开根号。
之前的每个 gradient 对 σ 贡献度相同。
假设了同一个参数的 learning rate 就是差不多同样的一个值,但是同一个参数的 learning rate 也会随时间而改变。使用 RMSProp 方法就可以避免这个弊端。
RMSProp
σ 受最近的 gradient 影响大,受过去的 gradient 影响小。
Adam
RMSProp + Momentum
最常使用的 optimization 的方法,Pytorch 中有实现好的套件。
Learning Rate Scheduling
当训练在比较平滑的地方不断积累时, σ 的值会比较小,使得一次的移动的步幅较大,所以一旦出现误差,就容易出现以下情形:
可以通过 Learning Rate Scheduling 来使 Learning Rate 的大小也随时间变化,从而消除这种误差:
有两种 Learning Rate Scheduling 的方法:
- Learning Rate Decay
- Warm Up:在一些远古的论文中经常会看到 Warm Up 的方法,由于 σ 是一个统计得来的数据量,所以一开始是不精准的。所以开始时,令 learning rate 比较小,等 σ 统计的更精准之后,再增大 learning rate 。
Loss
Loss function 的选择会影响 Optimization 的难度。
例如:在分类问题中,Cross-entropy 比 Mean Square Error(MSE)效果更好,因此更常用。
由上图可以看出,Mean Square Error 在 Loss 比较大的地方,梯度较小,因此训练可能会停在里面出不来。而 Cross-entropy 在 Loss 比较大的地方,梯度也较大,方便训练。
Summary of Optimization
Overfitting
在 training data 上效果好,在 testing data 上效果差。
More training data——最有效的解决方案
-
收集新的资料。
-
Data augmentation:根据自己对资料的理解,对原始资料做变换,增加训练资料数量(对图片左右翻转、放大缩小)
减少模型的弹性
-
Less parameters, sharing parameters
-
Less features
-
Early stopping
-
Regularization
-
Dropout
Mismatch
-
Your training and testing data have different distributipns.
-
Be aware of how data is generated.