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

aclnnCrossEntropyLossGrad

产品支持情况

[object Object]undefined

功能说明

  • 接口功能:aclnnCrossEntropyLoss的反向传播。
  • 计算公式:
ignoreMasktarget(t)={1,target(t)ignoreIndex0,target(t)=ignoreIndexignoreMask_{target(t)}=\begin{cases} 1, &target(t) ≠ ignoreIndex \\ 0, &target(t) = ignoreIndex \end{cases} smoothLossGrad={grad/sum(weighttargetignoreMask)labelSmoothing/C,reduction=meangradlabelSmoothing/C,reduction=sumgradlabelSmoothing/C,reduction=nonesmoothLossGrad=\begin{cases} grad / sum(weight_{target}* ignoreMask) * labelSmoothing / C, &reduction = mean \\ grad * labelSmoothing / C, &reduction = sum \\ grad * labelSmoothing / C, &reduction = none \end{cases} lossOutGrad={grad(1labelSmoothing)/sum(weighttargetignoreMask)ignoreMask,reduction=meangrad(1labelSmoothing)ignoreMask,reduction=sumgrad(1labelSmoothing)ignoreMask,reduction=nonelossOutGrad=\begin{cases} grad * (1-labelSmoothing) / sum(weight_{target}* ignoreMask) * ignoreMask, &reduction = mean \\ grad * (1-labelSmoothing) * ignoreMask, &reduction = sum \\ grad * (1-labelSmoothing) * ignoreMask, &reduction = none \end{cases} nllLossGrad=lossOutGradweighttargetnllLossGrad = lossOutGrad * weight_{target} logSoftmaxGradLossOutSubPart=exp(logProb)nllLossGradlogSoftmaxGradLossOutSubPart = exp(logProb) * nllLossGrad predictionsGradLossOutij={nllLossGradi,j=target(i)0,jtarget(i)predictionsGradLossOut_{ij}=\begin{cases} nllLossGrad_i, & j=target(i) \\ 0, & j ≠ target(i) \end{cases} predictionsGradLossOut=logSoftmaxGradLossOutSubPartpredictionsGradLossOutpredictionsGradLossOut = logSoftmaxGradLossOutSubPart - predictionsGradLossOut smoothLossGrad=smoothLossGradignoreMasksmoothLossGrad = smoothLossGrad * ignoreMask logSoftmaxGradSmoothLoss=smoothLossGradweightlogSoftmaxGradSmoothLoss = smoothLossGrad * weight predictionsGradSmoothLoss=exp(logProb)sum(logSoftmaxGradSmoothLoss)logSoftmaxGradSmoothLosspredictionsGradSmoothLoss = exp(logProb) * sum(logSoftmaxGradSmoothLoss) - logSoftmaxGradSmoothLoss

不涉及zloss场景输出:

xGradout=predictionsGradLossOut+predictionsGradSmoothLossxGrad_{out} = predictionsGradLossOut + predictionsGradSmoothLoss

zloss场景:

gradZ={grad+gradZloss,传入gradZlossgrad,不传gradZlossgradZ=\begin{cases} grad + gradZloss, & 传入gradZloss \\ grad, & 不传gradZloss \end{cases} zlossGrad={gradZ/sum(ignoreMask),reduction=meangradZ,reduction=sumgradZ,reduction=nonezlossGrad=\begin{cases} gradZ / sum(ignoreMask), & &reduction = mean \\ gradZ, & &reduction = sum \\ gradZ, & &reduction = none \end{cases} lseGrad=2lseSquareScaleForZlosslseForZlossignoreMaskzlossGradlseGrad = 2 * lseSquareScaleForZloss * lseForZloss * ignoreMask * zlossGrad zlossOutputGrad=exp(logProb)lseGradzlossOutputGrad = exp(logProb) * lseGrad

zloss场景输出:

xGradout=xGradout+zlossOutputGradxGrad_{out} = xGrad_{out} + zlossOutputGrad

函数原型

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

[object Object]
[object Object]

aclnnCrossEntropyLossGradGetWorkspaceSize

  • 参数说明

    [object Object]
  • 返回值

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

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

    [object Object]

aclnnCrossEntropyLossGrad

  • 参数说明

    [object Object]
  • 返回值

    返回aclnnStatus状态码,具体参见

约束说明

  • target仅支持类标签索引,不支持概率输入。

  • gradLoss、logProb、gradZlossOptional、lseForZlossOptional、xGradOut数据类型需保持一致。

  • 当前暂不支持zloss功能,传入相关输入,即gradZlossOptional、lseForZlossOptional、lseSquareScaleForZloss,不会生效。

  • 确定性计算:

    • aclnnCrossEntropyLossGrad默认确定性实现。

调用示例

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

[object Object]