Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习
快开学了,今天一天都静不下心。不如趁着美好的黄昏来更一篇叭。(写了整整一晚上也是没谁了)
惯例推音乐:今天是一首温柔的迷幻摇滚,我正在摇头晃脑的写
希望听到这首歌的盆友们也能摇头晃脑的看完这篇博客(´^`)
歌手:椅子乐团 The Chairs
歌名:Rollin’ On
❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线
1.真实模型的梯度更新规则
在上一篇里我们说到如何用来代替所有自变量,那么用表示的模型看懂了,我们就可以把男女主角权重和偏置换上场了。还记得上次的式子吗?
我们将这个式子描述为位置变量的变化,现在将位置变量分解为两个分量,即和。
因此梯度向量也就有了相应的分量,即和。
我们用这些分量,模仿来写和的更新规则。
梯度下降算法在神经网络中使用的原理,就是利用算法去寻找能使代价函数取得最小值的权重和偏置。利用上面的两条更新规则,我们就可以找到让小球沿曲面滚到最低点的路线。也就会找到的最小值。
2.训练中的问题
在上次,我们说到代价函数的一种类型——二次代价函数。
拆解一下,对于每个样本,我们需要计算代价:
然后再对所有样本的代价求平均:
对求总梯度也有一样的变化:我们需要对每个样本x单独计算梯度值,再计算总的梯度,也就是求所有样本梯度的平均值。
这个过程大概是这样的:
有好多好多样本——对每个样本都要计算一个代价函数最小值——继而需要对每个样本计算以更新——而计算每个 会对应计算对所有和的偏导——再用所有样本的对的偏导求平均带入式来更新,对做同理运算。不断更新最终得到最优的和。这个过程在样本数少的时候还好说,当样本数很多时,计算量将会非常大也会消耗很多时间,学习过程就会十分缓慢。
因此在学习中,最常用的是加入了batch和epoch概念的随机梯度下降算法。可以理解为梯度下降算法的升级版。
3.随机梯度下降算法
随机梯度下降算法可以加速学习。其算法思想是从整个训练集中,随机选一小组共个输入样本来计算。随机抽取的个输入我们按顺序标号,将他们成为一个mini-batch。
由于这些输入都是随机抽取的,我们认为其可以近似估计整个数据集的。也就有这样一个近似:
左边是我们对一个mini-batch计算得到的近似,中间和右边是真实的。其实本质上还是一样的,不管用多少个样本求了多少个,算时总是用所有的和除以样本个数来求平均。就像我们高中生物要求一个池塘有多少红蛤蟆和绿蛤蟆,不能把几万只全捉来,就随机捉个100只看看红绿的比例。这里也是一样的,我们将这个平均值求出来看看是不是已经很小了。
去掉中间可以写成:
由此我们就可以用小样本来完成对整体梯度的估计。
权重的偏置的更新就可以表达为:
注意这里每更新一次某个或,就需要求出这个mini-batch中所有对它的偏导再求和。也就是上面的求和符号,是在当前mini-batch中所有的训练样本上进行的。
我用很傻的方式裂 列了一下,大概就酱紫:
所以说有了mini-batch,计算量是明显减少了啊。
我们计算的目的是决定在某个方向上移动来减少,因此我们不需要每次计算得那么精确,梯度的只要能告诉我们方向就足够了。
3.epoch迭代期
我们当然不是选了一个mini-batch计算完就完事了。当计算完一个mini-batch,我们会选取另一个随机选定的mini-batch继续训练。直到用完了所有输入,这就叫做完成了一个训练迭代期epoch。一般训练中会设置很多个epoch。
4.离线学习与在线学习
这里顺便说一下离线训练和在线训练。
离线训练,就是每次用一堆输入样本来训练,比如用所有样本来训练,更新每个,又或者用一小部分,也就是mini-batch来训练。
在线训练,就是每次只用一个样本来训练,可以理解为这个mini-batch的大小为1。
离线训练一般用在我们对大批数据进行学习的过程中。而在线训练就比如说,小绿同学登上某个购物网站,这个网站根据小绿这个人的购物行为对进行用户分析和定向推送,小绿就是本次训练的一个样本。用训练好的模型对他进行分析就是一个在线训练。