入门层 · 第 3 / 25 课

下一个词预测:模型唯一会的事

真权重交互 需下载 pythia-14m 权重 28.1MB(全站一次,之后复用) 建议 15–30 分钟

学完这课你能

  1. 理解语言模型的定义:输入 token 序列,输出词表上每个 token 作为「下一个」的概率分布。
  2. 理解 logits → softmax → 概率的流水线:softmax 如何放大赢家、保证和为 1。
  3. 建立「中间 6 层暂时当黑盒函数用」的体感(解剖层再拆开)。

盯着两排多米诺中间的空位:下一块该放哪张?你几乎不假思索就有答案。模型每时每刻都在玩这个游戏——读着上文,给每个候选 token 打分,等下一块落定。

两排黑色多米诺骨牌中间空出一格,一块橙色骨牌正落向空位
类比 空位等一块骨牌落定=模型读完上文,预测下一个 token

01完形填空

「床前明月___」——先别急着想答案,感受一下:你是不是几乎不假思索就接出了「光」?这种给上文补下文的能力,就是语言模型的全部工作:给它一串 token,它负责给「下一个 token 是什么」打分。没有对话、没有思考、没有规划,只有这一件事,重复亿万次。

你平时看到模型长篇大论,其实是把这一件事串起来反复做——那是第 4 课的主题。本课先把「做一次」看清楚。

02模型的输入输出

输入:一串整数(token id)。输出:一串分数——词表里 50304 个 token 每人一个,学术名叫 logits(逻辑值)。习惯上把「给定前文时下一个 token 的概率」记作条件概率,模型输出的就是这 50304 个候选的原始打分。

先记一个反直觉的点:这些分数还不是概率。要变成真正能读的概率分布,还差一步加工——是什么加工?往下看。

这排原始分离「概率」还差一步加工,但每个候选的胜算已经明码标价——像赛马开跑前,每匹马头顶都悬着一颗标明赔率的球,热门的那颗最大。

一排赛马在起跑闸后待发,每匹马头顶悬浮一颗大小不一的圆球,领跑热门头顶的橙色球最大
类比 马头顶的赔率球=50304 个候选的原始打分:球越大越热门

03logits 与 softmax

这一步加工叫 softmax,两步动作:先对每个分数取指数——指数放大会拉开差距,原本略高的分数被抬得高得多;再除以所有指数的总和——把一串正数归一成加起来恰好等于 1 的概率分布。赢家通吃,但输家也保留一点份额。

softmax 里还有一个耳熟的参数:温度(temperature)。它决定「放大差距」的力度——名字先记住,第 4 课亲手拧它。

上文 tokens 一串整数 模型 6 层 黑盒函数 logits 50304 个分 ÷ 温度 调差距 softmax 和为 1 top-k 条形图
结构 打分流水线:上文 → 模型 6 层 → 50304 个 logits → ÷温度 → softmax → top-k

04中间发生了什么

从 embedding 到 logits 之间,pythia-14m 还有 6 层计算。此刻你只需要把它当一个黑盒函数:进去是 128 维向量,出来还是 128 维向量,重复 6 次。它为什么这样设计、每一层在里面干什么,是解剖层(第 5–11 课)的全部内容——现在不必拆。

值得先说破的是体感:14M 参数的小模型,在你的浏览器里跑完这 6 层只要几毫秒——不靠服务器,不靠显卡,纯 JavaScript。下面你亲手点的每一次「预测」,都是一次完整真权重前向。

05怎么读概率

softmax 之后取前几名(top-k)画成条形图,你就能「看见」模型的想法:分布陡峭说明它很确定,平摊说明它在犹豫。问「法国的首都是」,它会自信地押「Paris」;换个它训练时没见过的开头,条形立刻变得支离破碎。

一个容易忽略的事实:无论你要它写多长,模型每一步都只多预测一个 token。「长回答」是一个词一个词接力出来的,不是一次算出来的。

交互实验:真权重 top-k 预测器

引擎加载中…

输入英文句(默认 The capital of France is),模型在你的浏览器里完成一次完整前向,输出 top-k 概率条形图。28.1MB 权重只在首次点击「预测」时下载,需你确认;全站共 9 课共用这份权重,不重复下载。

组件加载中…(真权重 top-5 预测器需要 JavaScript;权重在你点「预测」后才开始下载)