昇腾社区首页
中文
注册
开发者
下载

aclnnAddLayerNormGrad

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:LayerNorm是一种归一化方法,可以将网络层输入数据归一化到[0, 1]之间。LayerNormGrad算子是深度学习中用于反向传播阶段的一个关键算子,主要用于计算LayerNorm操作的梯度。AddLayerNormGrad算子是将Add和LayerNormGrad融合起来,减少搬入搬出操作。

  • 计算公式:

    • 正向公式:(D为reduce轴大小)

      x=inputx1+inputx2x= inputx1 + inputx2 LayerNorm(x)=xiE(x)Var(x)+epsgamma+beta\operatorname{LayerNorm}(x)=\frac{x_i−\operatorname{E}(x)}{\sqrt{\operatorname{Var}(x)+ eps}}*gamma + beta 其中E(xi)=1D1Dxi其中\operatorname{E}(x_i)=\frac{1}{D}\sum_{1}^{D}{x_i} Var(xi)=1D1D(xiE(x))2\operatorname{Var}(x_i)=\frac{1}{D}\sum_{1}^{D}{(x_i-\operatorname{E}(x))^2}
    • 反向公式:

      x=inputx1+inputx2x= inputx1 + inputx2 dxOut=jinputdyigammajdxj^dxi+dsumOptionaldxOut = \sum_{j}{inputdy_i * gamma_j * \frac{{\rm d}\hat{x_j}}{{\rm d}x_i}} + dsumOptional dgammaOut=jinputdyidxj^dxidgammaOut = \sum_{j}{inputdy_i * \frac{{\rm d}\hat{x_j}}{{\rm d}x_i}} dbetaOut=jinputdyidbetaOut = \sum_{j}{inputdy_i}

      其中:

      • xj^\hat{x_j}

        xj^=(xiE(x))rstd\hat{x_j}=({x_i-\operatorname{E}(x)}) * {rstd}
      • rstdrstd

        rstd=1Var(x)rstd=\frac {1}{\sqrt{\operatorname{Var}(x)}}
      • dxj^dxi\frac{{\rm d}\hat{x_j}}{{\rm d}x_i}

        dxj^dxi=(δijdE(x)dxi)1Var(xi)1Var(xi)(xjE(x))dVar(xi)dx\frac{{\rm d}\hat{x_j}}{{\rm d}x_i}=(\delta_{ij} - \frac{{\rm d}\operatorname{E}(x)}{{\rm d} x_i}) * \frac{1}{\sqrt{\operatorname{Var}(x_i)}}-\frac{1}{\operatorname{Var}(x_i)} (x_j-\operatorname{E}(x))\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}

        其中,当i=j时,δij\delta_{ij}=1;当i!=j时,δij\delta_{ij}=0。

      • dE(x)dxi\frac{{\rm d}\operatorname{E}(x)}{{\rm d}x_i}

        dE(x)dxi=1D\frac{{\rm d}\operatorname{E}(x)}{{\rm d}x_i}=\frac{1}{D}

        其中,D为x中参加均值计算的数量。

      • dVar(xi)dx\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}

        dVar(xi)dx=1D1Var(xi)(xiE(x))\frac{\rm d \operatorname{Var}(x_i)}{\rm dx}=\frac{1}{D}\frac{1}{\sqrt{\operatorname{Var} (x_i)}}(x_i-\operatorname{E}(x))
      • 化简后的dxOutdxOut

        dxOut=rstd(inputdyigammaj1D(jinputdyigammaj+xj^jinputdyigammajxj^))+dsumOptionaldxOut = rstd * ({inputdy_i * gamma_j} - \frac{1}{D} * (\sum_{j}{inputdy_i * gamma_j} + \hat {x_j} * \sum_{j}{inputdy_i * gamma_j * \hat{x_j}})) + dsumOptional

函数原型

每个算子分为,必须先调用“aclnnAddLayerNormGradGetWorkspaceSize”接口获取计算所需workspace大小以及包含了算子计算流程的执行器,再调用“aclnnAddLayerNormGrad”接口执行计算。

[object Object]
[object Object]

aclnnAddLayerNormGradGetWorkspaceSize

  • 参数说明:

    [object Object]
    • [object Object]Atlas 推理系列产品[object Object]:参数[object Object][object Object][object Object][object Object][object Object][object Object]的数据类型不支持BFLOAT16。
  • 返回值:

    aclnnStatus:返回状态码,具体参见

    第一段接口完成入参校验,出现以下场景时报错:

    [object Object]

aclnnAddLayerNormGrad

  • 参数说明:

    [object Object]
  • 返回值:

    aclnnStatus:返回状态码,具体参见

约束说明

  • 功能维度

    • 数据类型支持
      • [object Object]Atlas 推理系列产品[object Object]:dy、x1、x2、gamma、dsumOptional、dxOut支持FLOAT32、FLOAT16。
      • [object Object]Atlas A2 训练系列产品/Atlas A2 推理系列产品[object Object]、[object Object]Atlas A3 训练系列产品/Atlas A3 推理系列产品[object Object]:dy、x1、x2、gamma、dsumOptional、dxOut支持FLOAT32、FLOAT16、BFLOAT16。
      • rstd、mean、dgammaOut、dbetaOut支持:FLOAT32。
    • 数据格式支持:ND。
  • 未支持类型说明

    DOUBLE:指令不支持DOUBLE。

  • 边界值场景说明

    • 当输入是Inf时,输出为Inf。
    • 当输入是NaN时,输出为NaN。
  • 确定性计算:

    • aclnnAddLayerNormGrad默认非确定性实现,支持通过aclrtCtxSetSysParamOpt开启确定性。

调用示例

示例代码如下,仅供参考,具体编译和执行过程请参考

[object Object]