优化的目标:更好、更快

梯度局部最小

优化的头号敌人是梯度为零,梯度为零即有众所周知的局部最小,还有鞍部点。

但幸好在高维空间局部最小并非经常出现,例如下面左图,在一维空间上红点是局部最小,但在二维空间上红点是鞍部点。实际模型参数空间十分复杂,在右侧二维空间的局部最小也在高维空间中大多不是局部最小。

batch size

用大batch size还是小的呢?较大的batch size训练更快,较小的batch size精度和泛化能力更好。

What?batch size不是越大越好么?实际上不是的。较大batch容易得到陡峭的最优,但越陡峭模型在测试时容易不太稳定,泛化能力减弱。但是经过特别的设计,大的batch可以又快又好。

那平时训练时是不是用batch 1与8差别会很大呢?不是的。batch大小的差别到10k上才会有显著的差异。可以放心用“大”一点的batch了。

Momentum

既然局部最优是坑,那怎么趟过去呢?那就不要只看局部,便有了momentum(类似物理学动量),考虑之前所有梯度。

学习率

不同的参数需要不同学习率才能学习的较好,那么有没有什么自动的方法呢?最经典的就是Adam:RMSProp+momentum

上面没有直接修改学习率,对梯度小的情况有良好的改善,但还是可能出现问题

那么一些学习率调整策略(黑科技)便被提了出来,一是学习率衰减,而是warm up。学习率调整的策略(poly,cosine等结合warmup)目前也基本是各种训练的标配

损失函数

在one-hot问题中交叉熵优于MSE

batch normalization

之前已经知道模型空间十分复杂,看起来崎岖陡峭,不同维度梯度差异显著,这种情况下优化就比较费劲。那通过平滑岂不就让训练变容易。所以我们常对输入数据进行归一化,同理对特征层也可以归一化,比如batch normalization。正如下图所示

对特征做归一化和对输入数据做是相似的方法。实际上对输入数据是否做归一化,对训练影响不大(个人经验)。

这里蓝线比黑色虚线在效率和精度上都有显著提升…真实神器

参考:李宏毅 机器学习

https://www.bilibili.com/video/BV1Wv411h7kN?p=7

 

 

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