当我们使用梯度下降法进行 optimization 时,遇到这种情况,我们很自然地想到,可能是在某一个位置,对参数的微分为 0(例如 local minima 局部最低点、saddle point 鞍点)

1.区分 local minima 和 saddle point

通过 loss function 的形状进行判断,对其进行泰勒展开,判断海森矩阵的正负

第三项>0 local minima

第三项< local maxima

第三项不确定时 saddle point

minimum ratio = nums of positive eigen values / nums of eigen values

意义是正数 eigen 在所有 eigen 中的占比,所以其实很难找到比值为 1 的 ratio

2.batch size 对训练的影响

large:时间长但是准确(但是对于平行运算,计算时间不一定显著增长,这取决于 gpu 的平行处理能力)(同时 large size 会更容易遇到 optimization 的问题)

small:时间短但噪声较大不是很准确

上图中可以解释,对于 large size,可能更容易陷入比较小的sharp minima 中

3. Momentum:

一般我们使用梯度下降来进行 optimization 时,仅仅考虑上一步梯度对于下一步参数的影响,现在引入 momentum 对于下一步的影响,本质上是将上一步移动的方向纳入考虑。

4. 在谷间震荡的问题

如上图所示,橙色叉叉为 critical point,当步长过大时,很容易导致 loss 值震荡,所以我们不断调小步长,得到右图,右图显然在y 轴梯度较大的情况下能很好的趋近橙色叉叉,但是在 x 轴方向上由于梯度过小,无论做多少次的迭代,只能在 x 轴方向轻微向橙色叉叉靠近。

自适应的 learning rate

由上面的问题,我们希望得到一个可以变化的 learning rate,在梯度大的方向缩小步长,在梯度小的方向扩大步长。

这样的想法非常好,但是同样有一个 bug,它仅仅适用于坡度一致的学习,当我们遇到下图的问题时,沿着 x 轴的方向,不同的 w1 会有不一样的坡度,所以我们需要 learning rate 有更加灵活的方法。由此提出 RMSProp 的方法。

所以我们综合以上的各种方法,提出适应性比较强的方法,那就是 momentum+rmsprop 方法

Logo

码道开发者社区,聚焦华为云码道 CodeArts 代码智能体,沉淀 Agent、Skill、鸿蒙开发实战内容,供开发者查阅资料、交流技术、分享工程实践

更多推荐