第六章 优化算法

1.Mini-batch梯度下降法

        机器学习的应用是高度依赖经验的过程,伴随着大量迭代的过程,你需要训练诸多模型,才能找到合适的那一个。优化算法能够帮助你快速训练模型。

        深度学习没有在大数据领域发挥最大的效果,现在很容易去获取大数据集,但在大数据集基础上训练速度很慢,需要使用快速的优化算法,大大提高个人和团队的效率。

图6.1 batch和mini-batch对比      

        之前介绍过,向量化能有效地同时对m个例子进行计算,允许同时去处理整个训练集,而不需要不断for循环很缓慢去计算。即是把训练样本放入一个大矩阵中X=[x^{(1)}x^{(2)}x^{(m)}],把标签也放入一个大矩阵Y=[y^{(1)}y^{(2)}y^{(m)}]。

        向量化能够相对较快的去处理所有的m个样本,但是m很大的话,处理速度仍然缓慢。比如有500万个样本,你需要处理完500万个样本后才能进行下一步梯度下降。

        我们可以先向量化处理部分样本,到下一步梯度下降再向量化处理另外部分样本,这样梯度下降算法收敛速度就会很快。

        把训练集分割成小一点的训练集,这些子集就是mini-batch。假设每个子集大小是1000个样本,则X^{\{1 \}}=[x^{(1)}x^{(2)}x^{(1000)}]为第一个子集,X^{\{2\}}= [x^{(1001)}x^{(1002)}x^{(2000)}]为第二个子集等,维数为(n_x,1000);标签也类似分割,Y^{\{1 \}}=[Y^{(1)}Y^{(2)}Y^{(1000)}],Y^\{{2 \}}=[Y^{(1001)}Y^{(1002)}Y^{(2000)}],维数为(1,1000)。

        统一符号:x^{(i)}表示第i个样本,z^{[l]}表示第l层的z值,X{\{t \}}表示第t个mini-batch。

图6.2 mini-batch完整过程      

        如图6.2,mini-batch完整过程为:

        假设5000万样本,每个mini-batch为1000,总迭代数为50,

        for in range(0,50):

            for j in range(0,5000):    

                 步骤1:是向量化梯度下降

                 步骤2:是计算成本函数

                 步骤3:是反向计算

        其实,mini-batch比batch多了for j in range(0,5000):这一步而已,每一次迭代batch就一次梯度下降,而mini-batch有5000次梯度下降。

2.理解Mini-batch梯度下降法

图6.3 batch和mini-batch成本函数坐标对比

        在batch中,每次梯度下降都对应全部训练集,成本函数值肯定是伴随着迭代逐渐减少,如果出现增大那么算法肯定有问题,比如设置学习率过大。而在mini-batch中,每次梯度下降不是对应全部训练集,每个子集都不一样从而计算出的成本函数结果会不同,即会产生噪声,成本函数值会出现忽高忽低,波动下降,但总体走势是向下的。

图6.4 设置mini-batch大小

        如图6.4,先说两个极端,

        当mini-batch尺寸为m时,那么mini-batch就变成batch,梯度下降线路基本是顺滑往前的(蓝色);

        当mini-batch尺寸为1时,每个样本就是一个子集,这样会有很大噪声(可以减少学习率减少噪声),梯度下降线路就会曲曲折折很难收敛(紫色),这样做就失去了向量化带来的加速,效率过于低下;

        在实践中应该选择不大不小的mini-batch尺寸,这样既可以得到向量化的加速,还不用每次迭代都计算全部训练集。

        关于mini-batch尺寸的选择:

        如果训练集很小(<2000样本),就直接使用batch梯度下降;对于大的训练集则根据计算机内存选择mini-batch尺寸64(2^6)、128(2^7)、256(2^8)、512(2^9)。

3.指数加权平均

        还有几种可以加快训练模型的优化方法,在这之前,先介绍下指数加权平均(统计学中叫指数加权移动平均)。

        加权移动平均就是根据同一个移动段内不同时间的数据对预测值的影响程度,分别给予不同的权数,然后再进行平均移动以预测未来值。

        加权移动平均不像简单移动平均法那样,在计算平均值时对移动期内的数据同等看待,而是根据愈是近期数据对预测值影响愈大这一特点,不同地对待移动期内的各个数据。对近期数据给予较大的权数,对较远的数据给予较小的权数。

