使用Numpy进行深度学习中5大反向传播优化算法的性能比较(三)

简介: 使用Numpy进行深度学习中5大反向传播优化算法的性能比较(三)

4、RMSprop

Rmsprop是由著名计算机科学家Geoffrey Hinton (Hinton et al., 2012)提出的另一种高效优化算法。该算法的工作原理与Adagrad相似,只是稍加修改。不像AdaGrad那样取梯度平方的累积和,我们取这些梯度的指数移动平均值。使用指数平均的原因是为了给最近更新的梯度权重大于最近更新的梯度。下面的方程式显示了Rmsprop的更新规则。

image.png

v1,v2=0,0
gamma,lr=0.9,0.4
x1,x2=-4,-6
l1,l2=[],[]
for i in range(20):
  l1.append(x1)
  l2.append(x2)
  v1=gamma*v1+(1-gamma)*(0.2*x1)**2
  v2=gamma*v2+(1-gamma)*(4*x2)**2
  x1=x1-(lr/math.sqrt(v1+c))*0.2*x1
  x2=x2-(lr/math.sqrt(v2+c))*4*x2

Momentum vs Adagrad vs RMSprop

image.png

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(13,6))
left, bottom, width, height = 100, 0.1, 0.8, 0.8
ax = fig.add_axes([left, bottom, width, height])
start, stop, n_values = -8, 8, 100
x_vals = np.linspace(start, stop, n_values)
y_vals = np.linspace(start, stop, n_values)
X, Y = np.meshgrid(x_vals, y_vals)
Z = np.sqrt(0.1*X**2 + 2*Y**2)
plt.contourf(X,Y,Z,)
plt.plot(l1_gd[:15],l2_gd[:15],color="red",marker="*",markeredgecolor="black",linewidth=3,label="Gradient Descent")
plt.plot(l1_gd_m[:15],l2_gd_m[:15],color="yellow",marker="*",markeredgecolor="orange",linewidth=3,label="Gradient Descent (Momentum =0.5)")
plt.plot(l1_adagrad[:15],l2_adagrad[:15],color="blue",marker="*",markeredgecolor="black",linewidth=3,label="Adagrad")
plt.plot(l1[:15],l2[:15],color="g",marker="*",markeredgecolor="b",linewidth=3,label="RMSprop Algorithm")
plt.figure(figsize=(15,10))
plt.figure(figsize=(15,10))
ax.set_title('Level Sets of the Function',size=20)
ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
ax.legend()
plt.show()

显而易见,当收敛到最优点时,梯度下降算法在垂直方向上产生巨大的振荡,RMSprop限制了垂直运动,加速了水平方向。此外,虽然动量减小了振荡,RMSprop提供了更可靠和更快的收敛。

5、Adam

自适应矩估计是另一种计算每个参数的自适应学习率的优化器。与其他优化器相比,它更加健壮和可靠,因为它基本上结合了动量和RMSprop(即。移动类似梯度的动量的平均值,并使用梯度的平方来调整学习速率,如RMSprop)。更精确地说,Adam算法执行如下-

image.png

v1,v2,s1,s2=0,0,0,0
gamma,beta,lr=0.9,0.999,0.4
x1,x2=-6,-6
l1_adam,l2_adam=[],[]
for i in range(20):
  l1_adam.append(x1)
  l2_adam.append(x2)
  v1=gamma*v1+(1-gamma)*(0.2*x1)
  v2=gamma*v2+(1-gamma)*(4*x2)
  s1=beta*s1+(1-beta)*(0.2*x1)**2
  s2=beta*s2+(1-beta)*(4*x2)**2
  m_hat_v1= v1 / (1 - np.power(gamma, i+1))
  m_hat_v2 = v2 / (1 - np.power(gamma, i+1))
  s_hat_s1= s1 / (1 - np.power(beta, i+1))
  s_hat_s2 = s2 / (1 - np.power(beta, i+1))
  x1=x1-(lr)*(m_hat_v1/math.sqrt((s_hat_s1)+c))
  x2=x2-(lr)*(m_hat_v2/math.sqrt((s_hat_s2)+c))
  print(x1,x2)
  if abs(x1)<=0.1 and abs(x2)<0.1:
    break

在收敛期间的轨迹汇总

image.png

