优化算法

前言

机器学习的应用是一个高度依赖经验的过程,为了达到最优的计算结果,往往需要多次迭代,利用各种优化算法能够大大加快这个迭代过程,节省大大量的时间和资源。本篇文章将介绍有关机器学习和深度学习的一些优化算法

Mini-batch 梯度下降算法

Mini-batch 梯度下降算法的介绍

对于m个训练样本,可以通过向量化的实现方法,降低训练所花费的时间。如果训练样本很大,假设m = 5000000,那么即使采用使用向量化的实现方法,也会花费大量的时间。对于大规模的数据,可以采用mini-batch的训练方法。这种方法是通过将大规模样本划分为小样本,再进行训练。例如,可以将500 0000个训练样本按照每1000个一组划分,这些被划分为小样本的训练集称之为训练子集,即也就是mini-batch

对此,每一个训练子集,都可以用\{X^{ \{1\}},X^{\{2\}}…X^{ \{t\}} \}表示,t表示训练子集mini-batch的数量。在整个训练过程中,将会通过向量化同时实现每个训练子集的样本,再通过t次循环完成整个样本的训练。

使用常规梯度下降算法,遍历一次样本,只能实现一次梯度下降,但是使用mini-batch,完成所有样本训练,就可以实现t次梯度下降。通常情况下,可以通过设置外层循环,实现样本的多次训练,直至算法收敛至最优结果。

Mini-batch梯度下降算法的理解

使用batch梯度下降算法时,损失函数的损失值会随着迭代次数的增加逐渐下降。而在mini-batch梯度下降算法中,损失函数的在整体样本上还是呈现下降趋势,但是在每次迭代中会出现更多的噪声,出现噪声的原因是因为某些样本是比较容易计算的mini-batch,而另一些样本的mini-batch更难计算。如下图所示:


mini-batch的大小对算法的执行结果有着重要的影响,对此,有如下分析:

  • mini-batch=1,这是一种极端情况,这种情况下的梯度下降算法称之为随机梯度下降算法,每次迭代只训练一个样本,尽管这种方法会产生很多的噪声,但是还是能够通过多次迭代,损失函数值最终还是会靠近最小值。随机梯度下降算法永远不会达到最小值,而是会一直
    在最小值附近波动。

  • mini-batch = m,这是另一种极端情况,也就是相当于执行batch梯度下降算法,相对噪声更低,幅度也更大。

  • 1<mini-batch<m,实际上,这种情况下mini-batch的选择一般在(64,512)之间,考虑到计算机的内存,一般都会将其设置为2n次方。

指数加权平均

指数加权平均的介绍

某一地区,一年中的温度数据散点图如下所示,需要计算温度的趋势,也就是局部平均值或者移动平均值,可以如下公式所示:

\theta_i表示当日的温度,移动平均值用v_i表示,则有:

v_0 = 0
v_1 = 0.9v_0 + 0.1 \theta_1
v_2 = 0.9v_1+ 0.1 \theta_2

v_i = 0.9v_{i-1} + 0.1 \theta_i

即也就是,每一天都根据当日的温度和前一天的加权平均值获得一个新的加权平均值。绘出v_i的值,如下所示:

根据以上推导,可以获得一个更加通用的公式:
v_t = \beta v_{t-1} + (1-\beta) \theta_t \tag{1}

在计算时,可视v_t \approx \frac{1}{1-\beta}天的每日温度。

假设\beta = 0.98,这是计算所得为\frac{1}{1-0.98} = 50天的平均温度。绘制图形效果如下图绿线所示,50天的温度平均值导致曲线更加平滑并且会向右移动。

假设设置\beta = 0.5,那么会计算出两天的温度平均值,平均的天数太少,会出现更多的噪声,可能会出现异常值,但是这个曲线会更快速的适应温度的变化。如下图黄线所示

通过设置参数\beta可以得到不同的效果。

对指数加权平均的理解

