优化方法,激活函数

总结机器学习常用的优化方法;

总结深度学习常用的激活函数;

0x01 无约束优化方法

直接法和迭代法;

迭代法主要有,一阶的梯度下降法,二阶的牛顿法

1-1 梯度下降 一阶泰勒展开

1-2 牛顿法 二阶泰勒展开

对于二次函数(或在局部是二次的函数),Hessian矩阵H正定,那么H^{-1}可计算,牛顿法会使参数直接跳到极小值点。对于非二次的函数,只要Hessian矩阵在当前保持正定,牛顿法依然适用,可以迭代地更新下去。

相比起一阶方法,牛顿法能够充分利用二阶微分的信息,减少迭代的次数,缩短训练时间。

最优化问题中,牛顿法为什么比梯度下降法求解需要的迭代次数更少?

​ 牛顿法是二阶收敛,梯度下降是一阶收敛,所以牛顿法就更快。如果更通俗地说的话,比如你想找一条最短的路径走到一个盆地的最底部,梯度下降法每次只从你当前所处位置选一个坡度最大的方向走一步,牛顿法在选择方向时,不仅会考虑坡度是否够大,还会考虑你走了一步之后,坡度是否会变得更大。所以,可以说牛顿法比梯度下降法看得更远一点,能更快地走到最底部。

​ 根据wiki上的解释,从几何上说,牛顿法就是用一个二次曲面去拟合你当前所处位置的局部曲面,而梯度下降法是用一个平面去拟合当前的局部曲面,通常情况下,二次曲面的拟合会比平面更好,所以牛顿法选择的下降路径会更符合真实的最优下降路径。

image-20210315215419874

但它有以下缺陷

  1. 牛顿法需要计算矩阵的逆。一个$k\times k$的矩阵的求逆运算的复杂度是$(k^3)$,这将大大增加计算的负担。
  2. 牛顿法在局部二次曲面上会直接求得极小值点,而极小值点的梯度为零。这就使得模型陷入了局部最优,无法通过梯度更新逃离局部最优解。
  3. 牛顿法只适用于Hessian矩阵正定的情况。在高维空间中,这一点不一定成立。例如,在鞍点附近,Hessian矩阵同时具有正负特征值。牛顿法将会得到错误的方向。
  4. 最严重的问题是,牛顿法会被吸引到鞍点。但高维参数空间中,鞍点比局部极值普遍。梯度下降法会沿着梯度的反方向前进,如果梯度反方向没有鞍点,那么它不会主动去找鞍点。所以梯度下降能够逃离鞍点,但牛顿法不能。牛顿法旨在寻找梯度为零的点,它会主动找到鞍点,并锁死在那里(因为鞍点的梯度为零)。

1-3 拟牛顿法

image-20210315215515144

0x02 常用优化方法

2-1 SGD (mini-batch gradient descent)

小批量梯度下降,一次只取一小批;不需要像批梯度下降一样遍历全部,节省了计算;也不像随机梯度下降一样只取一次,降低了方差。

2-2 Momentum 动量

相当于给了一种加速度。

当前时刻的决定,与之前时刻的运动方向相关。在某方向上,若是与之前方向不同,则抑制;若是相同,则更快。

image-20210321183744459

2-3 Adagrad 环境感知

对于频繁更新的参数,降低学习率;对于很少更新的参数,提高学习率

分母具有退火作用,随着迭代,分母越来越大,学习率越来越小

2-4 Adam 融合2-2&2-3

一阶矩

二阶矩

2-5 Adadelta

Adagrad会累加之前所有的梯度平方,而Adadelta只累加固定大小的项,并且也不直接存储这些项,仅仅是近似计算对应的平均值。

2-6 RMSprop

RMSprop可以算作Adadelta的一个特例

RMSprop算是Adagrad的一种发展,和Adadelta的变体,效果趋于二者之间

适合处理非平稳目标 - 对于RNN效果很好

2-7 Nesterov 提前量

根据当前动量多走一步,根据下一步,调整当前步。

​ 举个通俗的例子就是,你在下坡时,如果在下坡快到底,但又未到底时,动量梯度下降会让你冲到坡的对面去。Nesterov梯度下降会预知你的下一步将会时到坡的对面去,所以会提示你提前刹车,避免过度冲到坡的对面去。这包含了一种提前计算下一步的梯度,来指导当前梯度的想法。

2-8 Nadam

2-9 Adamax

0x03 激活函数

最欣赏的解释:

image-20210321180759351

其他的贴上之前的简单整理

image-20210321180925758

image-20210321180939945

Reference

深度学习最全优化方法总结比较(SGD,Adagrad,Adadelta,Adam,Adamax,Nadam)