ConvolutionBackward

产品支持情况

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

功能说明

  • 算子功能:卷积的反向传播。根据输出掩码设置计算输入、权重和偏差的梯度。此函数支持1D、2D和3D卷积。

  • 计算公式

假定输入的shape为(N,Cin,Din,Hin,WinN,C_{in},D_{in},H_{in},W_{in})、输出的shape为(N,Cout,Dout,Hout,WoutN,C_{out},D_{out},H_{out},W_{out}),那么它们与卷积步长(stridestride)、卷积核大小(kernelSize,kD,kH,kWkernelSize,kD,kH,kW)、膨胀参数(dilationdilation)的关系是:

Dout=⌊Din+2∗padding[0]−dilation[0]∗(kernelSize[0]−1)−1stride[0]+1⌋ D_{out}=\lfloor \frac{D_{in}+2*padding[0]-dilation[0] * (kernelSize[0] - 1) - 1}{stride[0]}+1 \rfloor

Hout=⌊Hin+2∗padding[1]−dilation[1]∗(kernelSize[1]−1)−1stride[1]+1⌋ H_{out}=\lfloor \frac{H_{in}+2*padding[1]-dilation[1] * (kernelSize[1] - 1) - 1}{stride[1]}+1 \rfloor

Wout=⌊Win+2∗padding[2]−dilation[2]∗(kernelSize[2]−1)−1stride[2]+1⌋ W_{out}=\lfloor \frac{W_{in}+2*padding[2]-dilation[2] * (kernelSize[2] -1) -1}{stride[2]}+1 \rfloor

卷积反向传播需要计算对卷积正向的输入张量 xx、卷积核权重张量 ww 和偏置 bb 的梯度。

  • 对于 xx 的梯度 ∂L∂x\frac{\partial L}{\partial x}

    ∂L∂xn,cin,i,j=∑cout=1Cout∑p=1kH∑q=1kW∂L∂yn,cout,i−p,j−q⋅wcout,cin,p,q\frac{\partial L}{\partial x_{n, c_{in}, i, j}} = \sum_{c_{out}=1}^{C_{out}} \sum_{p=1}^{k_H} \sum_{q=1}^{k_W} \frac{\partial L}{\partial y_{n, c_{out}, i-p, j-q}}\cdot w_{c_{out}, c_{in}, p, q}

    其中,LL 为损失函数,∂L∂y\frac{\partial L}{\partial y} 为输出张量 yyLL 的梯度。

  • 对于 ww 的梯度 ∂L∂w\frac{\partial L}{\partial w}

    ∂L∂wcout,cin,p,q=∑n=1N∑i=1Hout∑j=1Woutxn,cin,i⋅sH+p,j⋅sW+q⋅∂L∂yn,cout,i,j\frac{\partial L}{\partial w_{c_{out}, c_{in}, p, q}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} x_{n, c_{in}, i \cdot s_H + p, j \cdot s_W + q} \cdot \frac{\partial L}{\partial y_{n, c_{out}, i, j}}

  • 对于 bb 的梯度 ∂L∂b\frac{\partial L}{\partial b}

    ∂L∂bcout=∑n=1N∑i=1Hout∑j=1Wout∂L∂yn,cout,i,j\frac{\partial L}{\partial b_{c_{out}}} = \sum_{n=1}^{N} \sum_{i=1}^{H_{out}} \sum_{j=1}^{W_{out}} \frac{\partial L}{\partial y_{n, c_{out}, i, j}}

参数说明

参数名
输入/输出/属性
描述
数据类型
数据格式
gradOutput 输入
  • 输出张量yyLL的梯度,相当于公式中的∂L∂y\frac{\partial L}{\partial y}
  • 数据格式需要与'input'、'gradInput'一致。
FLOAT、FLOAT16、BFLOAT16 NCL、NCHW、NCDHW
input 输入
  • 公式中卷积正向的输入张量xx
  • 数据格式需要与'gradOutput'、'gradInput'一致。
