优化算法
Mini-batch 梯度下降(Mini-batch gradient descent)
向量化能够有效地对所有个样本进行计算而无需某个明确的公式。所以我们要把训练样本放大巨大的矩阵当中去。
但如果m很大的话,处理速度仍然缓慢。必须处理整个训练集,然后才能进行一步梯度下降法,然后你需要再重新处理训练样本,才能进行下一步梯度下降法。
所以如果你在处理完整个500万个样本的训练集之前,先让梯度下降法处理一部分,算法速度会更快:
把训练集分割为小一点的子集训练,这些子集被取名为mini-batch,假设每一个子集中只有1000个样本,那么把其中的到取出来,将其称为第一个子训练集,也叫做mini-batch,然后你再取出接下来的1000个样本,从到,然后再取1000个样本,以此类推。
把 x ( 1 ) x^{(1)} x(1)到 x ( 1000 ) x^{(1000)} x(1000)称为 x { 1 } x^{\{1\}} x{
1}, x ( 1001 ) x^{(1001)} x(1001)到 x ( 2000 ) x^{(2000)} x(2000)称为 x { 2 } x^{\{2\}} x{
2},如果训练样本一共有500万个,每个mini-batch都有1000个样本,也就有5000个mini-batch.对y也要进行相同处理。
符号总结:
- 使用了上角小括号表示训练集里的值, x ( i ) x^{(i)} x(i)是第个训练样本。
- 上角中括号来表示神经网络的层数, z [ l ] z^{[l]} z[l]表示神经网络中第l层的值
- 大括号来代表不同的mini-batch, x { t } 和 y { t } x^{\{t\}}和 y^{\{t\}} x{ t}和y{ t}.
x { t } 和 y { t } x^{\{t\}}和 y^{\{t\}} x{ t}和y{ t}的维数:对于有1000个样本的训练集, X 1 X^{ {1}} X1维数应该是 ( n x , 1000 ) (n_{x},1000) (nx,1000), X 2 X^{ {2}} X2的维数应该是 ( n x , 1000 ) (n_{x},1000) (nx,1000),以此类推。因此所有的子集维数都是 ( n x , 1000 ) (n_{x},1000) (nx,1000),而这些( Y t Y^{ { t}} Yt)的维数都是 ( 1 , 1000 ) (1,1000) (1,1000)。
mini-batch梯度下降法的原理: 在训练集上运行mini-batch梯度下降法,因为我们有5000个各有1000个样本的组, 运行for t=1……5000,因为我们有5000个各有1000个样本的组,在for循环里你要做得基本就是对 X t X^{
{t}} Xt和 Y t Y^{
{t}} Yt执行一步梯度下降法。
这是使用mini-batch梯度下降法训练样本的一步,也可被称为进行“一代”(1 epoch)的训练。一代这个词意味着只是一次遍历了训练集。
使用batch梯度下降法,一次遍历训练集只做一个梯度下降,使用mini-batch梯度下降法,一次遍历训练集,能做5000个梯度下降
理解mini-batch梯度下降法(Understanding mini-batch gradient descent)
使用batch梯度下降法时,每次迭代都需要历遍整个训练集,每次迭代成本都会下降,成本函数 J J J会随着每次迭代而减少,如果 J J J在某次迭代中增加了,也许是因为学习率太大。
使用mini-batch梯度下降法,则并不是每次迭代都是下降的,特别是在每次迭代中,如果要作出成本函数 J t J^{ { t}} Jt的图,而 J t J^{ {t}} Jt只和 X t X^{ { t}} Xt, Y t Y^{ {t}} Yt有关,很可能会看到这样的结果:走向朝下,但有更多的噪声。
mini-batch的大小:
两种极端下成本函数的优化情况:
- 如果mini-batch的大小等于训练集的大小 m m m,则就是batch梯度下降法。
- mini-batch大小为1,就随机梯度下降法,每个样本都是独立的mini-batch。
batch梯度下降法从某处开始,相对噪声低些,幅度也大一些。
随机梯度下降法中,每次迭代,只对一个样本进行梯度下降,大部分时候向着全局最小值靠近,有很多噪声,平均来看它最终会靠近最小值。随机梯度下降法永远不会收敛,而是会一直在最小值附近波动,但它并不会在达到最小值并停留在此。
用mini-batch梯度下降法,不会总朝向最小值靠近,但它比随机梯度下降要更持续地靠近最小值的方向,它也不一定在很小的范围内收敛或者波动,如果出现这个问题,可以慢慢减少学习率。
m的选择:
- 如果训练集较小,直接使用batch梯度下降法;样本数目较大的话,一般的mini-batch大小为64到512
- 考虑到电脑内存设置和使用的方式,如果mini-batch大小是2的 n n n次方,代码会运行地快一些
- 3.mini-batch中,要确保 X t X^{ { t}} Xt和 Y t Y^{ {t}} Yt要符合CPU/GPU内存,取决于你的应用方向以及训练集的大小。
指数加权平均数(Exponentially weighted averages)
指数加权平均数的关键方程:
v t = β v t − 1 + ( 1 − β ) θ t {
{v}{t}}=\beta {
{v}{t-1}}+(1-\beta ){
{\theta }_{t}} vt=βvt−1+(1−β)θt
β \beta β在统计学中被称为指数加权移动平均值,我们就简称为指数加权平均数。
β \beta β较大时得到的曲线要平坦一些,原因在于多平均了前面的数据,所以这个曲线,波动更小,更加平坦,缺点是曲线进一步右移。
β \beta β较小时,如0.5,平均的数据太少,所以得到的曲线有更多的噪声,有可能出现异常值,但是这个曲线能够更快适应变化。
β = 0.9 \beta=0.9 β=0.9的时候,得到的结果是红线,如果它更接近于1,比如0.98,结果就是绿线,如果 β \beta β小一点,如果是0.5,结果就是黄线。
进一步地分析,来理解如何计算出每日温度的平均值。
同样的公式, v t = β v t − 1 + ( 1 − β ) θ t { {v}{t}}=\beta { {v}{t-1}}+(1-\beta ){ {\theta }_{t}} vt=βvt−1+(1−β)θt
使 β = 0.9 \beta=0.9 β=0.9,写下相应的几个公式,所以在执行的时候, t t t从0到1到2到3, t t t的值在不断增加,为了更好地分析,我写的时候使得 t t t的值不断减小,然后继续往下写。
v 100 = 0.1 θ 100 + 0.9 v 99 v_{100}= 0.1\theta_{100} + 0.9v_{99} v100=