优化算法重点推荐参考[2]
标准梯度下降法:
标准梯度下降先计算所有样本汇总误差,然后根据总误差来更新权值
缺点:当训练样本比较大时,更新一次权值需要的时间比较长,因为要将所有的样本都训练一次才更新权值。
随机梯度下降法:
随机梯度下降随机抽取一个样本来计算误差,然后更新权值
缺点:更新权值虽然非常快,但可能引入比较多的噪声,因为重新的更新方向可能是错误的方向。
批量梯度下降法:
批量梯度下降算是一种折中的方案,从总样本中选取一个批次(比如一共有10000个样本,随机选取100个样本
作为一个batch),然后计算这个batch的总误差,根据总误差来更新权值。是标准梯度下降法和随机梯度下降法的一个折中方案。
深度学习的优化算法,说白了就是梯度下降。每次的参数更新有两种方式。
第一种,遍历全部数据集算一次损失函数,然后算函数对各个参数的梯度,更新梯度。这种方法每更新一次参数都要把数据集里的所有样本都看一遍,计算量开销大,计算速度慢,不支持在线学习,这称为Batch gradient descent,批梯度下降。
另一种,每看一个数据就算一下损失函数,然后求梯度更新参数,这个称为随机梯度下降,stochastic gradient descent。这个方法速度比较快,但是收敛性能不太好,可能在最优点附近晃来晃去,hit不到最优点。两次参数的更新也有可能互相抵消掉,造成目标函数震荡的比较剧烈。通过减小学习率,噪声会被改善或有所减少。最大的缺点会失去所有向量化带来的加速效果。
为了克服两种方法的缺点,现在一般采用的是一种折中手段,mini-batch gradient decent,小批的梯度下降,这种方法把数据分为若干个批,按批来更新参数,这样,一个批中的一组数据共同决定了本次梯度的方向,下降起来就不容易跑偏,减少了随机性。另一方面因为批的样本数与整个数据集相比小了很多,计算量也不是很大。优点:1:得到大量向量化;2:不需要等待整个训练集被处理完就可以开始运行后续工作。
在训练mini-batch梯度下降法时,会经过很多次迭代,没有每次迭代都是会下的,但是走势应该向下,噪声产生的原因在于,也许X^{1}和Y^{1}是比较容易计算的mini-batch,因此成本低一些,不过也许出于偶然,X^{2}和Y^{2}是比较难运算的mini-batch,或许你有一些残缺标记的样本在里面,这样一来,成本会更高一些,所以才出现这样的摆动。X^{t}和Y^{t}分别代表第t个mini-batch的训练样本和标记。
蓝色:Batch gradient descent
紫色:stochastic gradient descent
绿色:mini-batch gradient decent
对于batchsize选择的指导建议:
如果训练集较少(少于2000)直接使用batch梯度下降法
如果训练集较大,一般选择64,128,256,512,1024(1024较少用),考虑到电脑内存设置和使用方式,如果mini-batch是2的次方,代码会运行快些。
注意:在mini-batch中,X^{t}和Y^{t}要符合CPU/GPU内存取决于你的应用方向以及训练集的大小,如果X^{t}和Y^{t}不符合CPU/GPU内存,你会注意到算法的表现急转直下,变得惨不忍睹。所以你要知道一般人们使用的mini-batch大小。事实上mini-batch大小是一个重要的变量,你需要做一个快速深度,才能找到能够最有效地减小成本函数的那个,我一般会尝试几个不同的值,几个不同的2的次方,然后看能否找到一个让梯度下降优化算法最高效的大小。
参考[2]中以下公司Sw,Sb是Sdw,Sdb,这是有错误。RMSprop同时还允许一个更大的学习率进行学习,加快收敛。
参考: