当前位置:   article > 正文

36. Adam 算法详解

36. Adam 算法详解

Adam(Adaptive Moment Estimation)是一种结合动量法和自适应学习率的优化算法,自2014年提出以来,迅速成为深度学习中最流行和常用的优化算法之一。Adam算法的核心思想是利用梯度的一阶动量和二阶动量来动态调整学习率,既保持了动量法的优点,又结合了RMSProp的自适应学习率特性。

Adam 算法原理

Adam算法通过计算梯度的一阶动量(即梯度的指数加权平均)和二阶动量(即梯度平方的指数加权平均)来调整每个参数的学习率。具体公式如下:

1. 梯度的一阶动量:
mt=β1mt1+(1β1)gt

2. 梯度的二阶动量:
vt=β2vt1+(1β2)g2t

3. 偏差修正:
ˆmt=mt1βt1
ˆvt=vt1βt2

4. 更新参数:
θt+1=θtαˆmtˆvt+ϵ

其中:
- β1β2 分别是动量和均方根动量的衰减率,常用值为 β1=0.9β2=0.999
- ϵ 是一个很小的常数,用于防止分母为零,常用值为 108

Adam 优缺点

优点:

- 自适应学习率:根据一阶动量和二阶动量动态调整每个参数的学习率,使得训练过程更加稳定。
- 快速收敛:结合动量法的加速特性和RMSProp的平稳特性,能够快速收敛到最优解。
- 适用于大规模数据:对于大规模数据和稀疏梯度,表现出色。

缺点:

- 参数较多:Adam算法需要调整的超参数较多(例如 β1,β2,ϵ),调参复杂度高。
- 可能不稳定:在某些情况下,Adam可能会出现不稳定的收敛行为。

Adam 代码实现

下面是一个使用Adam优化器的示例代码:
 

  1. import torch
  2. import matplotlib.pyplot as plt
  3. # 定义超参数
  4. learning_rate = 0.001
  5. epochs = 100
  6. # 随机生成数据
  7. x = torch.randn(100, 1)
  8. y = 2 * x + 3 + torch.randn(100, 1) * 0.5
  9. # 初始化参数
  10. w = torch.randn(1, requires_grad=True)
  11. b = torch.zeros(1, requires_grad=True)
  12. # 定义Adam优化器
  13. optimizer = torch.optim.Adam([w, b], lr=learning_rate)
  14. # 记录损失
  15. losses = []
  16. for epoch in range(epochs):
  17. # 预测
  18. y_pred = x * w + b
  19. # 计算损失
  20. loss = torch.mean((y_pred - y) ** 2)
  21. losses.append(loss.item())
  22. # 清空梯度
  23. optimizer.zero_grad()
  24. # 反向传播
  25. loss.backward()
  26. # 更新参数
  27. optimizer.step()
  28. # 可视化训练过程
  29. plt.plot(range(epochs), losses)
  30. plt.xlabel('Epoch')
  31. plt.ylabel('Loss')
  32. plt.title('Training Loss with Adam')
  33. plt.show()

Adam 与其他算法的比较

Adam算法集成了SGD、动量法、Adagrad、Adadelta等多种优化算法的优点,具有快速收敛和稳定的特点。以下是它与其他算法的对比:

1. SGD:基本的随机梯度下降法,收敛速度较慢,易陷入局部最优。
2. 动量法:在SGD基础上加入一阶动量,加速收敛,但仍然可能陷入局部最优。
3. Adagrad:自适应学习率,但对历史梯度的累积会导致学习率不断减小,后期训练缓慢。
4. RMSProp:改进了Adagrad,通过引入衰减系数解决学习率不断减小的问题。
5. Adam:结合动量法和RMSProp的优点,具有快速收敛和稳定的特点,是目前最常用的优化算法。

小结

Adam算法是目前最常用的优化算法之一,结合了动量法和RMSProp的优点,通过计算一阶和二阶动量来动态调整学习率,具有快速收敛和稳定的特点。尽管Adam需要调整的超参数较多,但其优越的性能使得它成为深度学习中最广泛使用的优化算法之一。

希望通过本节的讲解,大家能对Adam算法有一个全面的了解,并能够在实际项目中熟练应用。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/827110
推荐阅读
相关标签
  

闽ICP备14008679号