如公式(1)所示,指数加权平均实际上就是一个递归的过程,写出这个递归的详细计算可以如下所示:

v_t = (1-\beta) \theta_t + \beta(v_t -1) \\ = (1-\beta) \theta_t + \beta (1-\beta)\theta_{t-1} + \beta ^2(v_{t-2}) \\ = (1-\beta) \theta_t + \beta (1-\beta)\theta_{t-1} +\beta^2(1-\beta)\theta_{t-2} +\beta^3v_{t-3} + ……

可以将第t日的指数衰减值\beta^{t}(1-\beta)作为一个参数,可以得到一个随天数变化的指数衰减函数,第t日的温度可以看成当日温度加上第t日温度乘以当日对应的指数衰减值构成。

一般情况下,需要利用指数衰减函数将温度衰减至原来的\frac{1}{e},所以参数\beta的取值决定着应该取多少天的平均值,即也就是令\beta^t = \frac{1}{e},则有以下推导:
根据数学极限知识,有\lim_{\epsilon->0} (1-\epsilon)^{\frac{1}{\epsilon}} = \frac{1}{e}
所以,令\beta = 1-\epsilont = \frac{1}{\epsilon}
平均的天数就是 \frac{1}{1-\beta}

指数加权平均的偏差修正

计算第一天的温度时,通常会设置v_0 = 0,这样做有可能导致第一天和第二天的温度的估计值太小,为了解决这一问题,提出了偏差修正的解决方案。

具体做法如下所示:

不用v_t,而是用\frac{v_t}{1-\beta^{t}},值得注意的是,随着t的增加,\beta^t将会变得很小,偏差修正几乎会失去作用。

动量梯度下降法

动量梯度下降法(Gradient descend with Momentum)是一种比标准梯度下降法运行速度更快的算法,其基本思想就是利用指数加权平均来更新梯度。

假设要优化损失函数,如下图所示,红点代表最小值,蓝点表示起点,使用标准的梯度下降法,其计算过程在纵轴上是一个衰减震荡的过程,我们希望,在梯度下降的计算过程中,尽可能的在纵轴上消除这些震荡,在横轴上更新速度尽可能快。

参数的更新可以采用指数加权平均加快训练速度,具体实现如下所示:
v_{dw} = \beta v_{dw} + (1-\beta)dW \tag{2}
v_{db} = \beta v_{db} +(1- \beta)db \tag{3}
W = W -\alpha v_{dw} \tag{4}
b = b -\alpha v_{db} \tag{5}

动量梯度下降法需要调整两个参数,一个是学习率\alpha,另一个是j加权平均参数\beta,一般情况下取\beta = 0.9,具有较强的鲁棒性。

动量梯度下降法与标准梯度下降法相比,每次的梯度更新不再是一个独立的过程,当梯度更新的方向与上次梯度更新的方向相同时,会产生一个正向加速,当梯度更新的方向与上次梯度的更新量相反时,会产生一个反向减速的效果,而不是立刻改变方向。所以,动量梯度下降法,既消除了震荡,又加快了更新速度。

RMSprop

在如上所述的梯度下降过程中,希望尽可能的减小纵轴上的震荡,加快横轴的更新速度,假设以参数b代表纵轴,参数W代表横轴,则RMSprop算法的梯度更新将会如下所示:

S_{dw} = \beta S_{dw} + (1-\beta){d^2W} \tag{6}
S_{db} = \beta S_{db} + (1-\beta){d^2b} \tag{7}
W := W- \alpha \frac{dW}{\sqrt{S_{dw}}} \tag{8}
b := b- \alpha \frac{db}{\sqrt{S_{db}}} \tag{9}

分析以上算法,如果S_{dW}较小,通过公式(8)的计算,参数W将会变大,而S_{db}如果较小,通过公式(9)的计算,参数b将会变小。RMSprop算法,可以允许采用一个更大学习率\alpha来加快参数的更新速度。

