斯坦福cs231n学习笔记(11)------神经网络训练细节(梯度下降算法大总结/SGD/Momentum/AdaGrad/RMSProp/Adam/牛顿法)

本文深入探讨了神经网络训练中的梯度下降算法,包括批量梯度下降、随机梯度下降和小批量梯度下降的原理及优缺点。此外,还介绍了优化算法如Momentum、Adagrad、RMSProp和Adam,以及二阶优化方法牛顿法。这些方法在解决梯度下降的挑战,如学习速率选择、局部极值和收敛速度等方面起着关键作用。
摘要由CSDN通过智能技术生成

神经网络训练细节系列笔记:

通过学习,我们知道,因为训练神经网络有个过程:
<1>Sample 获得一批数据;
<2>Forward 通过计算图前向传播,获得loss;
<3>Backprop 反向传播计算梯度,这个梯度能告诉我们如何去调整权重,最终能够更好的分类图片;
<4>Update 用计算出的梯度去更新参数

用一段伪码表述上述文字:

while True:
     data_batch = dataset.sample_data_batch()
     loss = network.forward(data_batch)
     dx = network.backward()
     x += - learninng_rate * dx

当我们谈论参数更新时,指的是上述伪码的最后一行,这一篇博客我们所要讨论的就是如何把这一行的更新迭代做的高级一点:

x += - learninng_rate * dx

梯度下降算法是深度学习中使用非常广泛的优化算法,也是众多机器学习算法中最常用的优化方法。几乎当前每一个先进的(state-of-the-art)机器学习库或者深度学习库都会包括梯度下降算法的不同变种实现。但是,它们就像一个黑盒优化器,很难得到它们优缺点的实际解释。这篇博客旨在提供梯度下降算法中的不同变种的介绍。

首先介绍梯度下降算法的三种框架,然后介绍它们存在的问题和挑战,接着介绍如何进行改进来解决存在的问题即算法的优化。

一、梯度下降算法三大框架

  • 批量梯度下降(Batch gradient descent)

旨在每次使用全量的训练集样本来更新模型参数,即:θ=θ−η⋅∇θJ(θ)
伪码如下:

for i in range(nb_epochs):
    params_grad = evaluate_gradient(loss_function,data,params)
    params = params - learning_rate * params_grad 

nb_epochs是用户输入的最大迭代次数。使用全量的训练集样本计算损失函数loss_function的梯度params_grad,然后使用学习速率learning_rate朝着梯度相反方向去更新模型的每一个参数params。

批量梯度下降每次学习都使用整个训练集,因此其优点在于每次更新都会朝着正确的方向进行,最后能够保证收敛于极值点(凸函数收敛于全局极值点,非凸函数可能会收敛于局部极值点,属于凸理论的问题了),但是其缺点在于每次学习时间过长,并且如果训练集很大以至于需要消耗大量的内存,并且全量梯度下降不能进行在线模型参数更新。

  • 随机梯度下降(Stochastic gradient descent)

旨在每次从训练集中随机选择一个样本来进行学习,即:θ=θ−η⋅∇θJ(θ;xi;yi)
伪码如下:<

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值