第二周:优化算法(Optimization algorithm)
2.1 Mini-batch梯度下降(Mini-batch gradient descent)
利用一个巨大的数据集来训练神经网络时,训练速度很慢。
batch 梯度下降法指的是我们之前讲过的梯度下降算法,就是同时处理整个训练集。
mini-batch梯度下降法则是把训练集分割成小一点的子集训练,这些子集被取名为mini-batch。
引入新的符号:
回顾一下符号:
t指的是第t个mini-batch。
使用 batch 梯度下降法,一次遍历训练集(也叫一代,1 epoch)只能让你做一个梯度下降,使用 mini-batch 梯度下降法,一次遍历训练集,能让你做 5000 个梯度下降。当然正常来说你想要多次遍历训
练集,还需要为另一个 while 循环设置另一个 for 循环。所以你可以一直处理遍历训练集,直到最后你能收敛到一个合适的精度。
2.2 理解mini-batch梯度下降
使用 batch 梯度下降法时,每次迭代你都需要历遍整个训练集,可以预期每次迭代成本
都会下降,所以如果成本函数𝐽是迭代次数的一个函数,它应该会随着每次迭代而减少,如
果𝐽在某次迭代中增加了,那肯定出了问题,也许你的学习率太大。
使用 mini-batch 梯度下降法时,则并不是每次迭代都是下降的,但总的趋势是下降的。
噪声产生的原因:每次迭代下你都在训练不同的样本集或者说训练不同的 mini-batch,也许上一个mini-batch中的样本是比较容易计算的,所以它的损失函数较小,下一个mini-batch则较难计算(可能存在一些噪音数据),它的损失函数较大。就会出现右侧这种图像。
batch梯度下降法缺点:此时mini-batch = 𝑚,每个迭代需要处理大量训练样本,该算法的主要弊端在于特别是在训练样本数量巨大的时候,单次迭代耗时太长。
如果训练样本不大,batch 梯度下降法运行地很好。
随机梯度下降法(SGD)缺点:此时mini-batch = 1,你会失去所有向量化带给你的加速,因为一次性只处理了一个训练样本,这样效率过于低下。
所以实践中最好选择不大不小的 mini-batch 尺寸。
mini-batch大小选择原则:
-训练集样本数较少(<2000),直接使用batch梯度下降法;
-样本数较大时,考虑电脑的内存设置和使用方式,设置为2的n次方,一般为64到512。
-要确保设置的符合CPU/GPU内存,取决于你的应用方向以及训练集的大小。
2.3 指数加权平均数
在统计学中被称为指数加权移动平均值。
vt是第t日温度的指数加权平均值,theta_t是第t日的实际温度值,beta是一个参数,通过调整它可以获得不同的曲线,0-1之间的某个值效果最好。
其实就是给加权平均值和当日实际温度值不同的权重,当beta较大时,加权平均值的权重较大,曲线就会向右移动,并且曲线的振荡会减小,如下面的绿线。
2.4 理解指数加权平均数
其实有点像卷积的意思。
第100天的指数加权平均值:
每日温度就好像输入,0.1,0.10.9,0.10.9^2,……就好像卷积核。
数日的温度数值:
指数加权平均数公式的好处之一在于,它占用极少内存,电脑内存中只占用一行数字。
使用mini-batch梯度下降训练的时间(一次训练完整个训练集)比使用梯度下降训练的时间要快,这句话是错误的,只能说mini-batch梯度下降(在单个mini-batch上计算)的一次迭代快于梯度下降的迭代。
Adam算法将momentum和RMSprop算法结合起来。
Adam算法对batch梯度下降和mini-batch梯度下降都适用。