图6.5 使用加权平均计算伦敦一年的温度趋势

        指数加权移动平均类似加权移动平均,不过在指数加权移动平均的计算方法中,包括的不是一段数据,而是所有历史数据,对全部历史价格数据分配了逐步减少的权重。每一个数据的权重都对后来的一个数据的权重按照指数形式递减,因此,这种方法就得到了所谓指数加权移动平均的名称。

        如图6.5,设v_0=0,则第一天指数加权平均为v_1=0.9 v_0+0.1θ_1,第二天指数加权平均为v_2=0.9 v_1+0.1θ_2 …第t天指数加权平均为v_t=0.9 v_{t-1}+0.1θ_t,0.9和0.1是人为设定的权值,连线v_0v_1,…,v_t就是伦敦的一年的温度趋势(红线),可通过该趋势预测明年温度变化。

图6.6 指数加权平均

        如图6.5,把上面的权值0.9用β表示,则v_tv_t-1+(1-β)θ_tv_t约等于最近1/(1-β)天的温度指数加权平均值,

        当β=0.9时,v_t约等于最近10天的温度平均值,趋势线为红色;

        当β=0.98时,v_t约等于最近50天的温度平均值,趋势线为绿色,此时的趋势线比较缓和平滑,但会右移,出现一定延迟;

        当β=0.5时,v_t约等于最近2天的温度平均值,趋势线为黄色,此时趋势线波动非常大,算的平均值很可能出现异常值,但该趋势线能更快适应温度变化。

        β是非常重要的参数,往往中间某个值效果更好,比如β=0.9时的红线相对更好平均了温度。

4.理解指数加权平均

图6.7 理解指数加权平均

        如图6.7,设β=0.9,展开指数加权平均v_{100}=0.1θ_{100} + 0.1*0.9θ_{99}+0.1*(0.9)2θ_{98}+…,可以看出权重成指数级递减,v_t约等于(β)^i<1/e即最近1/(1-β)天指数加权平均。

        比如当β=0.9,(0.9)^{10}≈1/e,v_t约等于最近10天1/(1-β)=10 指数加权平均;

        当β=0.98,(0.98)^{50}≈1/e,v_t约等于最近50天1/(1-β)=50 指数加权平均。

图6.8 实施指数加权平均

        如图6.7,在实际应用中,计算指数加权平均步骤为:先设定v_0=0,然后计算v_1v_2v_3,…,只占一行代码节约内存运算快,当然结果没有算数平均那么精准,但是从计算和内存效率来说这是个很好的方法。

5.指数加权平均的偏差修正


图6.9 偏差修正

        为了使指数加权平均计算结果更加精确,我们需要加入偏差修正。如图6.9,实际上当β=0.98时得到的不是绿线,而是紫线,起点偏低。为了得到绿线,应使v_t/(1-β^t),t越小对v_t影响越大,t越大对v_t影响越小,最终得到的是绿线。

6.动量(Momentum)梯度下降

        有一种方法叫动量梯度下降,收敛速度快于一般梯度下降。该方法一句话说明就是:先计算梯度的指数加权平均数,并利用该指数加权平均数更新权重。

图6.10 动量梯度下降

        如图6.10,假设红点是最低点,无论是batch还是mini-batch,下降过程中都是像蓝线一样不断摆动,从而无法使用过大学习率。而动量梯度下降能都很大程度减少摆动,收敛路线为红线,动量梯度下降过程为:

        先计算出dw、db,

        然后计算指数加权平均v_{dw}v_{dw}-(1-β)dw,v_{db}v_{db}-(1-β)db,

        最后w=w-αv_{dw},b=b-αv_{db}

        其他步骤和一般梯度下降一样,梯度下降过程中每一步不再是独立的,而是受前面梯度的制约,

        在纵轴(摆动方向)通过指数加权平均后接近零,

        而在横轴(收敛方向)由于dw、db总是和横轴方向一致,所以通过指数加权平均后依旧很大,相当于给横轴方向增加了动量,从而快速地收敛。

        在实际应用中,可以不使用指数加权平均的偏差修正,因为经过十次左右的指数加权平均后,计算的结果就会恢复正常值。

