Adam 优化器(自适应矩估计)
AdamOptimizer
00 Remarks
论文使用 Adam 作为 P-NET 的优化器,并配合每 50 个 epoch 主动衰减的学习率策略。 Adam 对每个参数维护梯度的一阶矩估计与二阶矩估计,并做偏置校正, 对 P-NET 这种大量梯度恒为 0 的稀疏梯度场景尤其稳健。
参数更新规则为:
m_t = beta1 · m_(t-1) + (1 - beta1) · g_t
v_t = beta2 · v_(t-1) + (1 - beta2) · g_t²
m̂_t = m_t / (1 - beta1^t), v̂_t = v_t / (1 - beta2^t)
θ_t = θ_(t-1) - lr · m̂_t / (sqrt(v̂_t) + eps)
由于被掩码屏蔽的连接其梯度恒为 0,对应位置的 m 与 v 也恒为 0, 因此参数更新量恒为 0,即这些权重永远不会被更新。
01 Syntax
SMRUCC.genomics.Analysis.HTS.P_NET.AdamOptimizer
02 Methods
03 Properties
| Name | Overloads | Summary |
|---|---|---|
| LearningRate | 1 | 学习率,可以在训练过程中被外部修改以实现学习率衰减 |
| Beta1 | 1 | 一阶矩估计的指数衰减率 |
| Beta2 | 1 | 二阶矩估计的指数衰减率 |
| Epsilon | 1 | 数值稳定性常数 |
| StepCount | 1 | 当前已经执行的更新步数 |
04 Members
#ctor(
List(Of Tensor), List(Of Tensor), Double, Double, Double, Double)创建 Adam 优化器
Parameters
| Name | Type | Description |
|---|---|---|
parameters | List(Of Tensor) | 待优化的参数列表 |
gradients | List(Of Tensor) | 与 parameters 一一对应的梯度列表 |
learningRate | Double | 初始学习率,论文取 0.001 |
beta1 | Double | 一阶矩衰减率 |
beta2 | Double | 二阶矩衰减率 |
epsilon | Double | 数值稳定性常数 |
Step
执行一次参数更新
ZeroGrad
清零全部梯度
ToString
生成优化器的字符串描述
Returns
形如 Adam[lr=0.001, step=120] 的描述文本
LearningRate
学习率,可以在训练过程中被外部修改以实现学习率衰减
Returns
当前学习率
Beta1
一阶矩估计的指数衰减率
Returns
beta1,默认 0.9
Beta2
二阶矩估计的指数衰减率
Returns
beta2,默认 0.999
Epsilon
数值稳定性常数
Returns
epsilon,默认 1e-8
StepCount
当前已经执行的更新步数
Returns
时间步 t