PyTorch 和 TensorFlow 里的张量广播,正在制造一批很难查的机器学习 bug。这是 Towards Data Science 一篇文章给出的判断,标题直接用了"毁掉你的模型"这样的措辞。
问题出在"静默"两个字上。形状不匹配时,广播机制不会报错,而是自动把小的那一维撑开,让运算照常跑完。代码不崩,损失曲线照常下降,错误被埋进结果里。
打开网易新闻 查看精彩图片
为什么这类 bug 特别难抓
普通报错会给你一个堆栈,告诉你哪一行炸了。广播引发的形状错误不给这个信号——它把错误消化成了一次合法的计算。你看到的是模型效果不对,不是代码跑不通。
排查方向因此被带偏。调参、换优化器、加数据,这些动作都做了,问题还在,因为根因在张量的维度对齐上,不在训练策略上。
打开网易新闻 查看精彩图片
PyTorch 和 TensorFlow 都躲不开
文章把这两个主流框架并列提出,说明这不是某一家的实现缺陷,而是广播这套规则本身带来的副作用。规则为了写起来方便,牺牲了对形状错误的敏感度。
对写模型的人来说,这意味着维度检查得自己补上。框架不会替你把关,它只负责把能算的算完。
热门跟贴