MhcSinkhorn
## 产品支持情况
|产品 | 是否支持 |
|:----------------------------|:-----------:|
|<term>Ascend 950PR/Ascend 950DT</term>| √ |
|<term>Atlas A3 训练系列产品/Atlas A3 推理系列产品</term>| × |
|<term>Atlas A2 训练系列产品/Atlas A2 推理系列产品</term>| × |
|<term>Atlas 200I/500 A2 推理产品</term>| × |
|<term>Atlas 推理系列产品</term>| × |
|<term>Atlas 训练系列产品</term>| × |
## 功能说明
- 算子功能:MhcSinkhorn是mHC架构的核心算子,通过Sinkhorn-Knopp迭代算法将mHC层初始混合矩阵投影到双随机矩阵流形(Birkhoff多胞形),生成满足行和、列和均为1的双随机矩阵h_res,为MhcPost算子提供关键输入,稳定深度网络信号传播、解决梯度消失/爆炸问题。
- 计算公式:
$$
\begin{align}
M^{(k+1)} &= M^{(k)} \oslash (1_n \cdot (M^{(k)})^T 1_n) \\
M^{(k+2)} &= M^{(k+1)} \oslash ((M^{(k+1)} 1_n) \cdot 1_n^T) \\
h_{res} &= M^{(k+2)}
\end{align}
$$
其中:$M$ 为初始混合矩阵,$\oslash$ 为元素级除法,$1_n$ 为n维全1向量,$k$ 为迭代次数,迭代至矩阵满足双随机特性时停止。
## 参数说明
<table style="undefined; table-layout: fixed; width: 952px"><colgroup>
<col style="width: 106px">
<col style="width: 87px">
<col style="width: 445px">
<col style="width: 209px">
<col style="width: 105px">
</colgroup>
<thead>
<tr>
<th>参数名</th>
<th>输入/输出</th>
<th>描述</th>
<th>数据类型</th>
<th>数据格式</th>
</tr></thead>
<tbody>
<tr>
<td>init_matrix</td>
<td>输入</td>
<td>待变换的mHC层初始混合矩阵,为超连接原始矩阵。</td>
<td>FLOAT32</td>
<td>ND</td>
</tr>
<tr>
<td>max_iter</td>
<td>输入</td>
<td>Sinkhorn-Knopp迭代最大次数,控制迭代收敛过程。</td>
<td>INT32</td>
<td>标量</td>
</tr>
<tr>
<td>epsilon</td>
<td>输入</td>
<td>收敛阈值,矩阵行/列和与1的误差小于该值时停止迭代。</td>
<td>FLOAT32</td>
<td>标量</td>
</tr>
<tr>
<td>h_res</td>
<td>输出</td>
<td>经Sinkhorn变换后的双随机矩阵,作为MhcPost算子的h_res输入。</td>
<td>FLOAT32</td>
<td>ND</td>
</tr>
</tbody>
</table>
## 约束说明
- 输入init_matrix需为二维非负矩阵(N×N),确保迭代后可形成双随机矩阵。
- max_iter建议取值范围50~200,epsilon建议取值范围1e-6~1e-4,平衡收敛效果与计算效率。
- 仅支持Ascend 950PR/Ascend 950DT硬件环境,其他Atlas系列产品暂不支持。
## 调用说明
| 调用方式 | 调用样例 | 说明 |
|--------------|-------------------------|--------------------------------------------------------------|
| aclnn调用 | [test_aclnn_mhc_sinkhorn](examples/test_aclnn_mhc_sinkhorn.cpp) | 通过接口方式调用[aclnnMhcSinkhorn](docs/aclnnMhcSinkhorn.md)算子,输出的h_res可直接传入MhcPost算子完成残差连接计算。 |