FLOAT、FLOAT16、BFLOAT16 NCL、NCHW、NCDHW
weight 输入
  • 公式中卷积核权重张量ww
  • 数据格式需要与'gradWeight'一致。
FLOAT、FLOAT16、BFLOAT16 NCL、NCHW、NCDHW
biasSizes 输入
  • 卷积正向过程中偏差(bias)的shape,数组长度是1。
  • 其在普通卷积中等于[weight.shape[0]],在转置卷积中等于[weight.shape[1] * groups]。
  • 空Tensor场景下,当outputMask指定偏差的梯度需要计算时,biasSizes不能为nullptr。
INT64 -
stride 输入
  • 反向传播过程中卷积核在输入上移动的步长,相当于公式中的stride[0]、stride[1]、stride[2]。
  • 数组长度为weight维度减2,数值必须大于0。
INT64 -
padding 输入
  • 反向传播过程中对于输入填充,相当于公式中的padding[0]、padding[1]、padding[2]。
  • 数组长度可以为weight维度减2,在2d场景下数组长度可以为4。数值必须大于等于0。
INT64 -
dilation 输入
  • 反向传播过程中的膨胀参数,相当于公式中的dilation[0]、dilation[1]、dilation[2]。
  • 数组长度可以为weight维度减2。数值必须大于0。
INT64 -
transposed 输入
  • 转置卷积使能标志位, 当其值为True时使能转置卷积。
- -
outputPadding 输入
  • 反向传播过程中对于输出填充,数组长度可以为weight维度减2,各维度的数值范围满足[0, stride对应维度数值)。transposed为False场景下,要求每个元素值为0。
INT64 -
groups 输入
  • 反向传播过程中输入通道的分组数。
  • 需满足groups*weight的C维度=input的C维度,groups取值范围为[1,65535]。
INT32 -
gradInput 输出
  • 输入张量xxLL的梯度,相当于公式中的∂L∂x\frac{\partial L}{\partial x}
  • 数据类型与'input'保持一致。
  • 数据格式需要与'input'、'gradOutput'一致。
FLOAT、FLOAT16、BFLOAT16 NCL、NCHW、NCDHW
gradWeight 输出
  • 卷积核权重张量wwLL的梯度,相当于公式中的∂L∂w\frac{\partial L}{\partial w}
  • 数据格式需要与'weight'一致。
FLOAT、FLOAT16、BFLOAT16 NCL、NCHW、NCDHW
gradBias 输出
  • 偏置bbLL的梯度,相当于公式中的∂L∂b\frac{\partial L}{\partial b}
  • 数据类型与'gradOutput'一致。
FLOAT、FLOAT16、BFLOAT16 ND
  • Ascend 950PR/Ascend 950DT:
    • 只有在transposed=true且output_mask[0]=true时,数据类型才支持HIFLOAT8、FLOAT8_E4M3FN。
  • Atlas 推理系列产品、Atlas 训练系列产品:
    • 不支持BFLOAT16、HIFLOAT8、FLOAT8_E4M3FN。
    • gradOutput、weight参数下,不支持空tensor。
  • Atlas A2 训练系列产品/Atlas A2 推理系列产品、Atlas A3 训练系列产品/Atlas A3 推理系列产品:
    • 不支持HIFLOAT8、FLOAT8_E4M3FN。

约束说明

  • Atlas 推理系列产品、Atlas 训练系列产品:当前仅支持1D和2D卷积的反向传播,暂不支持3D卷积的反向传播。
  • 更详细的约束说明可查看aclnnConvolutionBackward接口资料。

调用说明

调用方式 样例代码 说明
aclnn接口 test_aclnn_conv_backward_1d 通过aclnnConvolutionBackward接口方式调用Conv3DBackpropFilterV2、Conv3DBackpropInputV2算子
aclnn接口 test_aclnn_conv_backward_2d 通过aclnnConvolutionBackward接口方式调用Conv3DBackpropFilterV2、Conv3DBackpropInputV2算子
aclnn接口 test_aclnn_conv_backward_3d 通过aclnnConvolutionBackward接口方式调用Conv3DBackpropFilterV2、Conv3DBackpropInputV2算子