您好,欢迎访问这里是您的网站名称官网!
新闻资讯

服务热线400-123-4567

行业资讯

首页 > 新闻资讯 > 行业资讯

[优化]几种常用的优化器

作者:佚名 发布时间:2024-07-29 16:08:22点击:

首先关于神经网络优化方面有很多优化器,搞得人头晕,而说实话,我本人并不喜欢优化器或复杂的学习率调节这个方向,因为我觉得他们都大同小异都是基于梯度,而所谓的性能不一样都是因为参数空间的形状(基于规则)和初始的选择(这不是摇骰子么),所以很多时候我觉得SGD,Adam就足够了。

但今天因为对Nesterov这个复杂的名字感兴趣,所以特地的看了看几种常用的优化器,这里写一下总结:

  1. 随机梯度下降(SGD, stochastic gradient descent):最常用的方法
  2. 动量(momentum)
  3. Nesterov 动量
  4. AdaGrad
  5. RMSProp
  6. Adam

二阶的比如牛顿法或伪牛顿法就不说了,用的不多。

\	heta \\leftarrow \	heta - \\alpha \
abla_{\	heta}L

这个是最常用的, \\alpha 是学习率, L 是损失函数。

 \	heta \\leftarrow \	heta + v

动量Momentum SGD与SGD的区别是定义了速度 v ,使得更新不光取决于当前梯度,而且保持了惯性(来自 v 的更新)。

v \\leftarrow \\beta v + \\alpha \
abla_{\	heta}L

看到这个公式我笑出了猪叫声嚯嚯嚯,这就是莽一下的原理。

如果说Momentum引入了动量的想法,Nesterov就更像是抖机灵了。

v \\leftarrow \\beta v - \\alpha \
abla_{\	heta}L(x;\	heta + \\beta v)

之前的损失函数是在当前教训计算,Nesterov说,何必呢?我们知道我们当前的动量,那我干脆就算下一步 \	heta + \\beta v 处的动量。这样步子不是迈得更大一点,更快一点吗?

通过过往的梯度 g 累计,自动调节学习率。梯度累计:

r \\leftarrow r + g\\odot g

这里的 \\odot 是逐个元素(element-wise)乘机的意思,比如 g=[1,2,3] 结果就是 [1,4,9] 。而自适应的学习率如下:

\\alpha \\leftarrow \\frac{\\alpha}{\\delta + \\sqrt{r}}

\\delta 为了数值稳定,所以我觉得为啥不限制一下 r 的范围,这样就少了一个参数。新的更新方式和梯度下降一样(除了element-wise)如下:

\	heta \\leftarrow \	heta - \\alpha  \
abla_{\	heta}L

我也好奇过RMS是啥。

但我觉得其实更应该叫 average moving AdaGrad,因为他把累计梯度加权平均了。

r \\leftarrow pr + (1-p)g\\odot g

之后的和AdaGrad一样

最后是 Adam,Adam结合了动量,自适应学习率这两个特性,而这两个特性也叫一阶和二阶矩估计(看到 g,g \\odot g 有没有想到 E(X),E(X^2) )。

动量:

 v \\leftarrow (1-\\alpha) v + \\alpha g

累计平方梯度:

r \\leftarrow (1-p)r + p g\\odot g

更新参数:

\	heta \\leftarrow \	heta - \\epsilon \\frac{v}{\\sqrt{r}}

以上就是一点更新总结。


好久没更新了,我好懒啊。

相关标签: 动量 梯度 更新 优化 me

平台注册入口