改善深层神经网络-第二周-吴恩达 Deep Learning Specialization 学习笔记

后记

优化算法这一部分如果没有实际操作的话非常的抽象,建议结合代码进行理解。作为一个合格的写作者,我首先推荐大家看比我写的更好的材料,比如 这个 这个

样本的小批量 Mini-Batch 计算

尽管通过向量化输入可以使得算法计算的速度大幅提升,但如果输入样本量非常大的情况下依然会拖慢算法迭代的速度。所以聪明的计算机科学家们又想到可以将样本集分成小的批量 mini-batch,例如假设我们有 5,000,000 个样本,那么可以将每 1,000 个样本划分为一组,对于整个样本集采用分组计算的方式来加快计算速度。为了描述方便,mini-batch 计算中每一组数据集用 X{ t } 表示,t 表示整个样本集中的第 t 个小批次。假设测试集中有 m 个样本:

  • 如果每一个批次的样本量定为 m , 则这就是我们之前讨论的遍历整个样本集的计算方式。依然以前面的 5,000,000 个样本的数据集为例,算法计算时会一次性完成 5,000,000 个样本的前向传播计算,再反向传播更新一次权重,再开始下一个周期

  • 如果每一个批次的样本量定为 1 , 则这种计算方法称为随机梯度下降 Stochastic Gradient Descent,实际计算中会采用第一个样本进行前向传播计算,然后反向更新权重;再用更新过的权重去结合第二个样本进行前向传播计算,再反向更新权重...此时如果绘制成本函数和迭代次数的关系图像就会发现成本函数不总是下降的,会随着输入的波动产生一定的随机性,这就是前面这个名字的由来。在实际应用中,随机梯度下降会使得向量化失去意义,并且成本函数最终无法完全收敛,最理想的情况也是在一个范围内震荡,因此一般会选择一个居间的数值作为批量中的样本量

  • mini-batch 的具体计算过程类似于随机梯度下降,只不过每一次计算一个批次的样本,然后利用更新的权重来结合下一个批次进行下一循环的计算。这样既可以充分利用到向量化带来的好处,又可以无需等待全部的样本集计算结束才能看到算法的进展情况

mini-batch 每一个批次的容量选择:

  • 一般当 m ≤ 2000 时,应该考虑一次性批量处理掉全部样本

  • 如果样本量较大,则一般 mini-batch 批次的容量在 64,128,256,512 之间选择,之所以采用 2 的乘方数,是因为考虑到了内存的物理设置和读写特性,因此实际应用中需要结合 GPU 和 CPU 的内存设置来决定选择哪一个数值

指数加权平均及其偏差校正

为了引入后续的动量梯度下降法,这里需要先讲一下指数加权平均 Exponentially weighted moving average,这是对数据的一个平滑处理,其数学表达式为:

  • vt = βvt-1 + (1 - β)θt ,其中 vt 为平均后的当前时间值,vt-1 为平均后的历史时间值,而 θt 为未经处理过的当前值

之所以这样称呼是因为采用这个公式对数据进行处理的时候当前数据 vt 会被展开成历史数据和 β 的指数的加权平均值。 课堂中 Andrew 举了一个不同时间的气温数据平滑的例子,对应不同的 β 值,平滑后的曲线波动状况不同,β 值越高,曲线越平滑。

在应用中可以将 vt 近似的看作对于过去 1 / (1 - β) 时间内的一个平均值,其对应的数学原理是如果令 ε = 1 - β 则 (1 - ε) 1 / ε 近似等于 0.35 也近似等于 1 / e 这个神奇的数字。(这里我还需要进一步理解)

  • β = 0.9 时,可以理解为对于过去10天的平均

  • β = 0.98 时,可以理解为对于过去50天的平均

Exponentially weighted averages

在实际代码实现中,可以先令v = 0,之后随着时间的推移只需要一行代码就可以不断的更新v 的值: v += beta * v + (1 - beta) * theta。与此同时,可以看到如仅简单的令 v = 0,则在初期的一段时间数据会被较大程度的拉低,因此可以在前述计算的基础上进一步令 v = v / (1 - βt) 来校正这个偏差。

