You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

2D张量与转置相乘未得到对称张量,该现象是否符合预期?

张量转置相乘后不满足allclose的原因

这是浮点数精度误差导致的预期现象,并非代码逻辑错误,核心原因如下:

  • 浮点数的有限精度限制:无论是CPU还是GPU默认使用的float32浮点数,都只有有限的有效位数。矩阵乘法包含大量乘法与累加运算,每一步都会引入微小的舍入误差。计算s = n @ n.T时的误差分布,和直接取s.T的误差分布无法完全对称,最终导致两个张量的对应元素存在极小差异。

  • 验证对称性的合理方式:不要仅依赖torch.allclose的默认阈值,可通过计算两个张量差值的最大绝对值,判断是否在浮点数精度允许的范围内:

    print((s - s.T).abs().max())
    

    输出结果通常在1e-5到1e-7量级(对应float32的精度),说明矩阵本质上是对称的,只是存在数值误差。

  • 调整allclose的阈值:如果一定要用torch.allclose验证,可以放宽相对误差(rtol)和绝对误差(atol)的阈值,适配浮点数的精度:

    print(torch.allclose(s, s.T, rtol=1e-5, atol=1e-8))
    

    此时通常会返回True。

从数学理论上,n @ n.T确实是对称矩阵,但实际数值计算中,浮点数的精度限制会导致无法做到完全精确的对称,这是数值计算中的常见现象。

内容的提问来源于stack exchange,提问作者Al Wonder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.27 23:05:07