AtanGrad
产品支持情况
| 产品 | 是否支持 |
|---|---|
| Ascend 950PR/Ascend 950DT | √ |
| Atlas A3 训练系列产品/Atlas A3 推理系列产品 | √ |
| Atlas A2 训练系列产品/Atlas A2 推理系列产品 | √ |
| Atlas 200I/500 A2 推理产品 | × |
| Atlas 推理系列产品 | √ |
| Atlas 训练系列产品 | √ |
功能说明
-
算子功能:计算反正切函数(atan)的输入梯度,用于神经网络反向传播中的梯度传递。
-
计算公式(命名与op_graph/atan_grad_proto.h一致):
zi=dyi×11+yi2z_i = dy_i \times \frac{1}{1 + y_i^2}
其中 yy 为前向计算的输入张量(atan函数自变量),dydy 为上游传入的梯度张量,zz 为输出的输入梯度张量。
-
等效分步计算(NPU实现采用
Div替代Reciprocal+Mul,避免INTRINSIC模式精度不足):- ti=yi×yit_i = y_i \times y_i(计算 y2y^2)
- gi=ti+1.0g_i = t_i + 1.0(计算 1+y21 + y^2)
- zi=dyi/giz_i = dy_i / g_i(直接除法,等价于 dyi×(1/(1+y2))dy_i \times (1 / (1+y^2)))
参数说明
| 参数名 | 输入/输出 | 描述 | 数据类型 | 数据格式 |
|---|---|---|---|---|
| y | 输入 | 前向计算输入张量,对应公式中y,为atan函数自变量。 | FLOAT16、FLOAT、BFLOAT16 | ND |
| dy | 输入 | 上游传入的梯度张量,对应公式中dy。数据类型须与y完全一致。 | FLOAT16、FLOAT、BFLOAT16 | ND |
| z | 输出 | 输出的输入梯度张量,对应公式中z。数据类型须与y完全一致。 | FLOAT16、FLOAT、BFLOAT16 | ND |
约束说明
- y、dy、z三者数据类型必须完全一致,不支持隐式类型转换。
- y、dy、z三者shape必须完全相同,不支持广播(broadcast)。
- 支持空Tensor(元素个数为0)。
- 支持0-8维Tensor,0维表示标量(scalar),此时dy和z也必须为0维。
- 当y取值极大(如fp16最大值)时,y2y^2 可能溢出为inf,此时 1/inf=01/\text{inf}=0,z=0,属于正常数值行为。
- FP16/BF16输入:NPU kernel走 FP16/BF16 → FP32中间计算 → FP16/BF16 的Cast模式(CANN kernel默认实现约定)。FP32输入:直接FP32计算。
调用说明
| 调用方式 | 样例代码 | 说明 |
|---|---|---|
| 图模式 | test_geir_atan_grad.cpp | 通过图模式方式调用AtanGrad算子。 |