在BP神经网络的范畴中,一般说到优化算法,指的就是梯度下降。梯度下降的公式可以表示如下,其中J(θn)表示要优化的损失函数,η表示学习率:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
至于梯度下降公式的原理,之前有文章介绍过,传送门:神经网络权重更新的原理和方法——softmax前世今生系列(7)
因此假设损失函数如下:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
则有:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
此时假设损失函数的初始值为5,学习率为0.3,则梯度下降的优化算法过程为:
? ? ? ? ? ?
从图中可以看出,经过4轮迭代,损失函数从5下降到0.128,这也说明拟合的模型与真实情况的差距越来越小。
?
随机梯度下降优化算法的本质和梯度下降是一样的,但是当训练数据量很大时,如果对每一条数据在训练时都进行运算,会导致训练速度相当慢。
比如我们有10000条数据,每一个训练的epochs,都要对这10000调数据全部进行一次梯度下降算法。
所以我们在训练模型的过程中,从一批训练数据中随机抽取某一条数据对损失函数进行优化,来代表全局数据,这样训练的速度就大大加快了。
比如我们有10000条数据,每一个训练的epochs,只选取1条数据进行梯度下降算法。
随机梯度下降的缺点也是很明显的,一条数据有时并不能代表一批数据的特征,这往往会导致网络无法达到全局最优,甚至不能达到局部最优。
?
根绝上述两种情况的,选取出一种折中方案,就是分批梯度下降。
首先将大量数据分成小批次,用每个小批次的数据对损失函数进行优化,这样不会比随机梯度慢很多,同时计算量比全局数据的梯度下降又要快。
比如我们有10000条数据,将其分成100个batch,每个batch100条数据,每一个训练的epochs中,只用对这一个batch的100条数据使用梯度下降算法。但是整个训练方法要循环100次,将100batch都训练一遍。
?
?