🧭 大模型的「怪脾气」:一张直觉地图
为什么 9.11>9.9?为什么感叹号没用?为什么拒绝后说服无效?——五个底层直觉,串起所有现象。
📚 本文目录
别背结论,看懂直觉
🎯 现象很多,原理很少
大模型有一堆「怪现象」:9.11 > 9.9、感叹号没用、重复两遍能提升、拒绝后说服没用……
但背后的底层原理其实只有几个。看懂直觉,就再也不用背现象。
🧭 这篇是一张地图
把现象归类到它们对应的底层机制:注意力 / Tokenizer / KV缓存 / 概率采样 / 语义激活。
每个直觉,解释一类现象。以后遇到新现象,你自己就能推出来。
直觉① 注意力:总量有限,会被稀释
⚖️ 注意力是「分蛋糕」
模型读每个词,都要把有限的注意力权重分给句子里所有词。
无关信息越多,真正重要的词分到的注意力就被稀释。
⚠️ 感叹号 ≠ 强调
指令后面加一堆 `!!!!`——它们只是大量低信息量的冗余 token,也在抢注意力。
结果:真正的指令被稀释,反而更不被重视。
所以:重复两遍 = 关键内容出现两次,注意力权重叠加,性能提升;重复五遍 = 大量冗余噪音占满注意力,关键信息被淹,性能下降。不是越多越好,而是「适度强化 + 避免噪音」。
直觉② Tokenizer:模型根本不「看字」
🔤 模型只见 token 编号
模型不认数字、不认字母,它只见一串 token 编号。
它没有人类「读字」「数数」的能力——一切判断都基于 token 序列和训练分布。
📦 子词切分
`strawberry` 会被切成 st/raw/berry 等子词,模型压根「看不到」单个字母 r。
所以它数不清几个 r——很正常。
直觉③ KV 缓存:每次都要重读全部上下文
♻️ 每次生成都重算上下文
每生成一个新 token,模型都要把前面所有 token 的注意力重算一遍(KV 矩阵)。
上下文越长,计算越大、越占窗口——这就是为什么要管理 context。
📐 拒绝后说服没用
模型拒绝 = 它在当前上下文里已经得出判断。
继续说服只是继续灌 token,不会改变它已固化的理解,反而浪费上下文和时间。
直觉④ 概率平了 → 随机
🎲 生成是「按概率采样」
模型每次从词表按概率采样挑一个 token。概率集中时输出稳定;概率很平时,挑哪个都差不多 → 看起来「随机」。
🌫️ 什么时候概率会平
输入模糊、低频、训练没覆盖时,模型把握低、概率摊平。
泛化差/过拟合的模型更明显——对陌生输入信心不足,只能「猜」。(温度调高也会更随机)
所以「随机回复」多来自 概率摊平 + 采样,本质是模型没见过、没把握,不是它故意乱来。
想让它稳:给足上下文、缩小任务、调低温度;想让它发散:调高温度、给开放任务。
直觉⑤ 语义激活:提到什么,激活什么
✨ 模型按「语义激活」生成
提到一个概念,就会激活它对应的语义表示,生成时更容易带出来。
「不要恐慌」会激活「恐慌」这个词的语义。
👍 正面 > 负面
所以正面写法更有效:「请保持冷静」直接激活「冷静」,比「不要慌张」(激活慌张)更好。
指令同理:强调「要做什么」优于「别做什么」。
总结:现象 → 原理 对照表
| 现象 | 🧭 底层直觉 |
|---|---|
| 感叹号稀释注意力 | 注意力总量有限,噪音抢权重 |
| 重复2遍提升、5遍降低 | 适度强化 vs 冗余噪音 |
| 9.11 > 9.9 | Tokenizer 不看数值大小 |
| strawberry 数错 r | 子词切分,看不到单字母 |
| 上下文越长越占资源 | KV 缓存每次重算 |
| 拒绝后说服无效 | 上下文判断已固化 |
| 随机回复 | 概率摊平 + 采样 |
| 正面指令更有效 | 语义激活 |
记住这张地图:遇到「怪现象」,先问自己——它属于注意力、Tokenizer、上下文、概率、语义里的哪一个?答案往往就出来了。
看懂五个底层直觉——注意力会稀释、模型不认字、上下文要管理、概率平了会随机、提到什么激活什么——大模型的所有「怪脾气」你都能自己推理出来,不用再背现象。
因为模型不是按数学大小比较的,它只看到 token 序列。9.9 和 9.11 被 Tokenizer 切成不同的 token,模型是基于训练分布给出一个“直觉”判断,它没有做数值运算的能力。所以这类问题别期待它有严格的数学直觉。
这跟注意力机制有关。重复两遍等于关键内容出现两次,注意力权重叠加,起到强化作用;重复太多就变成大量冗余噪音 token,它们也在抢占有限的注意力权重,把真正的指令稀释掉了。所以是“适度强化 + 避免噪音”。
因为模型是在当前上下文里得出判断的,它的理解已经固化了。继续说服只是往上下文里加更多 token,并不会改变它已有的判断,反而浪费上下文长度和计算资源。与其死缠,不如换一个角度重新组织问题,或补充它缺失的信息。