文件最后提交记录最后更新时间
13 天前
13 天前
13 天前
13 天前
13 天前
13 天前
13 天前
13 天前
13 天前
README

FusedAdam

产品支持情况

产品 是否支持
Ascend 950PR/Ascend 950DT
Atlas A3 训练系列产品/Atlas A3 推理系列产品 ×
Atlas A2 训练系列产品/Atlas A2 推理系列产品 ×
Atlas 200I/500 A2 推理产品 ×
Atlas 推理系列产品 ×
Atlas 训练系列产品 ×

功能说明

  • 算子功能

实现Adam优化器功能,支持多组参数列表(TensorList)一次调用完成Adam优化器功能。

  • 计算公式

t=t+1g~t={gt/ss≠Nonegtotherwisegt+1=g~tg^t={−g~tmaximizeg~totherwisegˉt=g^t+λ⋅θtmt=β1mt−1+(1−β1)gˉtvt=β2vt−1+(1−β2)gˉt2max_vt={max⁡(vt,max_vt−1)amsgradmax_vt−1otherwisem^t=mt1−β1tv^t={max_vt1−β2tamsgradvt1−β2totherwiseθt+1=θt−ηv^t+ϵm^t\begin{aligned} &t=t+1 \\ &\tilde{g}_t = \begin{cases} g_t / s & s \neq \text{None} \\ g_t & \text{otherwise} \end{cases} \\ &g_{t+1} = \tilde{g}_t \\ &\hat{g}_t = \begin{cases} -\tilde{g}_t & \text{maximize} \\ \tilde{g}_t & \text{otherwise} \end{cases} \\ &\bar{g}_t = \hat{g}_t + \lambda \cdot \theta_t \\ &m_t=\beta_1 m_{t-1} + (1-\beta_1) \bar{g}_t\\ &v_t=\beta_2 v_{t-1} + (1-\beta_2) \bar{g}_t^2\\ &max\_v_t= \begin{cases} \max(v_t,max\_v_{t-1}) & \text{amsgrad} \\ max\_v_{t-1} & \text{otherwise} \end{cases} \\ &\hat{m}_t=\frac{m_t}{1-\beta_1^t}\\ &\hat{v}_t= \begin{cases} \frac{max\_v_t}{1-\beta_2^t} & \text{amsgrad} \\ \frac{v_t}{1-\beta_2^t} & \text{otherwise} \end{cases} \\ &\theta_{t+1} = \theta_t - \frac{\eta}{\sqrt{\hat{v}_t}+\epsilon} \hat{m}_t \\ \end{aligned}

参数说明

参数名 输入/输出/属性 描述 数据类型 数据格式
paramsRef(aclTensorList*) 输入/输出
  • 不支持空Tensor。
  • 待计算的权重列表,公式中的θ。
FLOAT16、BFLOAT16、FLOAT32 ND
gradsRef(aclTensorList*) 输入/输出
  • 不支持空Tensor。
  • 梯度数据列表,公式中的gt,仅在gradScale输入非空的时候会更新梯度。
FLOAT16、BFLOAT16、FLOAT32 ND
expAvgsRef(aclTensorList*) 输入/输出
  • 不支持空Tensor。
  • 一阶动量列表,公式中的m。
FLOAT16、BFLOAT16、FLOAT32 ND
expAvgSqsRef(aclTensorList*) 输入/输出
  • 不支持空Tensor。
  • 二阶动量列表,公式中的v,不能为负数。
FLOAT16、BFLOAT16、FLOAT32 ND
maxExpAvgSqsRef(aclTensorList*) 输入/输出
  • 不支持空Tensor。
  • 保存最大二阶矩列表,与更新后的expAvgSqsRef比较后取最大值输出。
  • 此参数在amsgrad参数为true时必选,在amsgrad参数为false时可选。
FLOAT16、BFLOAT16、FLOAT32 ND
stateSteps(aclTensorList*) 输入
  • 不支持空Tensor。
  • 迭代次数列表,公式中的t,需要大于0。
INT64、FLOAT32 ND
gradScaleOptional(aclTensor*) 输入 可选输入,梯度缩放因数s。当gradScaleOptional非空时,会据此更新并输出梯度(覆盖原有梯度)。 FLOAT ND
foundInfOptional(aclTensor*) 输入 可选输入,标识是否出现Inf/NaN。当foundInfOptional等于1时停止更新。 FLOAT ND
lr(double) 属性 学习率,公式中的η。 DOUBLE -
beta1(double) 属性 β1参数。 DOUBLE -
beta2(double) 属性 β2参数。 DOUBLE -
weightDecay(double) 属性 权重衰减系数,公式中的λ。 DOUBLE -
eps(double) 属性 防止除数为0。 DOUBLE -
amsgrad(bool) 属性 是否使用算法的AMSGrad变量。 BOOL -
maximize(bool) 属性 是否最大化参数。 BOOL -

约束说明

  • 输入paramsRef、gradsRef、expAvgsRef、expAvgSqsRef这些tensorList中每个tensor不得为空,数据类型必须一致,且数据类型仅支持FLOAT16、BFLOAT16、FLOAT32。

  • 输入tensorList中paramsRef、gradsRef、expAvgsRef、expAvgSqsRef中,tensor个数必须保持一致,且下标相同的tensor的shape必须保持一致。

  • stateSteps类型为tensorList,支持INT64、FLOAT32,其tensor个数必须和paramsRef、gradsRef、expAvgsRef、expAvgSqsRef、maxExpAvgSqsRef一致。每个tensor元素个数至少为1,如果元素个数大于1则取第0个元素的值作为stateSteps的值。

  • amsgrad为false时,maxExpAvgSqsRef可为空;amsgrad为true时,maxExpAvgSqsRef必选tensor数量,每个tensor的shape和dtype必须与paramsRef、gradsRef、expAvgsRef、expAvgSqsRef一致。

  • 确定性计算:

    • aclnnFusedAdam默认确定性实现。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_fused_adam 通过aclnnFusedAdam接口方式调用FusedAdam算子。