实现 Adam(Adaptive Moment Estimation)优化器的参数更新过程。
Adam 结合了动量法(Momentum)和 RMSProp 的思想:维护梯度的一阶矩估计(均值)m 和二阶矩估计(未中心方差)v,并对它们做偏差修正后更新参数。
给定 d 维参数向量 θ、超参数 α,β1,β2,ε,以及连续 T 步的梯度,按以下规则逐步更新并输出每步的参数值。
更新规则(第 t 步,t 从 1 开始):
mt=β1⋅mt−1+(1−β1)⋅gt vt=β2⋅vt−1+(1−β2)⋅gt2 m^t=1−β1tmt,v^t=1−β2tvt θt=θt−1−α⋅v^t+εm^t其中 m0=0,v0=0,所有运算均为逐元素操作。
第一行包含两个整数 d 和 T(1≤d≤8,1≤T≤30),分别表示参数维度和迭代步数。
第二行包含四个浮点数 α,β1,β2,ε(0.0001≤α≤0.1,0<β1<1,0<β2<1,ε=10−8)。
第三行包含 d 个浮点数,表示初始参数 θ0。
接下来 T 行,每行 d 个浮点数,表示第 t 步的梯度 gt。
所有浮点数保留 4 位小数。
输出 T 行,每行 d 个浮点数,表示第 t 步更新后的参数 θt,保留 4 位小数。
输入
2 3
0.1000 0.9000 0.9990 0.00000001
1.0000 -1.0000
0.5000 -0.3000
0.5000 0.5000
0.4000 -0.2000
输出
0.9000 -0.9000
0.8012 -0.8030
0.7049 -0.7136
说明
初始 θ=[1,−1]。
第 1 步:g=[0.5,−0.3],一阶矩 m=[0.05,−0.03],偏差修正后 m^=[0.5,−0.3],二阶矩修正后 v^=[0.25,0.09],更新量 −0.1×[0.5/0.5, −0.3/0.3]=[−0.1, 0.1],θ←[0.9, −0.9]。
第 2、3 步类似,参数持续向梯度减小的方向更新。
输入
3 5
0.0100 0.9000 0.9990 0.00000001
0.5000 0.5000 1.0000
0.8000 -0.6000 0.2000
0.3000 -0.4000 0.5000
0.6000 -0.1000 0.3000
0.5000 0.5000 0.4000
0.2000 0.5000 0.1000
0.4000 -0.3000 0.4000
输出
0.4900 -0.4900 0.9900
0.4811 -0.4802 0.9806
0.4718 -0.4720 0.9711
0.4632 -0.4631 0.9615
0.4545 -0.4542 0.9527
说明
3 维参数,5 步梯度下降。学习率 α=0.01 较小,每步更新幅度约 0.01。Adam 的自适应学习率使每个维度的步长独立调节。
© CodeFun2000 · 使用条款
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册