momentum SGD
时间: 2024-01-25 09:11:57 浏览: 92
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在更新过程中更加平稳,并且可以更快地收敛到最优解。
阅读全文