Study Notes / 2026 ・ No.02

模型札记

绘画・视频・代码 ── 擅长的领域由什么决定

发布

同样是 Transformer 这一套底座

├─猜下一个词元──▶文字・代码 ├─猜被加上去的噪声──▶图像 └─猜时空上的噪声──▶视频

决定擅长领域的不是结构,而是让它去猜什么

会画画的模型、能生成视频的模型、擅长写代码的模型。
差别究竟从哪里来?分六章追下去。
原理的前提整理在第 1 期《LLM 札记》。

一

擅长由什么决定

CORE

这不是「聪明的模型/不聪明的模型」之分。真正起决定作用的是三点:让它猜什么、给它看什么,以及正确与否能不能由机器判定。

底座反而越来越一致

可能有些意外:如今主流的图像与视频模型,内部同样是 Transformer。把图像切成一个个小方块(patch),当成一串序列来处理,就能用上和文字一样的那台机器。所以「画画的模型」和「说话的模型」,从零件上看非常相似。

不同的是,让这台机器练了什么。

三个旋钮

① 目标 — 是猜下一个词,还是猜被加上去的噪声
② 数据 — 是文字,是图像与说明文的配对,是视频,还是代码与它的运行结果
③ 评分 — 对错能否由机器判定,还是只能依赖人的偏好
类型让它猜什么主要数据评分
语言下一个词元文本只有一部分能自动
代码下一个词元/填空代码、题目、运行结果自动 测试是否通过
图像被加上去的噪声图像+说明文的配对以人的偏好为主
视频时空上被加的噪声视频+说明文的配对以人的偏好为主

这张表最右边一列,几乎就等于进步的速度。能由机器评分的领域,不必等人,可以把练习跑上千万遍。代码和数学一路突飞猛进,原因基本就在这里。

二

会画画的模型

语言模型是从左到右一个词一个词地写,图像模型则是整张一起,从模糊走向清晰。这种方式叫扩散模型(diffusion)。

训练就是「猜出加了什么噪声」

它做的事,一行就说得完。

训练干净的图 ──(加噪声)──▶ 满是颗粒的图 └ 猜出加进去的噪声是哪些 ← 只练这一件事 生成纯噪声的图 ──▶ ──▶ ──▶ ──▶ 画面 └ 把猜到的噪声一点点减掉,重复几十次

正确答案(加进去的噪声)是自己造的,不需要人来标注。这和第 1 期里「答案就在数据里」是同一个格局。所以图像这边同样可以无限扩充数据。

为什么能用语言指挥

关键在于把文字和图像放进同一个坐标系。收集海量的「图像+说明文」配对,训练坐标使得对应的一组彼此靠近、不相干的一组彼此远离(对比学习,代表就是 CLIP)。

这个空间一旦建立,就能把「黄昏的港口」这句话变成一个向量,再以它为路标去减噪声。语言成了指引雕刻方向的罗盘。

POINT

决定成品质量的,其实也包括说明文的质量。比起只写「狗」的图片,连构图和光线都写清楚的图片,能把文字与画面的对应教得细致得多。

潜空间 — 直接处理像素太重

1024×1024 的像素直接算,成本撑不住。于是先用另一个网络把它压缩成长宽各约 1/8 的潜空间,在那里做扩散,最后再还原成图像。个人电脑能跑图像生成,靠的就是这一手。

为什么文字和手曾经画不好

扩散是不断堆叠「此处看起来像不像」的方式。只要局部说得过去,损失就会下降。可文字要求的是精确的排列,差一笔意思就坏了。手也一样,五根这种数量约束,靠局部的像不像是守不住的。

近年之所以改善,是因为把文字侧的编码器做大、把说明文的质量提上去、把模型本身做大。与其说机制变了,不如说是把资源投到了原本的短板上。

三

会做视频的模型

视频并不是「一串图片」。多出一个维度之后,难度的性质就变了。

难点① 量

512×512 的画面,每秒 24 帧,做 5 秒,要处理的信息量就超过单张图的一百倍。第 1 期・二章说的平方成本在这里照样发作,时长翻倍,算力远不止翻倍。能生成的长度常常停在几秒到十几秒,卡的就是这堵墙。

难点② 一致性

如果一帧一帧独立地画,下一瞬间就换了个人。于是要让注意力也在时间方向上打通:某一瞬间的画面,要参照前后帧的相同位置来决定。

图像模型高 × 宽之内互相参照 视频模型高 × 宽 × 时间之内互相参照

→ 看着「刚才衣服的颜色」「刚才走路的速度」决定下一帧

实现上,如今主流同样是把时空切成 patch、交给 Transformer 处理(DiT)。这样一来,语言模型上验证过的做大就会变好这条经验规律,在视频上也照样成立。

它并没有学过物理

这一点很容易误解:模型里并没有重力或流体的公式。它只是从海量影像中学到了「掉落的东西看起来是这样」「水是这样流的」这类外观上的规律。

所以常见场景自然得惊人,却会出现东西凭空消失、忽然变多、前后关系互换。像样是满足了,守恒却没有守住——这与第 1 期・四章的幻觉同根同源。

四

擅长代码的模型

CORE

代码之所以特别,不是因为它难,而是因为它可以被评分。跑得起来还是跑不起来,机器能判定。就这一点,拉开了与其他领域的差距。

