问题
你训练了一个模型,测试准确率99%。你很满意,准备部署。
但一个问题始终存在:它真的理解了规则,还是只是记住了训练数据?
更可怕的是:你无法区分这两者。直到它在真实场景中出错。
一个极简实验
我设计了一个最简单的任务来探究这个问题。
任务:区分四组输入
输入 类别
红方块 A
蓝圆 A
红圆 B
蓝方 B
关键设计:这个任务有一个隐藏的代数规则——多数投票。
什么意思?任意三个输入放在一起,出现次数多的类别获胜。
实验设置:
训练时只给模型看A类:红方块、蓝圆
测试时用B类:红圆、蓝方(模型从未见过)
结果:模型在测试集上达到100%准确率。
它从未见过B类,却能正确分类。它推理出了答案。
它是怎么做到的?
我分析了模型内部学到的“特征表示”。结果发现:
同类样本的特征非常接近(距离≈0.005)
异类样本的特征非常远离(距离≈1.04)
更关键的是,模型内部的运算完美实现了多数投票规则。
这意味着:模型自己发现了这个规则,并用它推演出了从未见过的B类。
对比实验:没有规则的数据
为了证明“规则”是关键,我做了另一个实验。
任务:随机数据,标签由第一个数字决定(>0.5为B,否则为A)。这个数据没有任何规则。
结果:
测试准确率:100%
但模型没有学会任何规则
为什么?因为当你测试“多数投票”时,结果不确定——有时输出A,有时输出B。模型只是在特征空间里画了一条线,并没有理解任何“规则”。
核心发现
有规则的数据 无规则的数据
测试准确率 100% 100%
是否真理解 ✅ 是 ❌ 否
同样的准确率,完全不同的“理解深度”。
测试准确率无法区分“真理解”和“死记硬背”。
怎么区分?
我提出了一套代数验证方法。
如果模型真正理解了规则,它应该满足三个基本性质:
对称性:交换输入顺序,输出不变
幂等性:三个相同输入,输出就是它自己
多数公理:两个A加一个B,输出A
检查这三个性质,就能判断模型是“真理解”还是“死记硬背”。
这有什么用?
诊断模型:部署前就知道模型是否可靠。
预测失败:不满足公理的模型,必然在对应场景下失败。
高效训练:对于有规则的任务,可以大幅减少训练数据(XOR实验只用了50%的数据)。
一个真实例子
自动驾驶模型判断“红灯是否停车”。
数据中大量是白天照片。模型测试准确率99%。
问题:它在黑夜会正确停车吗?
用你的方法:检查“白天/黑夜对称性”——白天红灯和黑夜红灯是否输出相同。
通过 → 模型真理解了“红色=停”
不通过 → 模型只是在记“白天+红色=停”,黑夜会闯红灯
你不需要等到车祸发生才知道问题。
局限
这套方法的前提是:你知道数据应该有什么对称性。
对于XOR任务,你知道交换颜色和形状应该不影响结果
对于红灯,你知道白天和黑夜应该不影响结果
对于医疗诊断,医生知道测量时间不应该影响结果
方法不能自动发现对称性,但能验证已知的对称性是否被模型学会。
总结
测试准确率告诉你模型“做对了”,但不能告诉你模型“理解了”。
代数验证可以。
如果你训练了一个模型,想知道它是真理解还是死记硬背,试试这套方法。
欢迎留言讨论