SGD

随机梯度下降(SGD)用于加速大规模数据集的训练过程,通过每次仅使用一个样本进行参数更新,虽然可能无法达到全局最优解,但在样本数量足够大时能逼近最优解。相比于传统的梯度下降,SGD训练速度快。随着深度学习的发展,mini-batch SGD成为常用方法,它在保持速度优势的同时,通过每次更新使用数百个样本,提高训练效果。SGD的收敛性源于其使用样本来近似整体分布,尽管训练路径可能曲折,但总体趋势仍朝向最优解。
摘要由CSDN通过智能技术生成

随机梯度下降(stochastic gradient descent,SGD)

当样本数据过于庞大时,采用原来传统的梯度下降算法,训练时间过长,收敛太慢,所以使用SGD的方法来加快收敛,该方法伪代码如下:
在这里插入图片描述
每个参数更新时只使用一个样本,原先是使用所有样本,这样说来,该算法虽然大概率得不到全局最优解,但是当样本数量足够多时,总是能得到最优解附近的值,而且训练速度快。
后续在深度学习中广泛使用的mini-bach,每次更新参数使用几百个样本,这样做比使用一个样本大概率训练效果好些,而且训练速度也较快。伪代码如下:
在这里插入图片描述
关于该算法为何会收敛的问题:总的来说就是从expected loss用特卡洛(monte carlo)来表示计算,那batch GD, mini-batch GD, SGD都可以看成SGD的范畴。因为大家都是在一个真实的分布中得到的样本,对于分布的拟合都是近似的。那这个时候三种方式的梯度下降就都是可以看成用样本来近似分布的过程,都是可以收敛的!更详细的回答见:

Momentum SGD(动量随机梯度下降)是一种优化算法,它在标准随机梯度下降(SGD)的基础上引入了动量的概念。动量可以理解为在梯度下降过程加入惯性,类似于一个小球从山上滚下来时的动量。动量可以帮助SGD在训练过程更快地收敛,并且可以减少震荡。 在动量SGD,每次更新参数时,除了使用当前的梯度,还会考虑之前的更新方向和速度。具体来说,动量SGD引入了一阶动量(momentum),用来表示之前的更新方向和速度。一阶动量的计算公式如下: ``` v = β * v - learning_rate * gradient ``` 其,v表示一阶动量,β是一个介于0和1之间的超参数,learning_rate表示学习率,gradient表示当前的梯度。一阶动量的计算可以看作是当前梯度和之前一阶动量的加权和。 然后,使用一阶动量来更新参数: ``` parameters = parameters + v ``` 通过引入动量,动量SGD可以在梯度下降过程积累之前的更新方向和速度,从而在更新参数时更加稳定。这样可以帮助SGD跳出局部最优解,并且在参数空间更快地找到全局最优解。 下面是一个使用动量SGD的示例代码: ```python import numpy as np # 定义损失函数和梯度 def loss_function(x): return x**2 def gradient(x): return 2*x # 初始化参数和一阶动量 parameters = 5 v = 0 # 设置超参数 learning_rate = 0.1 beta = 0.9 # 迭代更新参数 for i in range(10): # 计算梯度 grad = gradient(parameters) # 更新一阶动量 v = beta * v - learning_rate * grad # 更新参数 parameters = parameters + v # 打印参数值 print("Iteration", i+1, ": parameters =", parameters) ``` 这段代码演示了使用动量SGD来优化一个简单的损失函数。在每次迭代计算梯度、更新一阶动量和更新参数,后打印参数值。通过观察参数的变化,可以看到动量SGD在更新过程更加平稳,并且可以更快地收敛到最优解。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值