① 运行结果就是答案

文章的好坏只能由人来定,代码却取决于测试是否通过。于是不必经过奖励模型(第 1 期・三章),可以直接拿正确与否当奖励来训练。不必等人的练习,直接换成了进步的速度。

② 填空式的练习

编辑器里的补全,光会「往下写」是不够的,得看着光标前后把中间补上。所以训练时会故意遮住中间一段,让它从上下文还原,这叫填空(fill-in-the-middle)。

前def total(items): s = 0 空 ?????????? 后 return s

→ 让它从前后还原出「for i in items: s += i」

③ 长上下文,以及上下文之外

真实项目里,用到的函数定义可能在几百行之外,甚至在别的文件里。光把上下文拉长还不够,必须配上去找出需要的文件再交给它的机制,才真正可用。第 1 期・六章的智能体,管的正是这一段。

④ 格式严苛,反而是优势

少一个括号就跑不起来的严苛,反过来说就是错误可以被机器识别。文章那种「总觉得怪」没法量,代码的「跑不了」却能量。能被评价的领域,改进就会不断累积。

五

怎么读懂意图

把「看起来理解了意图」的部分逐层拆开。先说结论:与其说是理解,不如说是条件化。

① 预训练时读过海量的「对话套路」

网络上有无数的提问与回答、咨询与建议、习题与讲解。在练习猜下一个词的过程中,「这样问,就该这样答」的套路本身被学了进去。

② 后训练让它站到回答者的位置上

裸模型甚至会用问题回应问题。用「指令+示范回答」的配对继续训练,再用人的评价打磨(第 1 期・三章)。到这一步,被问就回答的站位才固定下来。

③ 实际的推断 —— 给线索加权

从输入里能读出的,远多于字面写下的内容。

  • 用词与礼貌程度 ── 对方的位置,以及期望的距离感
  • 贴进来的代码是什么语言、什么框架 ── 默认的环境
  • 有没有专业术语 ── 该讲到多细
  • 此前的往来 ── 眼下正在做的是什么

注意力给这些线索加权,生成在这个上下文里最可能的下文。所谓「读懂意图」,实体就是这套加权。

RULE OF THUMB

所以没写出来的东西就不存在。含糊地丢过去,模型就会靠向「这样说话的人最常见的意图」。只补一行读者、目的、格式,结果就会不一样,道理正在于此。

④ 它会不会察觉含糊

近来的模型也学会了在前提不足时反问。但那与其说是「知道自己不知道」,不如说是反问能拿到更高的评价这一学习结果。别太指望它,自己把前提写清楚更稳妥。

六

怎么找出缺陷

找 bug 这件事,是由性质不同的三层叠起来才成立的。

第一层 典型形态的记忆

训练数据里含有大量公开仓库的修复提交:「坏掉的样子」和「修好的样子」成对排列。从中学到的是边界差一位、未检查的 null、忘记释放的资源、被吞掉的异常这类典型形态。

这属于知识型的检出,快,而且覆盖面广。

第二层 看语义上的错位

更接近人类评审的是这一层:把名字、注释、类型、调用方的预期与实际的处理放在一起对照。

// 返回四舍五入后的金额 function roundAmount(x) { return Math.floor(x); ← 注释与实现对不上 }

linter 只能说「floor 是个合法函数」。能抓到这里,是因为它把注释与代码放在同一段上下文里互相印证。

第三层 真的跑一遍

光读是有极限的。写测试跑一遍、复现报错、读栈追踪来收敛假设——第 1 期・六章的智能体承担的就是这一层。有了这道把猜测变成验证的工序,精度才够用。

擅长与不擅长

检出难度缺陷类型
易典型形态(边界差一位、未检查 null、资源未释放、异常被吞)
易注释、函数名、类型与实现之间的错位
中边界条件、错误处理缺失、输入校验遗漏
难并发竞争、依赖时序的问题
难成因在上下文之外的(配置、运行环境、调用方)

与静态分析的分工

linter 和类型检查是一套规则的集合:覆盖完整、可复现,但规则之外看不见。模型能抓到读一遍就明白的错位,却没有覆盖性,而且每次运行说法可能不同。

性质正好相反,所以现实的做法不是替换而是叠加:能机械衡量的交给静态分析,模型负责看「意图与实现之间的偏差」。

CAUTION

它也会给出看着很像回事的误报(第 1 期・四章)。实务上有三招能提高精度:只把 diff 交给它、要求每条意见附上对应行的引用、重要的用测试复现一遍。

结 — 一页总结

  1. 底座都在向 Transformer 靠拢。拉开差距的是让它猜什么与给它看什么。
  2. 图像练的是猜出加进去的噪声。之所以能用语言指挥,是因为把文字和画面放进了同一个坐标系。
  3. 视频多出一个维度,靠时间方向上的参照维持一致性,但它并没有学过物理。
  4. 代码进步快不是因为难,而是因为有测试这种自动评分。
  5. 对意图的理解是条件化。没写出来的就不存在,所以要写清读者、目的、格式。
  6. 缺陷检出是典型形态的记忆、语义错位、运行验证三层。
  7. 它与静态分析性质相反,不要替换,叠着用。

模型札记 — 全六章 / 2026.09

← 返回文章列表