在实际的算法应用中,为了避免参数更新中的分母为0,通常会将参数的更新公式中的分母项变成\frac{dW}{\sqrt{S_{dW}}+\epsilon}\frac{db}{\sqrt{S_{db}}+\epsilon},通常取\epsilon = 10^{-8}

Adam优化算法

Adam优化算法就是将动量梯度下降法和RMSprop结合在一起的算法。该算法的具体实现步骤如下所示:

  • 初始化,令S_{db} = 0,S_{dw} = 0,v_{dw} = 0,v_{db} = 0

  • 在第t次迭代时,计算微分,即用当前的mini-batch计算微分dW,db,再用动量指数加权平均,如下公式所示:
    v_{dw} = \beta_1 v_{dw} + (1-\beta_1)v_{dw} \tag{10}
    v_{db} = \beta_1 v_{db} + (1-\beta_1) v_{db} \tag{11}

  • 用RMSprop算法进行更新,如下公式所示:
    S_{dw} = \beta_2 S_{dw} + (1-\beta_2){d^2W} \tag{12}
    S_{db} = \beta_2 S_{db} + (1-\beta_2){d^2b} \tag{13}

  • 计算偏差修正,如下公式所示;
    v^{corrected}_{dW} = \frac{v_{dW}}{1-\beta_1^t} \tag{14}
    v^{corrected}_{db} = \frac{v_{db}}{1-\beta_1^t} \tag{15}

S^{corrected}_{dW} = \frac{S_{dW}}{1-\beta_2^t} \tag{16}
S^{corrected}_{db} = \frac{S_{db}}{1-\beta_2^t} \tag{17}

  • 最后,进行参数更新,如下公式所示:
    W := W- \alpha\frac{v^{corrected}_{dW}}{\sqrt{S^{corrected}_{dW}}+\epsilon} \tag{18}
    b := b- \alpha\frac{v^{corrected}_{db}}{\sqrt{S^{corrected}_{db}}+\epsilon} \tag{19}

一般情况下,参数\beta_1 = 0.9,而取参数\beta_2 = 0.99

学习率衰减

学习率一直保持不变的情况下,随着梯度下降过程的进行,损失函数并不会达到最小值,而是一直在最小值附近震荡。为此,算法刚开始运行时,可以将学习率设置较大,以加快运行速度,算法逐渐收敛时,可以将学习率逐渐减小,以获得损失函数的最小值,具体而言,学习率的衰减可以用以下公式表示:
\alpha = \frac{1}{1+decayrate* epoch_{num}} *\alpha_0 \tag{20}

decayrate表示学习率的衰减比例
epoch_{num} 表示迭代次数
\alpha_0表示初始学习率

除了如公式(20)表示的学习率衰减方式外,还有其他的衰减方式。如下所示:

  • 指数衰减, \alpha = 0.95^{epoch_{num}}*\alpha_0
  • \alpha = \frac{k}{\sqrt{epoch_{num}}} 或者\alpha = \frac{k}{t},其中t代表mini-bitch数量。
  • 离散衰减,随着算法运行的时间,每次将其减少为原来的一半。

局部最优问题

所谓局部最优问题就是,人们担心深度学习的优化算法被困在局部最优点,而不能达到全局最优点,如下图所示:

实际上,高维的神经网络中,梯度为0的点并不是局部最优点,而是鞍点,如下图所示,在鞍点上,如果梯度为0,那么在一些方向上它可能是凸函数,而另一些点上则是凹函数。假设一个20000的空间,如果要想达到局部最优,需要所有的方向全是凹函数,其概率为\frac{1}{20000},所以,高维空间中,遇到最多的是鞍点。

局部最优并不是深度学习的问题,而梯度为0的平稳段会耗费大量的时间,即也就是需要花费多次梯度,才能走出平稳段,如动量梯度下降法,RMSprop梯度下降方法和Adam优化算法neng

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

推荐阅读更多精彩内容