7.RMSprop

        还有一种方法叫RMSprop,全称是root mean square prop,也可以加速梯度下降。

图6.11 RMSprop梯度下降

        RMSprop梯度下降过程为:

        先计算出dw、db,

        然后计算平方项指数加权平均s_{dw}s_{dw}-(1-β)dw^2,s_{db}s_{db}-(1-β)db^2,平方是为了避免出现负数,s_{dw}只是为了增大或减小α,不改变正负,

        最后w=w-(α/√(s_{dw}+ε))*dw,b=b-(α/√(s_{db}+ε))*db,为防止s_{dw}s_{db}为零,一般会加上值为10^{-8}的ε,

        其他步骤和一般梯度下降一样,从α/√(s_{dw}+ε)、α/√(s_{db}+ε)可以看出,RMSprop梯度下降原理是梯度大则让学习率小,梯度小则让学习率大,从而让收敛过程的摆动减小。

8.Adam优化算法

        Adam优化算法是由Momentum和RMSprop结合而成,适合各种类型神经网络,是圈内普遍认可的优化算法。

图6.12 Adam梯度下降

        Adam梯度下降过程为:

        先初始化v_{dw}=0,s_{dw}=0,v_{db}=0,s_{db}=0,

        接着计算出dw,db,

        接着计算v_{dw}=β_1v_{dw}-(1-β_1)dw,v_{db}=β_1v_{db}-(1-β_1)db,

        s_{dw}=β_2s_{dw}-(1-β_2)dw^2,s_{db}=β_2s_{db}-(1-β_2)db^2,

        接着偏差修正v_{dw}^{correct}=v_{dw}/(1-β_1^t),v_{db}^{correct}=v_{db}/(1-β_1^t),

        s_{dw}^{correct}=s_{dw}/(1-β_2^t),s_{db}^{correct}=s_{db}/(1-β_2^t),

        最后w=w-(α/√(s_{dw}^{correct}+ε))*v_{dw}^{correct},b=b-(α/√(s_{db}^{correct}+ε))*v_{db}^{correct}

        上面过程涉及到的超参数有:

        学习率α,需要不断尝试不同值找到最适合的值;

        Momentum的β1,一般设置为0.9,

        RMSProp的β2,一般设置为0.999,

        ε就无所谓了,给个10^{-8}即可。

9.学习率衰减

        加快学习还有一个办法就是,随着时间慢慢减少学习率,称之为学习率衰减。

图6.13 学习率衰减

         如图6.13,如果学习率一直不变并且一直很大,那么神经网络就会在最低点附近大步跨越很难收敛到最低点,如图中蓝线;正确做法是一开始设置较大学习率,然后慢慢减小,那么久很容易找到最低点,如图中绿线。

图6.14 学习率衰减方法

对于学习率衰减的方法可以使用公式α=(1 / (1 + decay-rate * epoch-num)) * α_0。其中decay-rate是衰减率,epoch-num是迭代代数,α_0是一开始设定的学习率。

图6.15 其他学习率衰减方法

         还有其他学习率衰减方法,比如让学习率呈指数下降的α=0.95^{epoch-num}*α_0;比如某常数除于代数的平方根α= (K /√epoch-num) * α_0,或者某常数除于mini-batch的次数t的平方根α= (K /√t) * α_0;比如学习率离散下降;比如手动调整学习率,训练过程中每隔段时间就手动调整一次学习率。

10.局部最优的问题

图6.16 描述局部最优问题

        如图6.16左图所示,在深度学习初期,总会担心算法会有局部最优问题,算法会在困在某个局部最优,而无法到达全局最优。

        实际上这种情况是不用担心的,在高维空间上比如有20000个参数,那么形成局部最低点的情况是每个参数的图像都是U形状,即可能性是2^{-20000},这显然微乎其微。大多数遇到的是鞍点,即该点有参数是U形状,有的是∩形状。

图6.17 鞍点的问题

        鞍点是不会导致局部最优问题的,当算法走到鞍点时,会朝∩形状方向走。鞍点也不会使学习变慢,因为会有Adam等优化算法在平缓阶段加速前进。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念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

推荐阅读更多精彩内容