import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure(figsize=(13,6))
left, bottom, width, height = 100, 0.1, 0.8, 0.8
ax = fig.add_axes([left, bottom, width, height])
start, stop, n_values = -8, 8, 100
x_vals = np.linspace(start, stop, n_values)
y_vals = np.linspace(start, stop, n_values)
X, Y = np.meshgrid(x_vals, y_vals)
Z = np.sqrt(0.1*X**2 + 2*Y**2)
plt.contourf(X,Y,Z,)
plt.plot(l1_gd[:15],l2_gd[:15],color="red",marker="*",markeredgecolor="black",linewidth=3,label="Gradient Descent")
plt.plot(l1_gd_m[:15],l2_gd_m[:15],color="yellow",marker="*",markeredgecolor="orange",linewidth=3,label="Gradient Descent (Momentum =0.5)")
plt.plot(l1_adagrad[:15],l2_adagrad[:15],color="blue",marker="*",markeredgecolor="black",linewidth=3,label="Adagrad")
plt.plot(l1[:15],l2[:15],color="g",marker="*",markeredgecolor="b",linewidth=3,label="RMSprop Algorithm")
plt.plot(l1_adam[:20],l2_adam[:20],color="Brown",marker="*",markeredgecolor="pink",linewidth=3,label="Adam")
plt.figure(figsize=(15,10))
plt.figure(figsize=(15,10))
ax.set_title('Level Sets of the Function',size=20)
ax.set_xlabel('x (cm)')
ax.set_ylabel('y (cm)')
ax.legend()
plt.show()

正如在最后的图中所看到的,Adam优化器在直线路径上导致最快的收敛。在Adam的例子中,它通过累积之前梯度的总和来减弱振荡,并且由于梯度的平方项,它遵循一条直线,类似于RMSprop。这导致了一个明显的结论,即Adam是Momentum和RMSprop的结合版本。从上图中我们可以很容易地看出为什么Adam是deep learning中最流行的优化器。即使从离最优值(-6,-6)很远的地方开始,Adam也能以最小的迭代收敛得最快。

目录
相关文章
|
8月前
|
存储 机器学习/深度学习 监控
网络管理监控软件的 C# 区间树性能阈值查询算法
针对网络管理监控软件的高效区间查询需求,本文提出基于区间树的优化方案。传统线性遍历效率低,10万条数据查询超800ms,难以满足实时性要求。区间树以平衡二叉搜索树结构,结合节点最大值剪枝策略,将查询复杂度从O(N)降至O(logN+K),显著提升性能。通过C#实现,支持按指标类型分组建树、增量插入与多维度联合查询,在10万记录下查询耗时仅约2.8ms,内存占用降低35%。测试表明,该方案有效解决高负载场景下的响应延迟问题,助力管理员快速定位异常设备,提升运维效率与系统稳定性。
360 4
|
8月前
|
机器学习/深度学习 算法 数据可视化
基于MVO多元宇宙优化的DBSCAN聚类算法matlab仿真
本程序基于MATLAB实现MVO优化的DBSCAN聚类算法,通过多元宇宙优化自动搜索最优参数Eps与MinPts,提升聚类精度。对比传统DBSCAN,MVO-DBSCAN有效克服参数依赖问题,适应复杂数据分布,增强鲁棒性,适用于非均匀密度数据集的高效聚类分析。
|
9月前
|
机器学习/深度学习 传感器 算法
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
【高创新】基于优化的自适应差分导纳算法的改进最大功率点跟踪研究(Matlab代码实现)
406 14
|
8月前
|
机器学习/深度学习 算法
采用蚁群算法对BP神经网络进行优化
使用蚁群算法来优化BP神经网络的权重和偏置,克服传统BP算法容易陷入局部极小值、收敛速度慢、对初始权重敏感等问题。
546 5
|
8月前
|
机器学习/深度学习 数据采集 人工智能
深度学习实战指南:从神经网络基础到模型优化的完整攻略
🌟 蒋星熠Jaxonic,AI探索者。深耕深度学习,从神经网络到Transformer,用代码践行智能革命。分享实战经验,助你构建CV、NLP模型,共赴二进制星辰大海。
|
9月前
|
canal 算法 vr&ar
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
【图像处理】基于电磁学优化算法的多阈值分割算法研究(Matlab代码实现)
258 1
|
9月前
|
机器学习/深度学习 运维 算法
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
【微电网多目标优化调度】多目标学习者行为优化算法MOLPB求解微电网多目标优化调度研究(Matlab代码实现)
375 1
|
9月前
|
算法 机器人 Serverless
【机器人路径规划】基于6种算法(黑翅鸢优化算法BKA、SSA、MSA、RTH、TROA、COA)求解机器人路径规划研究(Matlab代码实现)
【机器人路径规划】基于6种算法(黑翅鸢优化算法BKA、SSA、MSA、RTH、TROA、COA)求解机器人路径规划研究(Matlab代码实现)
795 2
|
9月前
|
机器学习/深度学习 算法 Java
基于灰狼优化算法(GWO)解决柔性作业车间调度问题(Matlab代码实现)
基于灰狼优化算法(GWO)解决柔性作业车间调度问题(Matlab代码实现)
439 1

热门文章

最新文章