深度学习中使用的优化算法(BGD,SGD,MBGD,Momentum,NAG,Adagrad,Adadelta,RMSprop,Adam)

深度学习中的优化问题通常指的是:寻找神经网络上的一组参数θ,它能显著地降低代价函数J(θ)。针对此类问题,研究人员提出了多种优化算法,Sebastian Ruder 在《An overview of gradient descent optimizationalgorithms》(https://arxiv.org/pdf/1609.04747.pdf )这篇论文中列出了常用优化算法的比较。主要优化算法有:GD、SGD、Momentum、Adagrad、Adadelta、RMSProp、Adam。

那么为什么要用到优化算法呢?
1、如果是凸优化问题,如果数据量特别大,那么计算梯度非常耗时,因此会选择使用迭代的方法求解,迭代每一步计算量小,且比较容易实现。
2、对于非凸问题,只能通过迭代的方法求解,每次迭代目标函数值不断变小,不断逼近最优解。

因此优化问题的重点是使用何种迭代方法进行迭代,即求迭代公式。通过优化算法可以加快收敛速度(未加入优化的神经网络训练时间比加入优化后时间更短),甚至得到一个更好更小的损失函数值,优化算法能帮你快速高效地训练模型。

1.Mini-Batch 梯度下降
训练集被分割为小的子训练集,这些子训练集被称为mini-batch。
特别地,当每个mini-batch的大小为1时,得到一种新算法,叫做随机梯度下降,此时每次只取一个样本进行训练,效率过于低下,会失去向量化带来的加速。当mini-batch的大小为训练数据本身时,得到batch梯度下降,也就是我们普通的梯度下降算法(此时损失函数关于迭代次数的图像上,应该是一个持续下降的曲线,如果有上升的情况,那就是学习速率过大)。

mini-batch选取数据集代码实现

def random_mini_batches(X, Y, mini_batch_size = 64):
         
    m = X.shape[1]                  
    mini_batches = []

    permutation = list(np.random.permutation(m))
    shuffled_X = X[:, permutation]
    shuffled_Y = Y[:, permutation].reshape((1,m))

    num_complete_minibatches = math.floor(m/mini_batch_size) 
    for k in range(0, num_complete_minibatches):
        mini_batch_X = shuffled_X[:, mini_batch_size*k : mini_batch_size*(k+1)]
        mini_batch_Y = shuffled_Y[:, mini_batch_size*k : mini_batch_size*(k+1)]
        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

    if m % mini_batch_size != 0:
        mini_batch_X = shuffled_X[:, mini_batch_size*num_complete_minibatches : m]
        mini_batch_Y = shuffled_Y[:, mini_batch_size*num_complete_minibatches : m]
        mini_batch = (mini_batch_X, mini_batch_Y)
        mini_batches.append(mini_batch)

    return mini_batches

2.Momentum 动量梯度下降法
由于Mini-batch梯度下降使用数据子集进行参数更新,所以更新的方向跟普通的batch梯度下降有些不同,而是有一些变化(这里是指,不同的数据子集在进行梯度下降时,可能使损失函数值上升,但总趋势是下降的),因此小批量梯度下降的路径将会“震荡”到收敛。使用动量可以减少震荡。
在这里插入图片描述
其中 β 是动量,一般设置为0.9, α 是学习速率。该公式蕴含这一种思想——指数加权平均。这种表达从图形化的角度来看,是把过去的梯度下降考虑在未来平滑当下的梯度变化,从而减小垂直方向上的震荡,同时保持水平方向上的下降速度。
3.RMSprop算法
在这里插入图片描述

4.Adam算法
该算法是前两种算法的结合版本。
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值