LabVIEW实现Adam优化器

Adam简介
Adam(Adaptive Moment Estimation)是一种广泛使用的深度学习优化算法,由Diederik P. Kingma和Jimmy Ba在2014年提出。它结合了动量法(Momentum)和RMSProp的思想,通过计算梯度的一阶矩估计和二阶矩估计来调整每个参数的学习率,从而实现更高效的网络训练。
工作原理
Adam算法的核心在于计算每个参数的一阶矩(即梯度的均值)和二阶矩(即梯度的未中心化方差)的指数移动平均,并利用这些矩的估计值来调整每个参数的学习率。
Adam算法的Python实现

在这个代码示例中,parameters和gradients分别是模型参数和梯度的列表,m和v是梯度一阶和二阶矩的估计,t是当前迭代次数,lr、beta1、beta2、epsilon是Adam算法的超参数。lr表示学习率,beta1,beta2控制m,v两距的衰减率,epsilon防止除以零出现错误。
关键步骤
计算梯度的一阶矩和二阶矩:
对于时间步t
t
,给定梯度grad
t
,对应的一阶矩m[param]
t
和二阶矩v[param]

m[param] = beta1 * m[param] + (1 – beta1) * grad

v[param] = beta2 * v[param] + (1 – beta2) * (grad ** 2)

其中beta1=0.9,beta2=0.999是超参数,接近1.

偏差矫正

由于m
t
和v
t
都是被初始化为向量,Adam需要对这些矩进行校正,以消除初期估计的偏差:

m_corrected = m[param] / (1 – beta1 ** t)

v_corrected = v[param] / (1 – beta2 ** t)

参数更新:
最后,利用校正过的矩值来更新参数:

param_update = lr * m_corrected / (np.sqrt(v_corrected) + epsilon)

param -= param_update

param是要新的参数,lr表示学习率,epsilon防止除以零出现错误增加的一个很小数。

gradients如何计算

自动微分:在实际框架(如PyTorch/TensorFlow)中,梯度通过 .backward() 自动计算,无需手动推导。LabVIEW并没有自动微分函数计算梯度。LabVIEW环境下使用数值微分的方式(中值差分)是比较靠谱的方式。参数比较多的话,使用并行计算。

数值梯度计算

扰动参数epsilon= 1E-5

1)扰动param[i]+epsilon,向前传播,并计算损失f_plus。

2)扰动param[i]- epsilon,向前传播,并计算损失f_minus。

3)grad[i] =(f_plus – f_minus)/(2*epsilon)

Adam测试

已知start,经过旋转、平移后得到target,通过迭代优化出[theta,tx,ty],实际运行瞬间就迭代结束,为了看清楚迭代过程,增加了延时。

声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/425216.html

联系我们
联系我们
分享本页
返回顶部