Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习

快开学了,今天一天都静不下心。不如趁着美好的黄昏来更一篇叭。(写了整整一晚上也是没谁了)

惯例推音乐:今天是一首温柔的迷幻摇滚,我正在摇头晃脑的写
希望听到这首歌的盆友们也能摇头晃脑的看完这篇博客(´^`)
歌手:椅子乐团 The Chairs
歌名:Rollin’ On


❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤❤分割线

1.真实模型的梯度更新规则

在上一篇里我们说到如何用 v v v来代替所有自变量,那么用 v v v表示的模型看懂了,我们就可以把男女主角权重 w w w和偏置 b b b换上场了。还记得上次的式子吗?
在这里插入图片描述
我们将这个式子描述为位置变量 v v v的变化,现在将位置变量 v j v_{j} vj分解为两个分量,即 w k w_{k} wk b l b_{l} bl
因此梯度向量 ▽ C \bigtriangledown C C也就有了相应的分量,即 ∂ C / ∂ w k \partial C/\partial w_{k} C/wk ∂ C / ∂ b l \partial C/\partial b_{l} C/bl
我们用这些分量,模仿 v v v来写 w k w_{k} wk b l b_{l} bl的更新规则。
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第1张图片
梯度下降算法在神经网络中使用的原理,就是利用算法去寻找能使代价函数 C C C取得最小值的权重 w w w和偏置 b b b。利用上面的两条更新规则,我们就可以找到让小球沿曲面滚到最低点的路线。也就会找到 C C C的最小值。
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第2张图片

2.训练中的问题

在上次,我们说到代价函数的一种类型——二次代价函数。
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第3张图片
拆解一下,对于每个样本,我们需要计算代价:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第4张图片
然后再对所有样本的代价求平均:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第5张图片
对求总梯度也有一样的变化:我们需要对每个样本x单独计算梯度值 ▽ C x \bigtriangledown C_{x} Cx,再计算总的梯度,也就是求所有样本梯度的平均值。
在这里插入图片描述
这个过程大概是这样的:
有好多好多样本 x x x——对每个样本都要计算一个代价函数最小值 C x C_{x} Cx——继而需要对每个样本计算 ▽ C x \bigtriangledown C_{x} Cx以更新 C x C_{x} Cx——而计算每个 ▽ C x \bigtriangledown C_{x} Cx会对应计算对所有 w k w_{k} wk b l b_{l} bl的偏导——再用所有样本的 C x C_{x} Cx w k w_{k} wk的偏导求平均带入式来更新 w k w_{k} wk,对 b l b_{l} bl做同理运算。不断更新最终得到最优的 w k w_{k} wk b l b_{l} bl。这个过程在样本数少的时候还好说,当样本数很多时,计算量将会非常大也会消耗很多时间,学习过程就会十分缓慢。

因此在学习中,最常用的是加入了batch和epoch概念的随机梯度下降算法。可以理解为梯度下降算法的升级版。

3.随机梯度下降算法

随机梯度下降算法可以加速学习。其算法思想是从整个训练集中,随机选一小组共 m m m个输入样本来计算 ▽ C x \bigtriangledown C_{x} Cx。随机抽取的 m m m个输入我们按顺序标号,将他们成为一个mini-batch
由于这些输入都是随机抽取的,我们认为其可以近似估计整个数据集的 ▽ C \bigtriangledown C C。也就有这样一个近似:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第6张图片
左边是我们对一个mini-batch计算得到的近似 ▽ C \bigtriangledown C C,中间和右边是真实的 ▽ C \bigtriangledown C C。其实本质上还是一样的,不管用多少个样本求了多少个 ▽ C x \bigtriangledown C_{x} Cx,算 ▽ C \bigtriangledown C C时总是用所有 ▽ C x \bigtriangledown C_{x} Cx的和除以样本个数来求平均。就像我们高中生物要求一个池塘有多少红蛤蟆和绿蛤蟆,不能把几万只全捉来,就随机捉个100只看看红绿的比例。这里也是一样的,我们将 ▽ C \bigtriangledown C C这个平均值求出来看看是不是已经很小了。
去掉中间可以写成:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第7张图片
由此我们就可以用小样本来完成对整体梯度的估计。
权重的偏置的更新就可以表达为:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第8张图片
注意这里每更新一次某个 w w w b b b,就需要求出这个mini-batch中所有 C X j C_{X_{j}} CXj对它的偏导再求和。也就是上面的求和符号,是在当前mini-batch中所有的训练样本上进行的。

我用很傻的方式 列了一下,大概就酱紫:
Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第9张图片
所以说有了mini-batch,计算量是明显减少了啊。
我们计算的目的是决定在某个方向上移动来减少 C C C,因此我们不需要每次计算得那么精确,梯度的只要能告诉我们方向就足够了。

3.epoch迭代期

我们当然不是选了一个mini-batch计算完就完事了。当计算完一个mini-batch,我们会选取另一个随机选定的mini-batch继续训练。直到用完了所有输入,这就叫做完成了一个训练迭代期epoch。一般训练中会设置很多个epoch

4.离线学习与在线学习

这里顺便说一下离线训练和在线训练。

离线训练,就是每次用一堆输入样本 x x x来训练,比如用所有样本来训练,更新每个 w w w,又或者用一小部分,也就是mini-batch来训练。
在线训练,就是每次只用一个样本来训练,可以理解为这个mini-batch的大小为1。

离线训练一般用在我们对大批数据进行学习的过程中。而在线训练就比如说,小绿同学登上某个购物网站,这个网站根据小绿这个人的购物行为对进行用户分析和定向推送,小绿就是本次训练的一个样本。用训练好的模型对他进行分析就是一个在线训练。

Deep Learning|神经网络原理学习笔记(5) :随机梯度下降算法SGD(附手绘图)、离线学习与在线学习_第10张图片

你可能感兴趣的:(神经网络,机器学习,算法,深度学习,人工智能,python)