“居高临下,势如破竹”-参数的动量更新方法

1.使用批训练的原因

“山外有山比山高”-为什叫深度学习一文中,介绍了实际训练深度学习模型时,可能需要将训练样本随机划分成若干批次(Batch),每个批次包含若干样本(Batch Size),利用这些样本来计算梯度更新一次参数.使用完所有的样本更新参数称为一个回合(Epoch).假设一个模型的训练数据包含样本的个数是N,每个批次包含B个样本,那么每个回合需要更新参数的次数,同时也是划分批次的个数为(N/B).下面,具体分析下训练中划分批次的原因,需要先讨论大批次和小批次在训练时间和训练精度上各自的优缺点.

图1 两种Batch Size更新参数的效果

图中左侧和右侧展示的是两种极端的情况,左侧是Batch Size等于N的情况,即每次更新参数取所有的样本计算损失梯度,将这种情况称为Full Batch;右侧是Batch Size等于1的情况,即每次更新参数只取1个样本计算损失梯度.

1.1 训练时间的比较分析

从理论上来看,每次更新参数使用所有的样本计算梯度花费的时间可能远超过每次更新参数使用一个样本花费的时间.但在实际训练的过程中,通常使用GPU进行计算,因此在分析这个问题时,需要考虑使用GPU做并行计算的情况.

图2 不同Batch Size的时间花费

上图展示了对于同样的手写数字辨识MNIST数据集,训练相同的模型时,使用不同的Batch Size花费时间的实验结果.左侧为更新一次参数所花费的时间,右侧为完成一次完整的epoch所花费的时间.横轴均为Batch Size,纵轴均为训练花费的时间.

由左图可知,在使用GPU对数据做并行计算的情况下,Batch Size增大至1000对更新一次参数所花费的时间并没有产生显著的影响;而当Batch Size增大至10000时,更新一次花费的时间才有了显著的变化.由于在GPU并行计算的作用下较大的Batch Size与较小的Batch Size更新一次参数花费的时间无甚差别,但如果选择较小的Batch Size一个Epoch中更新的次数却增加了.所以最终呈现的效果确实较大的Batch Size完成一个Epoch更新所需要时间更少,如上图右侧图所示.

综上,在考虑并行计算处理的情况下,较大的Batch Size花费的时间相对于较小的Batch Size反而更少.

1.2 训练精度的比较分析

如图1所示,由于较大的Batch Size每次更新参数所使用的训练数据较多,猜测模型参数的更新比较稳定,模型的精度比较高;而较小的Batch Size每次更新参数使用的训练数据较少,更新会受到噪音的影响,猜测模型参数的更新不稳定,模型的精度比较低.但从实际训练的效果来看,却呈现出另一种截然不同的结果.

1.2.1 数据集的划分

在比较不同Batch Size对模型训练精度的影响之前,首先来了解一下训练模型时关于训练集(Train Data)、验证集(Validation Data)和测试集(Test Data)的划分.在拿到样本数据集时 ,通常需要将样本分成三份即训练集、验证集和测试集.训练集指用于更新模型参数的数据集,验证集指用于检验超参数模型准确率的数据集,测试集指模型真正没有见到过,用于考察模型泛化能力的数据集.之所以还需要使用测试集,是因为选择超参数时使用了验证集这部分信息,如果检验模型准确性时还使用这部分信息,不能够真实的反映模型的一般能力即泛化能力(Generalization Ability).这好比模拟考和高考试卷肯定不一样是相同的道理.

1.2.2 验证集准确率比较分析

图3 不同Batch Size的验证集准确性

上图展示了不同Batch Size的情况下分别在MNIST、CIFAR-10两种图像识别数据集准确率的变化情况.由图可知,无论是训练集,还是验证集,两种数据集在训练集和验证集的准确率随着Batch Size的增加都呈现出下降的趋势.同时可以观察到,较大的Batch Size会导致训练集准确率非常差.训练集准确率非常差的现象被称为欠拟合(Under-fitting).

图4 Batch Size小验证集准确率较高的原因

