第 8 课那个模型只会吐一次分数:给一段前文,输出「下一个字」的概率分布。 它不会自己往后写一个字。要让它说话,得我们给它接一个循环:挑一个字 → 接到后面 → 再问一次,直到它吐出结束符。 这一课就把这个循环装起来,顺便把三个旋钮搞明白:温度(敢不敢冒险)、top-k / top-p(先砍掉长尾)、贪心(永远挑第一名)。 最后一站学一件更重要的事——诚实地评估。
先让它说一句话。下面就是那个循环:每点一下,它挑一个字接在后面。 三个旋钮随便拖,看结果怎么变。
页首那个模型不是 Transformer,而是从语料里数出来的「下一个字分布」: 看前一个字,数它在语料里后面接过谁。为什么要这么干?
好处是它可复现、每个数都能核对,而「温度 / top-k / top-p / 贪心」 这套解码机制一模一样 —— 换成真模型,只是把这张分布表换成模型吐出来的那张。 等第 14 课训出真模型,这个循环一个字都不用改。
第 8 课的最后一步吐出来的是 11 个候选字的分数。要挑一个字, 最直接的做法是永远挑最高的(贪心)——稳,但死板: 同一个问题永远同一个答案。
想让它灵活一点,就得按概率抽签。而抽签之前, 你可以先拧一个旋钮:温度。它的作用就一句话:把分布压尖(保守)或者抹平(冒险)。
T < 1 时,大的更大、小的更小(分布变尖);T > 1 时反过来(变平)。 注意它不改大小顺序:第一名永远是第一名,改的是「第二名还有多少机会」。
还有个更能说明问题的量:平均「抽中的那个字当时有多少概率」。 跑 8 遍取平均:T = 0.2 时是 41.3,T = 1.0 是 33.4, T = 2.0 是 30.4 —— 温度越高,抽中的字越冷门。
光有温度还不够:分布的长尾里总有几个概率很小但很离谱的字。 哪怕只有 0.5% 的概率抽到它,一旦抽中,整句话就毁了。 所以现代模型几乎都会先做一步截断:
模型能说话了,接下来的问题是:它到底行不行?这件事比看起来难 —— 一不小心就会骗到自己。 下面这张表是真跑出来的实测记录(第 7 阶段的训练), 考卷是「四种题型各 150 道」:
这两件事合起来就是这一课最值钱的一句话:分数是「模型 × 考卷」共同决定的。 所以看到任何分数之前,先问两个问题:考卷是怎么出的?分题型看是多少?
模型只做一件事:给前文,吐下一个字的分布。要它说话, 得我们自己接一个循环:挑一个字 → 接到后面 → 再问一次 → 直到吐出结束符。 「怎么挑」就是解码策略:贪心永远取第一名(稳、死板);采样按概率抽签(灵活、可能离谱);温度把分布压尖或抹平(只改形状不改顺序,T = 0.2 时最大一份 24.1%,T = 2 时 11.2%);top-k / top-p 先砍掉长尾再抽签(前者按个数、后者按概率质量), 砍完必须重新归一化。 最后是评估:分数是「模型 × 考卷」共同决定的 —— 必须分题型看(同一份训练里加法 99.3%、乘法 30.7%), 也必须交代考卷(换一张差 27.9 分)。