动量 Momentum 梯度下降

动量梯度下降算法的基本思想通过指数加权平均来处理得到的梯度值,再用这个梯度值来更新参数。直观的理解动量梯度下降就是我们不仅要使用当前次计算得到的梯度值,也要充分利用之前得到的梯度值对这个数值做一个校正,使得参数的更新过程更加具有参照性。相当于利用历史数据对于当前的梯度之提供一个动量,是的其可以越过局部最小值。

具体来说就是在第 t 次迭代中:

  1. 通过 vdw = βvdw + (1 - β)dw 以及 vdb = βvdb + (1 - β)dbdw, db 做指数加权平均

  2. 参数的更新过程为: w = w - αvdwb = b - αvdb

这个方法实际上又在算法中引入了一个超参数,实际应用中一般令 β = 0.9 ,即加权平均前 10 次迭代得到的梯度值即可,并且一般无需再做偏差校正。

RMSprop 算法

全称是 Root Mean Square Propagation,算法实现过程是在第 t 次迭代中:

  1. 先计算 dw, db,再通过 sdw = β2sdw + (1 - β2)dw2sdb = β2sdb + (1 - β2)db2 来指数加权平均 dw, db 的平方,一般令 β2 = 0.999

  2. 参数的更新过程为:w = w - αdw / sqrt(sdw + ε)b = b - αdb / sqrt(sdb + ε) ,分母中的 ε 是为了防止出现除 0 的情况,一般令 ε = 10-8 即可,并且这个计算过程也解释了 Root mean square 是何意

在实际计算中,在数量上 sdw 会相对较小,而 sdb 则会相对较大,这使得成本函数在迭代过程中减少震荡的同时又不降低收敛的速度。

Adam 优化算法

Adam 这个词是 Adaptive momentum estimation 的缩写,其结合了动量梯度下降和 RMSprop 两种算法,在具体实现中首先初始化 vdw = 0, sdw = 0, vdb = 0, sdb = 0,然后在第 t 次迭代中:

  1. 先用当前 mini-batch 的样本计算 dw, db

  2. 根据动量梯度计算 vdw = β1vdw + (1 - β1)dwvdb = β1vdb + (1 - β1)db

  3. 再根据 RMSprop 计算 sdw = β2sdw + (1 - β2)dw2sdb = β2sdb + (1 - β2)db2

  4. 通常在 Adam 优化算法中要对上述两组数值做偏差校正,即:

    • vdwcorrected = vdw / (1 - β1t), vdbcorrected = vdb / (1 - β1t)
    • sdwcorrected = sdw / (1 - β2t), sdbcorrected = sdb / (1 - β2t)
  5. 参数更新过程为: w = w - αvdwcorrected / sqrt(sdwcorrected + ε)b = b - αvdbcorrected / sqrt(sdbcorrected + ε)

Adam 优化算法中涉及多个超参数,其各自的取值情况如下:

  • α: 永恒重要,是训练中重点调整的对象之一

  • 一般令 β1 = 0.9β2 = 0.999ε = 10-8

一个非常好的介绍 Adam 优化算法的文章在 这里

学习速率衰减 Learning rate decay

训练的初期较大的 α 有利于快速迭代,但随着迭代次数的增加,逐渐减小 α 有利于加速收敛,因此这种有意为之的随时间推移逐渐减小学习率被称为 Learning rate decay。具体实施中一般令 α = α0 / ( 1 + decay rate * epoch number),其中:

  • decay rate, α0 都是超参数

  • 一个 epoch 代表算法完全遍历一次全部数据集,epoch number 代表第几次遍历数据集,这样做的意义就是我们一般完全遍历过一次全部数据集之后再更新学习速率

学习速率衰减还有其他几个可行的方法或计算公式,这里就不一一列举了,可以参考视频中的讲解。

参考阅读

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

推荐阅读更多精彩内容