批量梯度下降BGD
批量梯度下降法是最原始的形式,它的具体思路是在更新每一参数时都使用所有的样本来进行梯度的更新
-
优点:
由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。当目标函数为凸函数时,批量梯度下降一定能够得到全局最优解。 -
缺点:
有时我们会遇到样本数目 m 很大的训练集合,如果有几十上百万,甚至上亿的训练样本。这意味着我们每执行一次批梯度下降算法,都要对m个样本进行求和。我们的程序也就需要检测这上百万的样本,甚至我们完成值下降的第一步都十分困难。这样会导致,训练过程很慢,花费很长的时间
随机梯度下降SGD
算法中对参数的每次更新不需要再全部遍历一次整个样本,只需要查看一个训练样本进行更新,之后再用下一个样本进行下一次更新
-
优点:
由于不是在全部训练数据上的损失函数,而是在每轮迭代中,随机优化某一条训练数据上的损失函数,这样每一轮参数的更新速度大大加快。 -
缺点:
(1)准确度下降。由于即使在目标函数为强凸函数的情况下,SGD仍旧无法做到线性收敛。
(2)可能会收敛到局部最优,由于单个样本并不能代表全体样本的趋势。
(3)不易于并行实现。
小批量梯度下降
小批量梯度下降,是对批量梯度下降以及随机梯度下降的一个折中办法。其具体思路是:每次迭代使用 batch_size 个样本来对参数进行更新。
三个影响的关键
小批量的数量 ,学习率,梯度
小批量的数量
从(a)可以看出,每次迭代选取的批量样本数越多,下降效果越明显,并且取现越平滑。当每次选取一个样本时(相当于随机梯度下降),损失整体是下降趋势,但局部看会来回震荡。从(b)可以看出,如果按整个数据集迭代的来看损失变化情况,则小批量样本数越小,下降效果越明显。
Note:
-
什么是epoch?
当一个完整的数据集通过了神经网络一次并且返回了一次,这个过程称为一次epoch。 -
为什么要使用多于一个epoch?
在神经网络中传递完整的数据集一次是不够的,而且我们需要将完整的数据集在同样的神经网络中传递多次。 -
其他与epoch有关的参数
Batch Size
batch size将决定我们一次训练的样本数目。
Iteration
Iteration是batch需要完成一个epoch的次数。
举个例子:
CIFAR10 数据集有 50000 张训练图片,10000 张测试图片。现在选择 Batch Size = 256 对模型进行训练。
• 每个 Epoch 要训练的图片数量: 50000
• 训练集具有的 Batch 个数: 50000/265=195+1=196
• 每个 Epoch 需要完成的 Batch 个数: 196
• 每个 Epoch 具有的 Iteration 个数: 196
• 每个 Epoch 中发生模型权重更新的次数:196
• 训练10代后,模型权重更新的次数:196 * 10 = 1960
学习率
一般来说,学习率在一开始要保持大些来保证收敛速度,在收敛到最优点附近时要小些以避免来回振荡.比较简单的学习率调整可以通过学习率衰减(Learning Rate Decay)的方式来实现,也称为学习率退火(Learning Rate Annealing).
主要说一下,RMSprop 算法(自适应调整学习率的方法)
对梯度和累加变量利用指数加权平均
其中𝛼 是初始的学习率,𝜖 是为了保持数值稳定性而设置的非常小的常数,一般取值e−7 到e−10.在算法中,如果某个参数的偏导数累积比较大,其学习率相对较小;相反,如果其偏导数累积较小,其学习率相对较大.
梯度
动量法(MomentumMethod)是用之前积累动量来替代真正的梯度.每次迭代的梯度可以看作加速度.在第𝑡 次迭代时,计算负梯度的“加权移动平均”作为参数的更新方向,
这样,每个参数的实际更新差值取决于最近一段时间内梯度的加权平均值.当某个参数在最近一段时间内的梯度方向不一致时,其真实的参数更新幅度变小;相反,当在最近一段时间内的梯度方向都一致时,其真实的参数更新幅度变大,起到加速作用.一般而言,在迭代初期,梯度方向都比较一致,动量法会起到加速作用,可以更快地到达最优点.在迭代后期,梯度方向会不一致,在收敛值附近振荡,动量法会起到减速作用,增加稳定性.
Adam算法
Adam 算法一方面计算梯度平方g2𝑡 的指数加权平均(和RMSprop 算法类似),另一方面计算梯度g𝑡 的指数加权平均(和动量法类似).