优化算法

优化算法框架

优化算法经历了SGD->SGDM->NAG->AdaGrad->AdaDelta->Adam->Nadam的发展。

定义框架:待优化参数\omega ,目标函数f(\omega ),初始学习率\alpha

开始迭代每个epoch t

1. 计算目标函数关于当前参数的梯度:g_{t}=\nabla f(w_{t})

2. 根据历史梯度计算一阶动量和二阶动量:m_{t}=\phi (g_{1}, g_{2},...,g_{t}); V_{t}=\psi (g_{1}, g_{2},...,g_{t})

3. 计算当前时刻的下降梯度:\eta _{t}=\alpha \cdot m_{t}/\sqrt{V_{t}}

4. 根据下降梯度进行更新:\omega _{t+1}=\omega _{t}-\eta _{t}

步骤3、4对各个算法都是一致的,差别体现在1、2上。

SGD

SGD没有动量的概念。m_{t}=g_{t}, V_{t}=I^2

代入步骤3、4,得到\eta _{t}=\alpha\cdot  g_{t}, \omega _{t+1}=\omega _{t}-\alpha\cdot  g_{t}

SGD with Momentum

SGDM全称是SGD with momentum,在SGD基础上引入了一阶动量。m_{t}=\beta _{1}m_{t-1}+(1-\beta _{1})g_{t}, V_{t}=I^2

代入步骤3、4,得到\omega _{t+1}=\omega _{t}-\alpha \cdot m_{t}

一阶动量是各个时刻梯度方向的指数移动平均值,约等于最近1/(1-\beta _{1})个时刻的梯度向量和的平均值。

SGD是蓝线,每次迭代更新取决于当前batch的下降梯度,震荡严重,下降速度慢。

如果使用较大的学习率,如紫色线,结果可能会偏离函数范围,停留在一个局部最优点。

SGDM的参数\beta _{1} 的经验值为0.9,这就意味着,t时刻的下降方向主要是此前累积的下降方向,并略微偏向当前时刻的下降方向。

加上momentum的 SGD 算法在更新模型参数时,对于当前梯度方向与上一次梯度方向相同的参数,则会加大更新力度;而对于当前梯度方向与上一次梯度方向不同的参数,则会进行消减,即在当前梯度方向的更新减慢了。因此,相较于 SGD,SGDM可以收敛得更快,并且减少震荡。红线,纵轴方向摆动变小了,横轴方向运动更快。

SGD with Nesterov Acceleration

NAG全称Nesterov Accelerated Gradient,改进点在于步骤1。

SGD 还有一个问题是困在局部最优的沟壑里面震荡。

此时与其看当前梯度方向,不如先看看如果跟着累积动量走了一步,那个时候再怎么走。

g_{t}=\nabla f(w_{t} - \alpha \cdot m_{t-1}/\sqrt{V_{t-1}} )

然后再使用g_{t}与历史累积动量相结合,计算步骤2的累积动量。

步骤3、4,\omega _{t+1}=\omega _{t}-\alpha \cdot m_{t}/\sqrt{V_{t}}

AdaGrad

此前都没有用到二阶动量,SGD及其变种以同样的学习率更新每个参数。

对于经常更新的参数,我们已经积累了大量关于它的知识,不希望被单个样本影响太大,希望学习速率慢一些;对于偶尔更新的参数,我们了解的信息太少,希望能从每个偶然出现的样本身上多学一些,即学习速率大一些。比如深度神经网络中大规模的embedding参数,并不是总会用得到。

二阶动量的出现,才是“自适应学习率”优化算法。它是所有时刻的梯度值的平方和。

V_{t} = \sum_{\tau =1}^{t} g_{\tau }^{2}

步骤3中的下降梯度\eta _{t}=\alpha \cdot m_{t}/\sqrt{V_{t}} ,可以看出学习率由\alpha 变成了\alpha/\sqrt{V_{t}}

参数更新越频繁(每个时刻都有梯度),二阶动量越大,学习率就越小。

 一般为了避免分母为0,会在分母上加一个小的平滑项,\sqrt{V_{t}+\varepsilon } 是恒大于0的。

存在问题:\sqrt{V_{t}} 是单调递增的,会使得学习率单调递减至0,可能会使得训练过程提前结束,即便后续还有数据也无法学到必要的知识。

AdaDelta / RMSProp

由于AdaGrad单调递减的学习率变化过于激进,考虑不累积全部历史梯度,而只关注过去一段时间窗口的下降梯度。这也就是AdaDelta名称中Delta的来历。相对 Adagrad 梯度下降得较慢,避免了二阶动量持续累积,导致训练过程提前结束的问题。

RMSprop 是 AdaDelta 的一个特例,使用指数移动平均来计算二阶累积动量。

V_{t}=\beta _{2}\ast V_{t-1}+(1-\beta _{2})g_{t}^{2}

步骤2m_{t}=g_{t}

步骤3、4,\omega _{t+1}=\omega _{t}-\alpha \cdot g_{t}/\sqrt{V_{t}+\varepsilon }

Adam

使用一阶动量和二阶动量,就是Adam——Adaptive + Momentum。

一阶动量:m_{t}=\beta _{1}m_{t-1}+(1-\beta _{1})g_{t}

二阶动量:V_{t}=\beta _{2}\ast V_{t-1}+(1-\beta _{2})g_{t}^{2}

步骤3、4,\omega _{t+1}=\omega _{t}-\alpha \cdot m_{t}/\sqrt{V_{t}+\varepsilon}

参数的经验值是\beta _{1}=0.9,\beta _{2}=0.999

Nadam

Nadam = Nesterov + Adam,加上NAG的步骤1



指数移动平均

v_{t}=\beta  v_{t-1}+(1-\beta)\theta _{t}

\beta =0.9时,

v_{100}=0.9v_{99}+0.1\theta _{100}=0.1\theta _{100}+0.9(0.1\theta _{99}+0.9v_{98})

=0.1\theta _{100}+0.1*0.9\theta _{99}+0.1*(0.9)^2\theta _{98}+...

因为0.9^{10}\approx 0.35\approx\frac{1}{e} \theta _{90}的权重下降到1/3,因此指数移动平均约等于最近1/(1-\beta )个历史数据的平均值(越近的历史数据,权重越大,每次迭代以\beta 系数衰减)。

红色线 \beta =0.9,平均了10个历史数据。

绿色线 \beta =0.98,曲线更加平缓,因为平均了50个历史数据。

偏差修正

原始使用v_{0}=0,初期估计会有问题,现使用v_{t}/(1-\beta ^{t})修正。

\beta =0.98时,

原始:v_{0}=0

 v_{1}=0.98v_{0}+0.02\theta _{1}=0.02\theta _{1}

v_{2}=0.98v_{1}+0.02\theta _{2}=0.0196\theta _{1}+0.02\theta _{2}

修正:

 v_{1}=\frac{0.02\theta _{1}}{1-0.98} =\frac{0.02\theta _{1}}{0.02}

v_{2}=\frac{0.0196\theta _{1}+0.02\theta _{2}}{1-0.98^2} =\frac{0.0196\theta _{1}+0.02\theta _{2}}{0.0396}

分母1-\beta ^{t}在初期较小,扩大v_{t},经过多次迭代,分母接近1,v_{t}基本不变

紫色线是存在偏差,绿色线是修正偏差。


参考:

一个框架看懂优化算法之异同 SGD/AdaGrad/Adam

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,204评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,091评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,548评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,657评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,689评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,554评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,302评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,216评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,661评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,851评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,977评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,697评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,306评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,898评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,019评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,138评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,927评论 2 355