开发者
下载
[object Object][object Object][object Object]undefined
[object Object]
  • 接口功能:MhcSinkhornBackward是MhcSinkhorn的反向算子。mHC(Manifold-Constrained Hyper-Connections)架构中的MhcSinkhorn算子对输入矩阵做sinkhorn变换得到双随机矩阵Hres\mathbf{H}_{\text{res}},输出的双随机矩阵的所有元素≥0、每一行之和为1且每一列之和为1 (具有范数保持、组合封闭性和凸组合几何解释三大特性)。对mHC架构中双随机矩阵Hres\mathbf{H}_{\text{res}}矩阵的梯度进行sinkhorn变换的反向计算得到输入Hres\mathbf{H}'_{\text{res}}的梯度。

  • 计算公式

    • Sinkhorn-Knopp算法在正向计算中通过 num_iters\mathbf{num\_iters} 次迭代归一化实现双随机投影,在反向传播的迭代计算中:

    • num_iters1\mathbf{num\_iters}-1 次迭代:

    dot_prod2i+1=dim=2,keepdim=True(gradcurr  norm_out2i+1),gradcurrgradcurrdot_prod2i+1sum_out2i+1,dot_prod2i=dim=1,keepdim=True(gradcurr  norm_out2i),gradcurrgradcurrdot_prod2isum_out2i,\begin{aligned} \mathbf{dot\_prod}_{2i+1} &= \sum_{\dim=-2,\text{keepdim}=\text{True}} (\mathbf{grad}_{curr}\ {⋅}\ \mathbf{norm\_out}_{2i+1}), \\ \mathbf{grad}_{curr} &← \frac{\mathbf{grad}_{curr} - \mathbf{dot\_prod}_{2i+1}}{\mathbf{sum\_out}_{2i+1}}, \\ \mathbf{dot\_prod}_{2i} &= \sum_{\dim=-1,\text{keepdim}=\text{True}} (\mathbf{grad}_{curr}\ {⋅}\ \mathbf{norm\_out}_{2i}), \\ \mathbf{grad}_{curr} &← \frac{\mathbf{grad}_{curr} - \mathbf{dot\_prod}_{2i}}{\mathbf{sum\_out}_{2i}}, \\ \end{aligned}
    • 最后一次迭代:
    dot_prod1=dim=2,keepdim=True(gradcurr  norm_out1),gradcurrgradcurrdot_prod1sum_out1,dot_prod0=dim=1,keepdim=True(gradcurr  norm_out0),gradinput(gradcurrdot_prod0)  norm_out0\begin{aligned} \mathbf{dot\_prod}_{1} &= \sum_{\dim=-2,\text{keepdim}=\text{True}} (\mathbf{grad}_{curr}\ {⋅}\ \mathbf{norm\_out}_{1}), \\ \mathbf{grad}_{curr} &← \frac{\mathbf{grad}_{curr} - \mathbf{dot\_prod}_{1}}{\mathbf{sum\_out}_{1}}, \\ \mathbf{dot\_prod}_{0} &= \sum_{\dim=-1,\text{keepdim}=\text{True}} (\mathbf{grad}_{curr}\ {⋅}\ \mathbf{norm\_out}_{0}), \\ \mathbf{grad}_{input} &← ({\mathbf{grad}_{curr} - \mathbf{dot\_prod}_{0}})\ {⋅}\ \mathbf{norm\_out}_{0} \\ \end{aligned}
    • 其中:gradcurr\mathbf{grad}_\text{curr} 为初始梯度,gradinput\mathbf{grad}_\text{input} 为输出梯度,norm_outk\mathbf{norm\_out}_\text{k}为第kk次归一化方向向量,sum_outk\mathbf{sum\_out}_\text{k} 为对应的缩放系数。
[object Object]

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

[object Object]
[object Object]
[object Object]
  • 参数说明:

    [object Object]undefined
  • 返回值:

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

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

    [object Object]
[object Object]
  • 参数说明:

    [object Object]undefined
  • 返回值:

    返回[object Object]状态码,具体参见

[object Object]
  • 确定性计算:

    aclnnMhcSinkhornBackward默认确定性实现。

  • 规格约束:

    • num_iters:取值范围1~100,超出则报参数无效。
    • n:输入矩阵最后两维尺寸,仅支持4、6或8。
    • align_n:固定为8,是n按FP32 块大小32 字节对齐后的值。
    • 维度数:输入gradOutput仅支持3 维(T,n,n)或4 维(B,S,n,n)。
[object Object]

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

[object Object]