由此可知,较小的Batch Size在验证集的准确率反而比较高.上图给出了这种现象一种可能的解释,对于较大的Batch Size,损失函数的表达式可能基本上是固定的.如上图左侧,一种极端的情况取Full Batch,当参数更新遇到“坦途”时,模型就真的没办法更新了.而较小的Batch Size每次的训练更新所使用的样本数据差异很大,损失函数的差别就很大,此刻更新当梯度为0的点时,对于下次更新使用的损失函数来说,梯度未必为0,这就使得参数可以继续更新.

1.2.3 测试集准确率比较分析

图5 不同Batch Size测试集准确率

上图展示了两种Batch Size在不同数据集和神经网络模型的训练集和测试集准确性情况.其中SB为较小的Batch Size取值为256,LB为较大的Batch Size是整个数据集的0.1倍.由图可知,即便是在训练集的准确率相差不大的情况下,较小的Batch Size在测试集上的准确率都明显大于较大Batch Size在测试集上的准确率.图中,训练集准确率较好,测试集准确率较差的现象被称为过拟合(Over-Fitting).

图6 Batch Size小测试集准确率较高的原因

将模型参数更新时遇到的局部极小点分成两种情形,一种是附近较为“宽阔”的极小点(Flat Minima),另外一种是附近较为“狭窄”的极小点(Sharp Minima),如上图所示.对于较小的Batch Size, 由于每次更新的随机性较大,遇到较为“狭窄”的极小点很容易继续更新,往往倾向于在“宽阔”的极小点停止更新.反之,对于较大的Batch Size,往往倾向于在“狭窄”的极小点停止更新.这里假定测试集的损失函数在训练集的基础上进行了平移,尽管在训练集和测试集上损失函数相差较大,但对于“宽阔”的极小点来说测试集的损失和训练集的损失相差不大,损失均很小,而对于“狭窄”的极小点来说,损失函数却变成了另外一种情形,差距非常大.

综上所述,对于较大的Batch Size来说,训练模型的时间较短,但训练的精度较差;对于较小的Batch Size来说,训练的精度较高,但训练的时间较长.因此,需要在两种情况下做一个折中,这就是超参数Batch Size设计的原因,需要选择合适的Batch Size既确保模型训练的时间较短,又确保模型的精度较高.

2.动量梯度下降方法


图7  动量更新方法

“升维的降维打击”-参数训练的驻点分析一文中,讨论了驻点为鞍点的情形以及可以通过计算Hession矩阵的特征向量来继续更新参数,但这种方法不符合现实的情况,因为模型的参数量太大了,计算Hession矩阵花费的时间代价会非常大.接下来寻找一种可以使参数训练“逃离”鞍点的参数更新方法.

上图所示,对于传统的梯度下降方法,可能参数更新到一个“坦途”即第2个黑色球所在的位置就不再更新了.然而兵法有云“居高临下,势如破竹”,这是古人发现了冷兵器时代的作战秘密——动能和惯性,由此引发了进一步的思考,对于传统的梯度下降方法进行改进.考虑现实的世界,假设真的放了一个铁球从山上滚下,铁球真的会遇到坦途就停止吗?答案是不会.

图中红色箭头表示负的梯度,蓝色虚线箭头表示上一次的动量(Movement),蓝色实线箭头表示本次的动量.本次动量等于上一次的动量与负的梯度之和,为参数应该更新的实际值.首先考虑第2个黑色球所在的位置,如果红色箭头足够地小,可能球并不会往下走,但如果加上上次的动量值,会继续走很大一段距离.接着,考虑第三个黑色球所在的位置,此时梯度为0,如果按照之前方法,参数不会更新,但是此时动量是存在的,它无形中会推着球继续往前走.最后,考虑第四个黑色球的位置,此时球走到了接近山顶的位置,按照传统的梯度下降的方法,红色的箭头往左,它会将球往回拉,但如果此时积累的动能足够多,大于此时的梯度值,动能会推着球继续往前走,这样,黑色球很有可能找到更小的局部极小点.

与上图的原理一致,当引入动量更新方法时,参数更新由传统的更新方法转变为式(1),式中,{\theta}表示模型参数,{m}表示动量,{t}表示更新的次数,{\eta}表示学习速率,{g}表示梯度.

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

推荐阅读更多精彩内容