Java教程

深度学习各优化算法

本文主要是介绍深度学习各优化算法,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

深度学习中,在进行损失函数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优化算法是前两者的一个结合,这三种优化算法均是采用了指数加权平均的方法来更新权重,以此减少震荡,增加水平方向的步长,达到更快收敛的目的。

这篇关于深度学习各优化算法的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!