锻造层 · 第 12 / 25 课 · 开始讲训练

预训练在算什么:损失与交叉熵

真计算 + 回放 演示盘 0 下载(回放曲线包 ~290KB 与第 16 课共用,进实验区才加载) 建议 15–30 分钟

学完这课你能

  1. 说清预训练的唯一任务:把「猜下一个词」这一件事,在整座语料山上重复亿万次。
  2. 会算交叉熵:loss = -log(正确 token 的概率),概率越低罚越重,对数让「自信地错」被重罚。
  3. 对训练 loss 曲线建立体感:它就是这条判分公式在亿万次重复上的平均,会读陡降段与磨蹭段。

想象一座射箭场:每支箭离靶心越远,扣分越狠——脱靶的箭几乎清零。模型的每一次预测都是一箭,靶心是那个真正出现的词,而「扣多少分」这张记分牌,就叫损失。

一面射箭靶,多支箭落点离靶心远近不一,靶旁挂着一排大小不等的扣分牌
类比 落点离靶心越远=预测概率越低,扣的分=loss 越大

01亿万次完形填空

第 3 课你看过了「做一次」:给模型一串 token,它给词表里 50304 个候选各打一个分,softmax 之后就是概率。预训练做的事没有任何玄机——把这一次判分,在整座语料山上重复亿万次。取一段文本,让模型猜下一个词,用「正确答案」判分,按分数微调权重,挪到下一段,再来。语料 × 判分 × 微调,循环到底,这就是全部。

「微调权重」这一步具体怎么改,是下一课反向传播的事;本课先把「判分」这一环看透——它决定模型朝着什么方向变好。

语料 整座文本山 切 token 按段取窗口 模型猜下一词 用当前权重 交叉熵判分 -log p loss 差多少 权重更新(下一课) 往扣分少的方向挪 改完权重,回到语料再来一遍
结构 训练闭环:语料 → 猜词 → 判分 → loss → 更新权重,循环亿万次

02判分规则:-log p

判分公式叫交叉熵,白话版只有一行:看模型给「正确词」的概率 p,罚 0 到 10 分上下——罚分 = -log p(自然对数)。概率 0.9,罚约 0.1 分;概率 0.01,罚约 4.6 分;概率 0.0001,罚约 9.2 分。取对数是个精明的选择:把「自信地错」变成重罪——你把正确词的分数压得越低,惩罚涨得越快。

先记住结论:答对了也可能被扣分,因为 p 从来不是 1。等会儿你亲手当一回模型,就能摸到这个手感的底线在哪。

判卷桌上一张答题卡,红笔把自信写错的一题圈得又粗又重,旁边小圈的一题只是轻微偏差
类比 红笔圈得最重的题=自信写错:概率给得越足,罚得越狠

03你来当一次模型

下面的实验台给了 5 道真题。每道题给一句上文和 6 个候选词——概率全部是从 pythia-14m 真实前向里导出的,不是编的。你点选一个你猜的词,实验台现场算出 -log p,扣分条应声落下。连做 5 题,平均分就是「你的交叉熵」。

值得玩味的是第 4、5 题:你明明知道正确答案,概率条却薄得可怜——14M 的小模型确实还没学会世界知识,正确答案只能拿到万分之几的概率。训练要填的坑,就是这些。

04从一道题到一条曲线

一次判分只是一个点,训练曲线上的一滴水。把亿万次扣分做滑动平均,再按训练步数画出来,就是你在论文里常见的那条「loss 曲线」。真曲线带着噪声——因为每一批题不一样,平均分自然上下抖——但大势一目了然。

读曲线有个窍门:开头陡降,是模型在学会高频搭配和固定格式,最容易摘的果子;后面越降越慢,是在抠长尾细节。实验台里那条可播放的曲线是一条真实训练记录(微模型,300 步),你可以拖着进度反复看这两个阶段。

05权重怎么被改

到目前为止,loss 只回答了「差多少」。它像裁判手里的记分牌——但记分牌本身不会教箭手射准。怎么把「差多少」翻译成「每颗参数往哪边调、调多少」,是反向传播的工作,下一课你就在浏览器里亲手训一只模型,看 loss 在你自己眼前掉下去。

一个容易忽略的事实:训练 loss 曲线是滑动平均。原始损失天生带噪,逐点不单调是正常现象——见到锯齿别慌,那是每一批题难度不同。

交互实验:你来当模型 + 真训练曲线回放

组件加载中…

组件一:5 道题的候选概率是从 pythia-14m 真实前向导出的真值(2026-10-14,本站引擎,词表 50304),你点选后扣分 -log p 由浏览器现场计算——不加载模型也能玩。组件二:训练曲线是微模型(3.5 万参数)真实离线训练的记录回放,数据来自 tools/study-phase2/gen-zoo.mjs(seed 42,2026-10-13),进本实验区才开始加载(~290KB,与第 16 课共用)。

组件加载中…(你来当模型 + 曲线回放需要 JavaScript;正文不受影响)