| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 | ||
| 13 天前 |
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*) | 输入/输出 |
|
FLOAT16、BFLOAT16、FLOAT32 | ND |
| gradsRef(aclTensorList*) | 输入/输出 |
|
FLOAT16、BFLOAT16、FLOAT32 | ND |
| expAvgsRef(aclTensorList*) | 输入/输出 |
|
FLOAT16、BFLOAT16、FLOAT32 | ND |
| expAvgSqsRef(aclTensorList*) | 输入/输出 |
|
FLOAT16、BFLOAT16、FLOAT32 | ND |
| maxExpAvgSqsRef(aclTensorList*) | 输入/输出 |
|
FLOAT16、BFLOAT16、FLOAT32 | ND |
| stateSteps(aclTensorList*) | 输入 |
|
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算子。 |