深度学习中,在进行损失函数J的优化及参数寻优时,用到的均是梯度下降法。而其他优化算法均是在此基础上进行的一定改进。
- 批梯度下降(BGD):就是没有任何优化的梯度下降,我们每一次循环都是对整个训练集进行学习。用此方法计算量较大,迭代时间长。
- 随机梯度下降(SGD):相比于批量梯度下降而言,随机梯度下降每次从样本中随机抽取一个样本,进行其损失函数并对参数进行更新。此方法计算速度快,但不太稳定,损失函数的起伏较大,且未用到向量化方法。
- mini-batch梯度下降:是对上述两种方法的一个改进,将数据集中的样本数随机的分为t份,其中t介于0到m之间,一般为2的n次方,这样既可以保证每次迭代更新的稳定性,又提高运行速度。
部分代码及图解如下:
#仅做比较,不运行。
#批量梯度下降,又叫梯度下降
X = data_input
Y = labels
parameters = initialize_parameters(layers_dims)
for i in range(0,num_iterations):
#前向传播
A,cache = forward_propagation(X,parameters)
#计算损失
cost = compute_cost(A,Y)
#反向传播
grads = backward_propagation(X,Y,cache)
#更新参数
parameters = update_parameters(parameters,grads)
#随机梯度下降算法:
X = data_input
Y = labels
parameters = initialize_parameters(layers_dims)
for i in (0,num_iterations):
for j in m:
#前向传播
A,cache = forward_propagation(X[:,j],parameters)
#计算成本
cost = compute_cost(A,Y[:,j])
#后向传播
grads = backward_propagation(X[:,j],Y[:,j],cache)
#更新参数
parameters = update_parameters(parameters,grads)
此外,还产生了动量梯度下降法(β越大越好)、RMSprop及adam等优化算法,其中adam优化算法是前两者的一个结合,这三种优化算法均是采用了指数加权平均的方法来更新权重,以此减少震荡,增加水平方向的步长,达到更快收敛的目的。