从高级语言的基本逻辑装置到图灵机的编译

(How if, and, or all collapse into 0/1 moves)

引子:if 从哪里来?

写过程序的人都熟悉这样的语句:

if x == 0:
y = 1
else:
y = 2

我们自然觉得,计算机理解 if 是天经地义的,这是最基本的条件逻辑。但问题来了:
一台图灵机,它只有三件法宝——读、写、左右移动,外加有限状态。它怎么“知道”什么是 if?

这里要讲的,就是如何把高级语言里的逻辑分叉,一层层剥皮,编译回图灵机最底层的“格子动作”。


图灵机的底层世界

图灵机的规则永远是:

在状态 q,读到符号 s
→ 把它改成 s′,移动一格(L/R),进入新状态 q′。

它并不会说:“判断条件是否成立”,它只会说:“读到 1 的时候去状态 q1;读到 0 的时候去状态 q0”。
所以 “条件分支”就是不同符号对应不同状态转移
换句话说,if 并不需要额外发明,而是状态表的天然功能


示例:二进制 +1 的分叉

还记得我们在课堂上手算二进制加法的进位逻辑吗?

    • 如果末位是 0 → 改成 1 → 停机。

    • 如果末位是 1 → 改成 0 → 继续向左传递进位。

    • 如果一路全是 1,直到最左边 → 在最左边补 1。

这就是一个标准的“if-else if-else”结构。

翻译到图灵机语言:

(q_carry, 1) → (q_carry, 0, L)   ; 读到1,写0,继续左移(传递进位)
(q_carry, 0) → (q_done, 1, R)    ; 读到0,写1,结束(停止进位)
(q_carry, □) → (q_done, 1, R)    ; 一路全是1,遇到空格,在最左补1

没有任何魔法,这三条转移就完成了 if … elif … else …
逻辑分支就是纸带上的“读符号分路”。


逻辑算子的编译套路(状态 × 符号 → 转移)

先记一个万能小模板(两行就够):

结果格 res:
res 是 1 → 走路线 A
res 是 0 → 走路线 B

所谓“编译逻辑”,就是先把条件算成一格上的 1/0,然后按这两行跳转。下面全用这套。


NOT(取反)

目标if not P: A else: B

  1. 先把 P 算出来,写到 res(1 表示“按 A 路走”,0 表示“按 B 路走”)。

  2. 对调去向

    • res 是 1 → 去 B

    • res 是 0 → 去 A

记忆:NOT = 把 A/B 的门对调一下

AND(与)

目标if P and Q: A else: B(带“短路”)

  1. 先算 P,写到 res。

  2. 在 res 处看一眼:

    • 0直接去 B(P 都没过,没必要看 Q)。

    • 1再去算 Q,把结果写回 res。

  3. 再按万能模板跳:

    • res 是 1 → A

    • res 是 0 → B

记忆:AND = 先看 P;P 过了才看 Q

OR(或)

目标if P or Q: A else: B(带“短路”)

  1. 先算 P,写到 res。

  2. 在 res 处看一眼:

    • 1直接去 A(已经满足,无需看 Q)。

    • 0再去算 Q,写回 res。

  3. 再按万能模板跳:

    • res 是 1 → A

    • res 是 0 → B

记忆:OR = 先看 P;P 不行才看 Q

复杂条件(一句话心法)

遇到“这一段有没有 0 且右边有没有 #”这类条件,做法只有一条:
边走边做记号(在几格上写下“看到 0”/“看到 #”的痕迹),走回“结果格”把答案写成 1/0,然后仍然用那两行万能模板跳转。


为什么这很重要?

if 到图灵机的转译,揭示了一个核心事实:

    • 逻辑分支不是天上掉下来的,而是有限状态机+符号匹配的自然结果。

    • 高级语言里的条件判断、布尔逻辑,本质上都是“在状态 q 读到符号 s 时,走哪条边”的不同画法。

    • 看似聪明的“if”,其实就是纸带与状态的组合——图灵机的基本循环。

这也解释了为什么一台看似简陋的图灵小机(只会 0/1、左/右)竟能归约任何高级程序。因为所有 if / else / and / or 都能在状态表里逐条落地。


小结:从哲学到工程的桥

    • 哲学上:if 是“分叉思维”的最小单元。

    • 工程上:if 在图灵机里就是“符号 + 状态 → 转移”的一条规则。

    • 历史上:图灵 1936 年用这张表,告诉世界计算的本质就是这种有限规则的无限展开。

所以,当你在 Python 里写下一行 if,不妨想象:
在底层,正有一只“图灵小蚂蚁”,在纸带上一格一格爬行,根据读到的是 0 还是 1,决定是左转、右转,还是停下来宣布:“我算完啦!”

尼克讲座第二弹:语言=思维=智能=计算=图灵机?

老友“尼克大师”《计算与智能的第一性原理》第二讲出来了(微信视频号没有URL外接链接,但进微信应该可以容易查到)——什么是计算?为什么说图灵定义了计算?为何计算机科学以他的理论为基石?笔记如下。


为什么是图灵?一场关于“计算”的趣味溯源之旅

TL;DR

我们今天谈“计算”,离不开 图灵:他给出了最简约的机器模型(图灵机),却能执行任何“有效的过程/计算”。哥德尔告诉我们形式系统有极限,丘奇/克里尼提供了等价的函数/λ演算刻画,Post画出了颇像汇编的指令系统;现代还有忙碌海狸、量子计算、类比计算这些挑战边界的故事。核心精髓一句话:图灵机——简单到近乎简陋,却普适到令人敬畏


1)图灵之前:群星闪耀的序幕

    • 哥德尔(1931):不完全性定理——再强大的形式系统也有真命题无法证明。
    • 他用的是原始递归函数,但不够大。后来引入了一般递归才覆盖更多。
    • Emil Post:天才又悲情。他设计的规则系统很像汇编+GOTO;提出的 Tag 系统 后来与 乔姆斯基层级对接。可惜因健康和际遇,多数成果未被重视。
    • Alonzo Church:提出 λ 演算克里尼证明它等价于递归函数。哥德尔却嫌它“不够原子化”。

出场的是图灵(1936)。
他把“人类拿纸笔计算”的动作抽象成一台极简机器:

    1. 一条纸带(无限);
    2. 一个读写头(0/1);
    3. 有限状态;
    4. 左/右移动。

就这四样。简单到骨子里,但却牢牢抓住了“计算”的本质。


2)丘奇–图灵论题(CTT):不是定理,却成共识

    • CTT:一切“有效可计算”的,都等价于图灵机。
    • 它不是定理,而是一种科学信念,因为“有效”这个直觉无法形式化证明。
    • 强版(ECT):任何合理模型都能多项式模拟彼此。量子计算正在这里“挤牙缝”。
图灵定边界:什么能算。复杂性理论吵个不停:算得快不快。

3)巨大数字 vs 微小机器

    • 高德纳的上箭头:↑是幂,↑↑是幂塔,↑↑↑是塔的塔……都还可计算。
    • 阿克曼函数:不是原始递归,但可计算。证明“原始”≠全部。
    • 忙碌海狸(Busy Beaver):能定义,但不可计算,增长比任何可计算函数都快。

教训:你能“定义”很多怪兽,但机器可能抓不住。


4)Post、乔姆斯基与“语言即思维”

    • 乔姆斯基文法层级:0 型 ≙ 图灵机,3 型 ≙ 有限自动机。
    • Post 的系统,其实就是粗糙的 0 型。
    • 从这里衍生出一个大胆推论:语言≈思维;既然语言有机对应机器类,或许思维≈计算

图灵测试(1950):把“智能”翻译成“能否在对话中骗过人类”。背后仍然是“机器是符号处理器”的预设。


5)量子、模拟与超计算的诱惑

    • 量子计算:在计算能力上没超出图灵机,但可能在效率上更快(如分解大数)。这冲击的只是强版 CTT。
    • 模拟/BSS 模型:在实数上算,数学优雅,物理却难落地。
    • 彭罗斯:人类意识非算法,可能与量子重力有关——充满想象,但无实验支持。
    • 李政道:或许世界本质上是离散的,“连续”只是近似。很契合图灵机那种“离散步骤”的宇宙观。

结论:有很多花样,但没有哪个能真正突破图灵机的“可计算性外延”。


6)人物轶事(冷知识版)

    • 哥德尔 & 爱因斯坦:常在普林斯顿散步。爱因斯坦说,他去高研院最大的乐趣是“和哥德尔一起散步”。
    • 图灵 19 岁手稿《Nature of Spirit》:因挚友去世而思考心灵与身体,预示他后来的机器智能设想。
    • Post 的叹息:他写信说,若自己在 1921 年就发表,也许就该是他证明不完全性。
    • 高德纳:除了 TeX,他还发明了“箭头记号”,专门用来描述“让计算器自爆的超大数”。
    • 冯诺依曼:称图灵机的普适性“绝对且无可救药的普适”。然后把它工业化,造出了冯氏结构计算机。

7)为什么 AI 总绕回图灵?

    • 工程:编译器、虚拟机、本质都是“一个形式模拟另一个形式”。
    • 理论:P vs NP 判定什么能有效算;忙碌海狸提醒我们,有些题目再聪明也无解。
    • 语言驱动的 AI:从早期语法分析到今天大模型,依然走在“语言—计算—智能”的桥上。

8)随身备忘单

    • CTT:有效计算 = 图灵可计算。
    • ECT:效率等价,多项式模拟;量子挑战。
    • Busy Beaver:能定义,不能算。
    • 乔姆斯基层级:语法 ↔ 自动机。
    • BSS 模型:实数域计算,物理难行。

9)精髓,一口气说完

图灵的伟大,不是把计算复杂化,而是把它简化到能涵盖一切。
0/1、左/右、读/写——这些微不足道的动作,却让哲学的直觉变成了能物理实现的机器蓝图。自此:

    • 数学能证明极限(哥德尔、不完全性、Busy Beaver);
    • 语言学能接上机器(乔姆斯基层级);
    • 工程能造出智能的雏形(计算机、AI)。

所以每当我们问“什么是智能”,答案常常就写在一条无限纸带上。

 

小科普:图灵机是怎么工作的?

图灵机是所有计算和AI的理论原点。它是什么,如何工作的呢?

1)开场:一支铅笔,一条纸带,一位年轻人

1936 年,一个 24 岁的年轻人叫阿兰·图灵。他没端出庞大的仪器,也没写密密麻麻的公式,只提出了一个简单到极致的主意:给我一条不限长的纸带,一个只会前后挪动的小脑袋,我就能把所有能算清楚的事,统统算清楚。

他这句话的意思是:计算到底是什么?计算就是最简单的重复动作——看一眼、改一下、挪一步、再看一眼……就像你做作业时,一边看草稿一边改正,慢慢把答案逼出来。


2)三件小道具

第一件:纸带
想象一条格子纸,往左往右都看不到尽头。每个格子里可以写“0”或“1”,也可以留空。它是记忆,更是历史:你做过什么,直接写在纸上,以后需要就走回去读。好比小学生做算术题用到的草稿纸。

小诀窍:把长记忆交给纸带,脑子里只关注“我正打算干嘛”。

第二件:读写头
这个小脑袋很倔强,一次只盯一个格子:
看一眼格子符号(读) → 把这个格子里的符号换一个(写) → 向左或向右挪一格(移)。它要能往回走(左移),因为很多事要“回头改作业”,比如加法里的进位

第三件:状态
“状态”不是多神秘的代码,而是行为的标识:比如“正在找分隔符”、“正在进位”、“准备收尾”。它有限,因为我们希望分而治之,保持步伐的小而稳定,真正复杂的东西全写在纸带上。

你可以把状态想成贴在额头上的便利贴:现在在第几步?下一步打算干嘛?

3)一段有画面的把戏:它真的会算

一元加法——“把隔板拿掉”

编码约定:用连续的 1 表示一个数,两数之间用 0 做分隔。
例:111011 表示 3 和 2。相加 = 拿掉中间那块隔板 0,两串 1 自然拼在一起:
结果 11111(5)。

直观比喻:像珠串中间卡着一块小木板,把木板拿走,左右两串珠子就合在一起了。


如果想把它写成一个更“图灵机味”的小程序,算法如下:

1. 扫到第一个 0写成空白(删除); 2. 把右边剩下的 1 逐个左移一格; 3. 遇到空白,停机。

4)图灵机为何“无所不能”?

表面看它很“简陋”:只有 0/1、左/右、有限状态。
但这恰好是不可再简的基本操作:

    • 复杂程序 = 许多“读/写/移/换状态”的微操作拼接;

    • 就像乐高只有几种基本积木,却能搭出宇宙飞船;

    • 高级语言、App、AI,最终都能被编译成这类微操作序列。

这就是图灵机的伟大:用最少的组件,刻画了一切可计算的过程边界。


5)纸带=外部记忆,怎么用?

就三招:

    • 分区:用一个特殊记号(比如 #)把纸带分成“输入区 / 工作区 / 输出区”。
    • 标记:处理过的符号改成 X,像在书上打勾,提醒自己“这堆我做过了”。
    • 来回跑:遇到需要回头的步骤,靠左移/右移回到某个“锚点”,继续下一轮。

复杂算法,就是分区 + 标记 + 来回的组合拳。


6)几个问题,三句就答完

Q:图灵机靠谱吗,能造出来吗?
A:当然能。你可以用打孔卡当纸带、用磁头/激光头当读写头、用一小块电路板当“状态控制器”。每一步都是机械工作:读、写、挪、下一步换状态)。所以图灵机是理论,更是能动起来的工程原型。归约下来,现代计算机无不如此。

Q:为什么要“无限纸带”?
A:不是要你真的用无限,而是不设上限。任何会在有限时间内结束的计算,只用到有限片段。

Q:状态多吗?难吗?
A:状态是“步骤标签”。够用就好,必须有限。长记忆写在纸上,别塞脑子里。

Q:它真的比现代电脑弱吗?
A:不。可计算的范围一样大;差别在速度和舒适度。现代电脑只是跑得更快、更好用。

Q:每条规则都是格式固定步骤吗?
A:对。一条规则完成“读当前格→在同一格写→移动一格→切换状态”这一整步。条件:当前状态 q、当前符号 s;结果:新状态 q'、写入 s'、移动方向 L/R。数学上写成:δ(q, s) = (q', s', d)


7)为什么图灵机改变了世界?

    • 它把“能算”这件事画出了边界:有些问题能做,有些(比如“忙碌海狸”)可以定义但不可计算
    • 它暗示现代计算机的灵魂:把程序也当数据写在纸带上,机器读程序就能换一身本事——这就是“存储程序”的思想。
    • 它告诉我们:复杂从简单长出来。不必造一台复杂怪兽,先把最小的执行步骤钉死,一切复杂性都能由此建起。

8)给好奇心的一次“街头实验”

找一条格子纸,写上 1 0 1 1,在右边留几格空白。
拿一支笔当“读写头”,按这个小规则走:
1)先走到最右空白;
2)往左走:遇到 10;遇到 01 并停;
3)如果一路全是 1,就在最左边补一个 1
你会亲眼看到:进位不是魔法,是“回头、改一格、再走”的朴素力气活。

 

 

 

Multimodal tokens and the Case for Unified Modeling

Advocates of “unified” models argue that the many signals of the world—text, images, audio, video—should be tokenized and mapped into the same semantic field (a shared hidden vector space), so they can be trained jointly and modeled with one brain.

A common recipe is to atomize other modalities the way we do text: turn them into token sequences so that sequence learning—the secret sauce behind LLMs' explosive success—can extend beyond text. Universal tokens lay the groundwork for this extension. Once text, images, audio, and video are all sliced into computable tokens of similar type, one step remains: make them play in the same band (for training and for generation).

The most straightforward trick is to give each instrument a passport. Before entering the model, every segment carries a modality tag—special start symbols telling the conductor whether the next stretch is image tokens, audio tokens, or text (e.g., <image>, <audio>). Positional encodings then act like a seating chart, indicating how these tokens are arranged in a sentence, on an image grid, or along a timeline. After a few rounds of training, the model internalizes these hints: look at pixels when needed, listen when needed, and weave everything into a coherent narrative when it speaks.

A deeper level of fusion is handled by attention. Think of attention as a rehearsal room with glass walls: text can “glance” at image tokens and images can “nod back.” Over time, some heads specialize in image–image relations, others in image–text translation. Flamingo makes this explicit: cross-modal attention layers are inserted between LLM layers so that the word currently being generated can continually “look back” at the relevant image region. To users this appears as abilities for things like step-by-step visual Q&A; under the hood, a stream of text tokens moves forward while aiming its attention at precisely the visual patches that matter.

In engineering practice, a common compromise is front-end experts first, then merge. PaLM-E in robotics is a good example: images are first distilled by a pretrained vision encoder (e.g., ViT) into compact representations, then projected into perception tokens; text is tokenized as usual; robot state vectors can be appended when needed. With appropriate modality tags, all of these enter a shared Transformer backbone, where dialog, reasoning, and decision-making happen on a single score. In this analogy the front end acts like a pickup: it cleans and compresses raw signals.

More concretely: the “pickup” is a modality-specific encoder (ViT for images, an acoustic encoder for speech, etc.). The “front end” consists of the pickup plus a small projection/adapter that turns features into tokens the backbone can digest. The “backbone” is the unified Transformer that handles cross-modal alignment, long-range memory, and reasoning. In short, the backbone processes music, not the raw electrical currents of each microphone. It doesn’t touch pixels or raw waveforms; it ingests track-like, distilled features produced by the front end and aligns/reasons over them. Redundant detail and noise are filtered at the front; during generation, pixel-level detail is filled back in by a diffusion renderer or a decoder according to the backbone’s plan.

For instance, a 224×224 image has over 150k pixels. If you hand all of them to the backbone, attention wastes budget on repetitive textures. A ViT-style pickup patches, encodes, and compresses the image into roughly a couple hundred visual tokens—each like a short riff, concentrating edges, shapes, and relations that matter for understanding. Audio is similar: raw 16 kHz samples are first converted to tens or hundreds of latent vectors; rhythm and timbre are distilled, while noise and redundancy are filtered. The backbone consumes these high-semantic-density tokens (i.e., semantic tokens), so compute is lighter and crucial information remains intact. When trained end-to-end, gradients from the backbone flow back to the front end, encouraging it to keep what matters for downstream generation and discard redundancy.

Those few, information-dense tokens inside the backbone don’t carry pixel-level detail. Detail returns through a wider channel on the rendering side during generation. The backbone sets the plan; the renderer does the fine work. Three practical stages or approaches are popular in generation.

1) Composition → Orchestration. The front end is paired with a decoder: the encoder compresses content into compact codes (discrete codewords/tokens or low-dimensional latents), and the decoder can reconstruct pixels. At generation time, the backbone predicts/plans decodable representations—a string of  codes or a per-frame latent vector—rather than pixels. The decoder then “orchestrates” texture, light, and materials from those codes. In image/video, the VQ-VAE/MAGVIT-type follows this predict-codes → decode path. With residual vector quantization (RVQ), detail is added coarse-to-fine: the backbone first emits higher-level codes; the renderer produces a solid base; lower-level residual codes then refine it layer by layer.

2) Storyboard → Cinematography. The backbone provides structural plans—a low-res sketch (blueprint), motion hints/optical flow, keypoints, or a camera trajectory. Each frame is then handed to in-frame diffusion (latent-space rendering) to “develop” the image from noise under those conditions. Diffusion doesn’t need the backbone to carry high-frequency detail; it iteratively reveals detail in a high-res latent space. This is the “next-frame prediction + in-frame diffusion” split: temporal coherence by the backbone, visual richness by diffusion.

3) From coarse to fine. The backbone first outputs a coarse result—low resolution or higher-level codes—then the rendering stack applies super-resolution (SR) and residual refinement to stack up resolution and texture. The farther down the pipeline, the wider the bandwidth, but this bandwidth is handled on the rendering side rather than bloating the backbone with pixel-long sequences. Many systems expose these as configurable quality gears: stop at 720p if the user is in a rush, or climb to 1080p/4K when desired.

One subtlety: the backbone does not simply “discard detail.” First, in joint end-to-end training, the front end and decoder co-adapt with the backbone so that what’s “compressed away” is true redundancy, while cues crucial for generation (edges, materials, style, rhythm) are preserved in a recoverable latent space. Second, many renderers look back at multi-scale front-end features (e.g., via U-Net skip connections or cross-attention during decoding), allowing them to query high-bandwidth details on demand—without hauling them through the backbone.

How the renderer “looks back” depends on the task:

    • From-scratch generation (text-to-image/video): there’s no high-res reference to query. The renderer relies on learned statistics to “hallucinate” detail from the backbone’s directional plan; the text front end builds latents during training but typically isn’t invoked during sampling in generation.

    • Conditional generation/editing (image-to-image, inpainting, colorization, video continuation, style transfer): the renderer does “look back.” The reference image or previous frame is encoded to multi-scale features; the decoder/diffusion network uses skip connections or cross-attention to pull in high-res cues, aligning edges, textures, and brushwork precisely.

In the autoencoder/vector-quantization track, encoder and decoder are two sides of the same coin: the encoder compresses images/video into a shared latent language; the decoder restores pixels from latents/codes. They are trained around the same latent interface with opposite roles, by two networks that translate the same latent language. Whether the encoder is used at generation time depends on the task: unconditional generation needs only the decoder; conditional/editing and video consistency bring the encoder back to supply high-res detail.

Put together, the pipeline is clear: the backbone sets the plan—semantic coherence and causal logic—without hauling pixels across long distances; the renderer does the fine work; it looks back when a reference exists, and otherwise lets diffusion “develop” detail locally. Decoding, diffusion, and super-resolution are the high-bandwidth back end that rebuilds the scene in place. Encoder and decoder share a latent interface, each doing its half of the job—two sides of the same coin.

谈谈大一统模型的万象token与统一建模的背后

面对大千世界的各种模态的信号流,主张大一统模型的研究者强调的是把信号流切片token化,分别映射到模型内部的同一个“语义场”(多维向量空间)去做联合训练、统一建模。

常见的做法是把其他模态像文本一样元素化成token序列,以便一体化进行序列学习。序列学习是大语言模型(LLM)的成功秘诀。万象token就为“序列学习”向多模态的拓展夯实了基础。当文字、图像、音频、视频都被切分成可计算的 token 之后,还差最后一步:让它们在同一支乐队里合奏(训练与生成)。最朴素的做法,是给不同乐器发护照。进入模型之前,每段输入都带上自己的“标签”——几个特殊的起始符号,告诉总指挥接下来要演奏的是图像、还是音频、还是文字。比如在序列前插入特殊标记 <image> 或 <audio> 来提示模型接下来的是图像token或音频token。位置编码则像排座表,标明这几个 token 在句子里、在画面里、在时间里的相对关系。经过几轮训练,模型自然学会了这些标签的含义:该看图时看图,该听音时听音,叙述时再把它们粘合成连贯的一段话。

更高一层的融合,靠的是注意力。注意力像一间开着玻璃门的排练厅,文字能朝图像那边投去目光,图像也能回以点头;久而久之,某些注意力头专门处理“图对图”的联系,另一些头则擅长“图对文”的翻译。Flamingo 把这件事讲得明白:在语言模型的层间插入跨模态注意,让“正在写的那个词”随时能回望它要描述的那一块图像。读者在现实里看到的,是对一张图的循序追问与回答;模型内部发生的,是一串文字 token 一边向前写,一边把注意力投向最相关的视觉片段。

工程上常见一条折中路径:先让前端的“行家里手”各自把关,再汇入总谱。以谷歌在机器人方向的 PaLM-E 为例,图像先交给预训练视觉编码器(如 ViT)提炼成紧凑表征,经投影变成“感知 token”;文本照常token化嵌入;必要时再拼上机器人的状态向量。它们带着各自的“标签”一起进入同一主干的 Transformer,对话、推理、决策在一条大谱子上完成。前端好比拾音器, 负责对原始信号整理压缩。

具体而言,“拾音器”指各模态的专用编码器(图像的 ViT、语音的声学编码器等);“前端”是拾音器加一层小小的投影/适配,把特征变成主干能消化的语义 token;“主干”就是那台统一的 Transformer,总负责跨模态对齐、长程记忆与推理。这样一来,主干“拿到的是乐曲”,而不是“每个麦克风的原始电流”。主干 Transformer 就像“总指挥兼编曲”:它不直接处理像素和原始声波,而是接收各模态前端已经提炼好的“音轨式”表征,在同一张谱面上做对齐、记忆和推理。冗余的原始细节与噪声被前端挡下。在生成时像素级的细节由扩散或解码器按主干给出的计划“回填”出来。

例如,一张 224×224 的图片有十五万多个像素,如果把它们全丢给主干,注意力会在海量重复纹理里打转;ViT 这样的“拾音器”先把图像切块、编码、压成大约200个视觉 token,每个 token 像一小段旋律,里头保留了边缘、形状、关系这些对理解最有用的信号。音频也是同理:原始的 16k 采样会先变成几十上百帧的梅尔特征或潜向量,节奏与音色被提炼出来,底噪与冗余被过滤掉。主干处理的,正是这些“语义更浓”的 token(semantic token,指密度高、可供主干推理的表示),既轻了计算,又不丢关键信息。在端到端联合训练里,主干的梯度会回到前端,促使前端把“该保的细节”保住,“该省的冗余”省掉。

主干里那些“少而精”的语义 token,不背像素级细节——细节是靠另一条更宽的通道在生成阶段“回填”进来的。常见有三种做法,思路都很朴素:主干定纲领,渲染器出细活

第一种像“作曲—配器”。前端不是只进不出,它和解码器是成对训练的:编码把画面压成紧凑表示(离散码字和潜向量),解码能把它还原回像素世界。到生成时,主干并不搬运像素,而是预测/规划那些可还原的表示——比如一串 token、或一帧的低维潜向量。解码器据此“配器”,把纹理、光影、材质逐步展开。咱们可以把主干理解成“决定用哪组和弦与节奏”,解码器则把它演成真实的声音与质感。图像/视频里的主流路线(自编码器/向量量化这一路,VQ-VAE、MAGVIT 等),都是靠“预测可解码的表示→解码还原”把细节接回来的。多级量化采用“先粗后细”的回填方式:主干先给上层码字(上层码本的token),渲染器先出个八成像的底,再按下层“残差”码字把细节一层层补齐。

第二种像“分镜—摄影”。主干只给出低清草图或结构计划:布局、光流、关键点、相机走位之类;然后把每一帧交给帧内扩散或潜空间渲染器去“冲洗”。扩散模型不需要主干携带所有细节,它从噪声出发,在条件的引导下把细节一层层显出来;主干提供的条件是朝向约束(我是谁、往哪儿动、镜头怎么走),细节由渲染器在高分辨潜空间里补足。这就是我们前面说的“下一帧预测 + 帧内扩散”:时间连贯归主干,质感细节归扩散。

第三种像是“粗到细的制版流水线”。主干先把低分辨粗粒度的表示接出来;随后一层层超分(超分辨率/SR,super resoltion)、补残差,把分辨率与纹理往上叠。越往后,通道越“宽”,带宽主要花在渲染头上,而不是让主干背负长到爆炸的像素序列。很多系统会把这几级做成可选挡位:来不及就先到 720p,有时间再“加一档”到 1080p/4K。

这里还有个常被忽略的小细节:主干并不是一刀切地“丢掉细节”。一方面,前端/解码器常与主干联合训练,梯度会推动前端只“压掉冗余”,而把对下游生成最要紧的线索(边缘、材质、风格、节奏)保在可还原的潜空间里;另一方面,很多渲染器会在末端回看前端的多尺度特征(像 U-Net 的跳连、或解码时的跨注意力),需要时还能跨注意力去“查询”那批高带宽特征,而不必把它们全搬到主干里当行李。

具体说来,渲染时是否和如何查询前端的高分辨细节,要分两种情况:

如果是从零生成(文生图、文生视频),没有可参照的高分辨输入,渲染器就不会去“查前端”。它靠训练时学到的统计规律,把主干给的计划“脑补”成可信的纹理与光影;这时文本“前端”只是用来建潜向量的编码器,采样阶段并不参与。

条件生成/编辑时(例如图生图、修复、上色、视频续帧、风格迁移等),渲染器确实会“回看前端”:把参考图像或上一帧先过一遍编码器,得到多尺度特征,再让解码/扩散网络在每一层通过跳连跨注意力去取这些高分辨线索,精确对齐边缘、纹理、笔触。这样细节被“就地取材”,不需要搬入主干长期背着。

在主流自编码器/向量量化这一路上,编码和解码是一枚硬币的两面:编码器把图像/视频压进一个共同的潜空间,解码器把潜向量/码字还原回像素,它们围绕同一套内部潜表征协同训练,接口一致、职责相反;但它们不是同一组权重的逆运算,而是两套网络学会“翻译同一种潜语言”。到了生成时,是否用到编码器取决于任务:无条件生成只用到解码器,有参照的编辑/视频一致性才会把编码器也拉进来做“高分细节的供给”。

把这几条合在一起看,过程就清楚了:主干定纲领,专注于语义连贯与因果逻辑,细节不在主干里长途跋涉;渲染器出细活;有参照就“回看前端”,没参照就靠扩散显影,由解码/扩散/超分这些高带宽“后端”在本地重建。编码与解码共享同一内部潜表示,各司其职、同币异面。

老马的共产主义宣言

说的是马斯克,不是马克思,但宗旨一样,世界大同,全民富足。

引言

自特斯拉成立以来,我们每一轮的宏图计划都聚焦于我们的北极星目标:以毫不妥协的方式实现不受约束的可持续性。

人类是工具的制造者。在特斯拉,我们大规模地制造低成本物理产品,目标是让每个人的生活更美好。随着人工智能(AI)技术的影响力和作用日益增强,宏图计划第四篇章所阐述的使命也就不足为奇了。

特斯拉故事的下一篇章将帮助创建一个我们才刚刚开始想象的世界,并以我们前所未见的规模实现。我们正在构建将人工智能带入物理世界的产品和服务。

通过开发电动汽车、能源产品和仿人机器人,我们近二十年来不懈努力,为这场技术复兴奠定了基础。

现在,我们正将制造能力与自主技术相结合,提供新的产品和服务,以加速全球繁荣和人类福祉,推动所有人共享的经济增长。我们正在大规模地统一硬件和软件,并以此创建一个更安全、更清洁、更愉悦的世界。

这就是可持续的富足。

指导原则

增长是无限的:一个领域的增长无需以另一个领域的衰退为代价。资源短缺可以通过改进技术、更大的创新和新想法来弥补。

创新消除约束:持续的创新帮助我们克服了电池开发的技术限制,并建立了一个由可再生资源驱动的行业。

技术解决实际问题:加速走向可持续富足所产生的产品和服务,将通过解决现实世界的问题来推动人类进步。

自主性必须造福全人类:我们开发和使用自主技术的方式,以及它为我们带来的新能力,应以其提升人类状况的能力为依据。

更广泛的访问驱动更大的增长:制造技术先进、价格合理且可大规模获得的产品,是建设繁荣和不受约束社会的要求。

加速世界向可持续富足的转变
这项挑战极其困难。消除稀缺需要不懈和精妙的执行。有些人会认为这是不可能的。而我们一旦克服了这个挑战,批评者就会看到,他们曾经认为不可能的事情确实是可能的。

我们值得为之付出的旅程都是漫长的,并且都始于第一步。我们的第一步是制造一款令人兴奋的跑车——Roadster。然后我们利用这些利润资助开发和生产更实惠、但仍然令人兴奋的产品——Model S 和 Model X。然后我们重复这个过程,带来了 Model 3 和 Model Y 并继续前进。

今天,我们正处在一个革命性时期的风口浪尖,为前所未有的增长做好了准备。这一次,对特斯拉和整个人类来说,这都不是一步,而是一个飞跃。

简要解读:特斯拉的“星辰大海”与“画饼艺术”

特斯拉的宏图计划第四篇章(Master Plan Part 4)不再满足于仅仅让你开上电动车,它打算彻底改变你的生活、工作甚至整个星球的运作方式!说白了,特斯拉想从一家电动车公司升级为“拯救地球的AI物理世界解决方案公司”。

核心目标:可持续的富足 (Sustainable Abundance)
这听起来有点像乌托邦口号,意思是特斯拉要通过技术手段,让所有人都能过上资源充裕、环保且高质量的生活,而不用担心资源耗尽或环境破坏。

三大支柱:不只是造车了!
电动汽车 (EVs):这是特斯拉的老本行,但在新计划中更像是“基础操作”,而不是终极目标。

能源产品:包括太阳能和大型电池存储,旨在让清洁电力的获取更便宜、更可靠。

人形机器人 (Optimus):这是新计划的真正明星!特斯拉设想这些机器人能接管那些单调或危险的工作,从而把人类解放出来,去做更有创造性和更喜欢的事情。埃隆·马斯克甚至声称,特斯拉未来80%的价值可能来自Optimus机器人。

画风突变与外界吐槽
“饼”画得又大又圆,但细节呢?:相比前两个步骤清晰、目标明确的宏图计划(第一步:造豪华跑车赚有钱人的钱 -> 第二步:用赚的钱造更便宜的车 -> 第三步:用赚的钱造大众市场车型),第四篇章被不少分析师和媒体吐槽缺乏具体细节和可衡量的目标。有人觉得它读起来像是由AI生成的充满华丽辞藻的宣言。

“电动车已非主角”:新计划中关于AI和机器人的篇幅远远超过电动车。这让人怀疑,在电动车业务面临销售压力和激烈竞争之际,特斯拉是否在转移视线,将故事焦点转向更遥远的“诗和远方”。

“马斯克的野望”:计划强烈反映了马斯克对AI和自动化的极致推崇。在他看来,经济增长没有上限,技术能解决一切资源约束。但这其中关于自动化取代人力带来的社会影响(如就业问题),计划并未深入探讨。

总结一下

所以,特斯拉的宏图计划第四篇章,可以看作是一份充满未来感、野心勃勃的“宣言书”,它描绘了一个由特斯拉技术驱动的、富足且可持续的未来世界。

然而,它也像是一份 “概念菜单” ,上面列出了许多令人垂涎的“大菜”,但有些菜还处在“研发中”或“想象阶段”,何时能真正“上菜”、味道如何,还需要时间和大量技术突破来验证。

 

Master Plan Part IV

 

Neural Codec: Key Audio Techniques in the LLM Era

“Codec” is short for coder–decoder: an end-to-end machine for compressing and then restoring audio. The encoder compressess a signal into a more compact representation; the decoder reconstructs it as faithfully as possible.

In the LLM era, audio—like text—is often cut into short segments and encoded as a sequence of discrete tokens. The “audio dictionary” used for quantization is called a codebook, like a spice rack in a kitchen: discrete little vectors in separate slots, each with an index. Unlike text, which typically has a single vocabulary, neural audio coding often uses several codebooks at the same time step (audio unit), quantizing from coarse to fine in layers—a scheme known as RVQ (Residual Vector Quantization). During compression, the system picks one entry from each codebook, using their indices to “remember” that instant of sound in layers; during reconstruction, the vectors addressed by those indices are summed, layer by layer, to restore and refill the flavor.

Earlier TTS pipelines typically did “Mel-spectrogram draft” (a continuous-valued “score”) → a neural vocoder that plays it back into waveform. The LLM-native neural codec more often runs “semantic tokens → acoustic tokens → decode to waveform.” Both semantic tokens and acoustic tokens are discrete; they differ in granularity and division of labor.

Multi-layer token coding via RVQ is a key innovation for extending LLM methods to audio. Without it, token counts would explode. By its nature, layering simplifies the complex—divide and conquer. It’s an innovation in representation that pushes discretization all the way through.

“How many layers?” There’s no universal number. It’s a knob you turn together with bitrate, latency, and quality targets. Take Google’s SoundStream: it refines the same time step with residual quantization. The paper reports common 4/8/16-layer setups and even an extreme 80-layer experiment, showing training can remain stable with many layers. For a fixed target bitrate, you can trade fewer layers with larger codebooks against more layers with smaller ones—the design space is flexible.

Meta’s EnCodec follows a “multi-codebook, variable-bandwidth” approach: the 24 kHz model uses up to 32 codebooks (i.e., 32 RVQ layers), the 48 kHz model up to 16, with codebooks typically of size 1024. During training, it randomly selects a subset of layers to participate in quantization, so a single set of weights can serve 1.5/3/6/12/24 kbps, etc. In deployment you simply “open” as many layers as you need, striking a balance between quality and realtime latency.

Don’t confuse “number of layers” with “hierarchical scales.” OpenAI’s Jukebox uses three time-scale levels in a VQ-VAE: the top level is sparse, the bottom dense, carrying information from long-range song structure down to timbral details. That’s “horizontal” stratification over time, not stacking multiple residual quantizers at the same time step.

A rule of thumb: for realtime, low-latency speech, 4–16 layers are common; for music or higher fidelity at 24 kHz, a few dozen layers aren’t unusual. The final choice isn’t doctrinaire—it depends on your target bitrate, acceptable latency, and how exacting the ear is about texture.

A neural codec begins with a neural encoder that massages raw waveforms into compact latent vectors; then a quantizer selects entries from the layered codebooks—coarse strokes for contour, finer strokes for texture; finally a neural decoder turns these discrete entries back into an audible waveform. The whole chain is trained end to end, aiming to tell the ear what it cares about—timbre, prosody, articulation, even a touch of room tail—using as few indices as possible. The result is a stable, reversible, bitrate-tunable discrete sequence.

In this setup, “audio tokens” are the indices themselves. Every few tens of milliseconds, the quantizer picks a set of indices from the layered codebooks to describe that slice; over time you obtain a readable, writable “acoustic text.” This differs from the traditional Mel spectrogram: the Mel is a continuous “photo” better suited to a conventional neural vocoder; audio tokens are a discrete “word string” that can both decode back to high-fidelity waveforms and be continued, edited, and aligned by GPT-style autoregressive models like text.

In one line: a codec is the whole compress–restore machine; the codebook is just the rack holding the discrete basis vectors—what counts as tokens are their indices. A neural codec rebuilds this machine with neural networks so it can describe a sound using a string of discrete tokens and, when needed, sing that string back into real speech or music. Put simply, audio processing can now reuse the compression–and–reconstruction playbook that has proven so powerful for text LLMs—that’s the secret behind audio’s takeoff in the era of large models.

Breakthroughs in Speech Technology in the Era of Large Models: Ultra-Realism and Full Duplex

As large language models (LLMs) expand into audio, progress has been breathtaking. “LLM-native” speech technology reached practical maturity roughly half a year ago, and the entire industry has surged forward. Two features mark this maturity: ultra-realistic speech and full-duplex interaction.

Audio tokenization—akin to what we do with text—has not only produced “model musicians” (Suno is the signature product here; I’ll cover it in a separate tech blog), but more importantly, it has catalyzed two changes that truly transform language interaction: ultra-realistic speech synthesis, and natural conversations where the system can listen and speak at the same time and be interrupted at any moment—that is, full duplex.

Start with ultra-realism. Old-school TTS always sounded like a well-trained announcer—articulate and polished, yet lacking the grain and personality of everyday speech. Once neural codec manages speech into reversible discrete tokens, synthesis no longer “reads out” only the text/content; it can also faithfully reproduce the manner of speaking, hence everyday, down-to-earth speech made possible. The model first drafts a sketch in the space of “speech semantics”: where to take a breath, when to lower the voice, which word should gently rise. It then renders that as a string of audio tokens, and the decoder brings out the breath, sibilants, and the room’s tail reverberation. You can hear the rasp in a voice, the faint nasal smile, and even preserve a speaker’s “vocal persona” across languages. Interaction no longer has a one-size-fits-all voice; it feels like chatting with a neighbor or a friend. The difference from the pre-LLM era lives in those micro-textures carried by the layered discrete codes (tokens).

Now full duplex. Early voice assistants were like walkie-talkies: you speak, then they speak, taking turns. Natural conversation is more like a kitchen scene: you’re chopping vegetables, a friend reminds you to preheat the oven, you cut in—“wait, let’s halve the salt first”—and your friend immediately pivots and responds to the new instruction. Achieving that natural feel looks like an interaction design problem (“interruptible,” “barge-in”), but underneath it requires three things working in concert: continuous listening—streaming the incoming speech into tokens in real time; speaking while listening—generating its own audio tokens ready to speak out while always keeping room to brake; and low-latency understanding and revision—completing the loop of listen → update plan → change what it says in a few hundred milliseconds.

Neural codecs shine again here: by turning both what is heard and what will be said into the same kind of discrete sequence (token string), the model can read and write on the same timeline, managing turn-taking like a human in natural conversation.

These two advances are not isolated. The more ultra-realistic the synthesis, the more the token stream must explicitly encode pauses, stress, laughter, and other details. The smoother the full duplex, the more it relies on a stable, dense, and compact flow of audio tokens so the model can switch course on the fly without dropping a beat. Because the underlying representation has been unified into a “readable and writable token sequence,” we can naturally say, “Don’t be so formal—talk to me like you used to,” and the assistant instantly switches tone. We can also cut in mid-sentence—“Skip that—give me something concrete: go or not?”—and the back-and-forth remains fluid and unawkward.

In systems that truly deliver “ultra-realistic + full-duplex” today, the winning recipe is a hybrid of listen–think–speak. Up front, a streaming auditory model continuously turns your voice into a compact sequence of audio tokens; in the middle, a large model handles understanding and planning; at the back, the system writes its intended response as audio tokens and decodes them into a waveform in real time. The reason we don’t always hand everything to a single end-to-end autoregressive GPT that goes directly from audio-in to audio-out comes down to two constraints: millisecond-level latency requirements and the need for tight control over interruption and course correction.

Think of it as a well-rehearsed band. The streaming speech encoder (ASR) is the drummer, keeping time in tens-of-milliseconds beats. The large model in the middle is the conductor, continuously re-orchestrating based on the latest auditory tokens. The neural-codec decoder (TTS) is the lead vocalist, singing while leaving braking distance so an interruption can “hit the brakes” instantly. In practice, both drummer and vocalist are often smaller, faster specialist models (streaming recognition such as RNN-T/Conformer, paired with neural-codec-based fast synthesis) rather than folding every detail into one gigantic autoregressive stack. Otherwise, interruptions and back-ups might blow up latency.

This does not mean a return to the old ASR/TTS pipeline. The key change is that the base representation has become unified discrete audio tokens: the listening side no longer produces only text characters; it can emit semantic or acoustic units as well. The speaking side no longer merely concatenates phonemes; it writes a reversible stream of codec tokens that carries breath, stress, and reverberant tails. The large model either plans at the hidden layer or refines a two-step “semantic tokens → acoustic tokens” plan, then hands the result to the decoder to render. This keeps full-duplex latency low while preserving ultra-realistic texture.

Looking ahead, research is converging: end-to-end “spoken LLMs” are pulling listening and speaking into the same set of parameters, taking audio tokens directly as input and output (speech2speech). In engineering, however, conversation management—who speaks when, how to interrupt, how to revise—remains as guardrails for smoothness and robustness. Today’s best practice is like a hybrid car: the chassis is the unified, tokenized language; the engine is the large model; and the start/stop control is often delegated to the small specialized motors. The result is fast and stable—and it keeps the warmth of the human voice.

大模型时代的语音技术突破:超写实和全双工

大语言模型(LLM)延展至音频,一路狂飙,LLM-native 的语音技术大约在半年多前开始成熟,全行业都起来了。技术成熟的重要标志是两个重要的 featrures:超写实与全双工。

像LLM类似的音频token化,不只造就了模型音乐家(代表产品Suno,另文介绍),更重要的是直接催生了两件真正改变语言交互的事:超写实的语音合成,和像人一样边说边听、随时可插话的自然对话能力(称为“全双工”)。

先说“超写实”。过去的机器配音,总像一位训练有素、拿腔拿调的播音员,字正腔圆,却缺乏日常语音的个人特色与颗粒感。神经编解码器把语音整理成可逆的离散token之后,合成不再只是把“内容”读出来,而是能把“怎么说”也一并还原,接地气的日常语音开始成熟。模型先在“文字→声音语义”的层面写一份乐谱般的草稿:哪里该停一口气,哪里该压低声线,哪一个词要轻轻上扬;接着把这份草稿译成一串音频 token,由解码器把气息、齿音、房间的尾响都带出来。你会听到嗓音里的毛边、笑意里那一丝鼻音,甚至能在跨语言时保留说话人的“人格音色”。交互不再是千篇一律的声音类型,而是像与邻家或朋友的自然交谈,与前大模型时代的差别就在这些被“分层离散码”承载的微观纹理上。

再说全双工。早年的语音助手像对讲机:你说完它再说,轮流发言;而真正的对话更像我们的厨房场景——你在切菜,朋友在提醒烤箱预热,你随口打断一句“等一下先把盐减半”,朋友立刻收住,改口回应关于加盐的火候。要做到这份自然,表面是“能被打断、能抢话”的交互设计,底层却是三件事配合起来:第一,持续听——把听到的语音分成小片段实时转成 token;第二,同时说——一边生成自己的音频 token准备回应,一边留好“随时刹车”的余地;第三,低延迟的理解与改写——在几百毫秒的量级里完成听懂→更新计划→改口输出的闭环。

神经编解码器此处再次立功:它把“听到的”和“要说的”都变成同一种离散序列,模型才方便在同一时间轴上又读又写,像人在自然交互时那样管理“轮到谁说”的节奏感。

这两件事并不孤立。你会发现,越是超写实的合成,越要求在“写 token”时把停顿、重音、笑声这些细节也写进去;越是流畅的全双工,越依赖稳定、稠密而紧凑的音频 token 流,让模型能在不中断的情况下随时调头。正因为底层表达统一成了“可读可写的序列”,才让我们今天能自然地说一句“别这么一本正经好吗,像当初那样跟我讲就好”,助手就立刻会意换个口吻。我们也能在它说到一半时插话,例如“不用扯那个了,咱们来点实的,去还是不去”,以此毫不尴尬地完成对话里的“你来我往”。

真正把“超写实 + 全双工”做顺的系统,今天多半是“听—想—说”的混合体:前端用流式的听觉模型把声音连续地变成紧凑的音频 token 序列,中间由一个大模型负责理解与规划,后端再把它想说的话实时“写回”成音频 token 并解码成波形。之所以不总是能把一切都交给一个端到端的自回归 GPT 直接从声音到声音,主要是两件事卡着:毫秒级的延迟目标,以及对可打断、可改口的强控制需求。

你可以把它想成一支分工明确的乐队。流式语音编码器(ASR)像鼓手,按几十毫秒一拍稳稳往前推;中间的大模型像指挥,随时根据新的听觉 token 改编配器;后端的神经 codec 解码器(TTS)像主唱,边唱边留出刹车距离,让你一插话就能“踩停”。这里的“鼓手”和“主唱”确实常用到相对“小而快”的专用模型(RNN-T/Conformer 一类的流式识别,配合基于神经 codec 的快速合成),而不是把所有细节都并入一个庞大的自回归堆栈里逐 token 生成。否则一旦遇到打断或回退重说,延迟可能失控。

但这并不等于回到老派的语音与文字的转换(ASR/TTS)。关键变化在于底层表达已经统一成离散音频 token:听的那头不再只产生文本字符,而是也能产出语义或声学单元;说的这头不再只是拼接字音,而是写一串可逆的 codec token,把气息、重音、尾响都带出来。大模型要么在文本层规划,要么在“语义 token→声学 token”的两步里细化,再把结果交给解码器渲染出来。这样既守住了全双工的低延迟,又保留了超写实的质感。

往前看,研究在合流:端到端“口语大模型”正把听与说进一步并到同一套参数里,直接以音频 token 为输入输出;工程上仍会在会话管理层保留“谁在说、何时打断、怎么改口”的调度与安全闸门。今天的最佳实践像一部混合动力车:底盘是离散 token 化的统一语言,发动机是大模型,起步与刹车常交给专用的小电机去控速,于是既快又稳,还保留了人声的温度。

说说神经 codec,大模型时代的音频技术要点

“Codec”是 coder(编码)和 decoder(解码)的合体,指一整套“压缩—还原”的机器:编码那端把声音挤压成更省空间的表示,解码那端再把它尽可能还原出来。

在大模型时代,音频和文本一样,常被切成片段并编码成离散 token 的序列。用来量化的“音频词典”叫码本(codebook),好比厨房里的香料盒——一格格离散的小向量,各有编号。不同于文本通常只用一部大词典,神经音频编码往往在同一时间步(音频单元)上配几层码本,由粗到细逐层量化(术语叫 RVQ,Residual Vector Quantization)。压缩时,机器会在这些码本里各挑一个最合适的条目,用它们的编号索引分层“记住”这一瞬的声音;还原时,再把编号对应的向量取出相加,层层把味道补全。

早年的 TTS 常用“梅尔频谱草稿”(连续值“乐谱”)→ 传统神经声码器(vocoder)直接还原波形(根据乐谱演奏);而 LLM-native 神经编解码器路线,多为“语义 token → 声学 token → 解码波形”,两类token都是离散 token,只是粒度不同、分工不同。

RVQ 多层token编码是LLM延展到音频的一个关键创新。没有它,token就会爆炸。分层的本性是化繁为简,分而治之。这是输入信号的表示(representation) 创新,从而得以把离散化进行到底。

“几层”量化呢?没有一个放之四海而皆准的固定数,它其实是个随码率、延迟与质量目标一起调的旋钮。拿 Google 的 SoundStream 为例:它用残差量化把同一时间步上的表示一层层细化,论文里既给了常用的 4、8、16 层配置,也做过极端实验,把量化层数加到 80 层,证明即便很多层也能稳定训练;同一目标码率下,用更少层但更大的码本,或用更多层但每层码本更小,都是可以互相折换的设计选择。

Meta 的 EnCodec 走的是“多码本、可变带宽”的路线:24 kHz 的模型最多用到 32 个码本(也就是 32 层 RVQ),48 kHz 的版本最多 16 个,每个码本通常 1024 个条目;训练时随机挑选若干层参与量化,从而一套权重覆盖 1.5/3/6/12/24 kbps 等不同带宽。这样一来,工程上就能按需“开几层就几层”,在质量和实时性之间找平衡。

别把“层数”跟“层级类别”混为一谈。OpenAI 的 Jukebox 采用的是三类时间尺度的量化(VQ-VAE):顶层类最稀、底层类最密,用来承载从段落结构到音色细节的不同粒度信息;这说的是“横向按时间分三层类别”,而不是同一时间步上堆多少层残差量化器。

把这些放在一条直观的尺子上看:实时语音、低延迟的场景,常见是 4–16 层一类的配置;音乐或高保真场景,24 kHz 下用到二三十层也不罕见。最终取几层,不是教条,而要综合平衡,要看你要的码率、能接受的延迟,以及耳朵对质感的要求。

“神经 codec”的入口是神经“编码器”,把原始波形揉成紧凑的隐向量;接着量化器从各层码本里一层层选条目,这就是逐层查词典的过程(粗笔先定轮廓,细笔再添质感);出口是神经“解码器”,把这些离散条目还原成为可听波形。整条链条端到端训练,目标是在保真的前提下用尽量少的编号,把人耳在意的东西讲清楚:音色、韵律、吐字,甚至房间里那点余韵。最终得到的是一条稳定、可逆、码率可调的离散序列。

在这套体系里,“音频 token”指的就是那些编号本身。每隔十几到几十毫秒,量化器从各层码本里选出最接近的一组编号来描述这个片段;时间一长,便得到一串可读可写的“声学文本”。这和传统的梅尔频谱不同:梅尔是连续数值的“照片”,更适合给传统神经声码器(vocoder)直接还原;音频 token 是离散的“词串”,既能高保真解码回波形,也能像文字一样被 GPT 风格的自回归大模型接龙、改写与对齐。

一句话收束:codec 是整台“压缩—还原”的机器;码本只是机器里装“离散基元向量”的香料盒,真正作为 token 的是它们的编号;神经 codec 则把这台机器用神经网络重铸,让它学会用一串离散 token 讲清楚一段声音,并在需要时把这串 token 唱回成真的语音或音乐。说白了就是,音频处理基本上可以沿用文本大模型那一套已经验证极为有效的压缩与还原技术,这就是音频技术在大模型时代得以再起飞的奥秘。

跨模态连接器范式:谷歌模型Flamingo回顾

Flamingo:桥接视觉模型与文本LLM

多模态模型研究历史上的另一个里程碑工作是谷歌DeepMind 的 Flamingo,其定位是少样本(few shots)多模态:给它一段“图像/视频与文字交错”的提示(prompt),它就用自回归的方式生成答案或描述,相当于直接建模 p(y∣x)文本在前、图像/视频在后交错,带因果掩码)——这使它很像 LLM的GPT-3 发展阶段,靠“看示例”学会一项新视觉语言任务,无需再做任务特定微调。

视觉编码器 → Perceiver Resampler → 门控跨注意力进 LLM

1) 视觉编码器(Vision Encoder)
Flamingo 使用对比学习预训练为视觉编码(从像素到特征),并在主训练阶段冻结这个编码器的权重;视频以 1 FPS 采样成帧后编码,再把帧级特征拼接成时空序列。

2) Perceiver Resampler(把“多少帧、任意分辨率”的特征,重采样成固定少量 token)
视觉特征出来通常是“很多 patch × 很多帧”的大表;直接拿去和语言做跨注意力会很贵。Flamingo 在视觉侧加了一个 Perceiver Resampler:用一组可学习的潜在查询向量去跨注意力“吸收”时空特征,产出固定数量(论文里默认 64 个,固定成 64 个 token 是效果与吞吐的折中)的视觉 token。这么做一来把算力从“随分辨率和帧数爆炸”变成了常数级,二来也给后续的跨注意力提供了稳定的接口。

Resampler 就是一只“漏斗”——把视觉编码器吐出的、分辨率和帧数都不固定的大量特征,自适应压成固定少量的视觉 token,好让后面的语言模型每一步都能用常数成本“看图/看片”。

3) 冻结的大语言模型 + 门控跨注意力层(gated xattn-dense)
门控(gated) 就是一只“阀门”——把新加入的跨注意力输出乘上一个可学习的开合系数,一开始几乎关着,训练中逐步放开,这样既不破坏原来强大的语言模型,又能稳稳学会“在需要时看图”。这两者配合,才能实现“冻结强视觉 + 冻结强 LLM,只训桥”的稳定方案。

语言侧起点是一个预训练的自回归 LLM(最大实验用的是 Chinchilla 70B),论文的策略是把预训练的 LM 与视觉编码器都冻结,然后在 LM 的层间插入新建的“门控跨注意力 + 前馈”层(gated xattn-dense),由这些新增层去“看”Resampler 输出的视觉 token,最后仍以“预测下一个词”的目标训练整个 VLM。训练一开始的输出等价于原来的纯文本 LM,随后再逐步“放开阀门”,稳定过渡到“会看图的 LM”。

冻结语言模型并不自动保证“行为不被打扰”。因为我们往层间新插入了跨模态残差分支,哪怕主干参数不动,随机初始化的跨注意力分支和小前馈分支的输出一旦加回到 LLM 的残差上,成为该层的新隐藏态,就会改变激活分布与输出分布。Flamingo 用“门控跨注意力”把新增信号当作可开合的阀门:初始几乎全关,模型行为与原 LLM 等价;训练中阀门逐步打开,视觉信息才被稳妥地注入。

跨注意力分支(xattn)的 Query 来自当前层的文本隐藏态,Key/Value 来自 Resampler 输出的视觉 token。前馈分支(dense/FFN)是一个小的前馈网络(Adapter 类似),作用在文本隐藏态上。这两条支路都不在原 LLM 里,是后来“插”进去的,所以它们的参数是随机初始化。

训练数据与目标:只用“网页级弱标注”的三类混合

Flamingo 用三类“来自网页、无需人工专门标注”的数据混合,以最大似然训练“视觉条件下的文本”。

    • M3W(MultiModal MassiveWeb):从约 4330 万网页解析出图文交错的序列,合计 1.85 亿图像、182GB 文本。构造样本时在文本里插入 <image> 标签、<EOC> 等特殊记号,随机截取 256 个 token,并拿最多 5 张图片进入该片段;再按“只让每个文本 token 看它前面最近的一张图”去做跨注意力的掩码。

    • 图文对(ALIGN、LTIP)与视频文(VTP):ALIGN 约 18 亿图文对但噪声较大,LTIP 3.12 亿图文对、描述更长,VTP 2700 万短视频配文(平均约 22 秒)。这三类单图/单视频样本在预处理时统一加 <image> 标签与 <EOC>,并对基准集做去重。

    • 目标函数:对上述多源数据做加权负对数似然的混合训练;还在 M3W 上引入一个小技巧:以 1/2 的概率让文本去注意“下一张图”而不是“上一张图”,把网页里图文前后关系的不确定性当成数据增强

冻结两个编码器,效果最佳

作者系统比较了“解冻 vs 冻结”的做法:

    • 直接解冻视觉或语言主干,会出现典型的灾难性遗忘,整体指标下滑;

    • 也尝试过把语言端与 MassiveText(Chinchilla 的语料)联合再训练以抵消遗忘,但效果仍不如全程冻结 LM、只训练“Resampler + 门控跨注意力”的方案。对 80B 规模的 Flamingo 来说,这样还能把约九成参数留在冻结状态,训练经济性更好。

能力与表现:少样本任务全面开花

16 个多模态基准上,Flamingo 在仅用少数示例的设置下全面刷当时的 SOTA,而很多对手是“每个任务各自微调、且用多得多标注数据”的方法。最大的 Flamingo 以 Chinchilla 70B 为基,形成约 80B 参数的视觉语言模型(VLM);接口上就是把“图/视频与文字交错”的提示喂给模型,再让它生成答案或描述。

这里的“少样本多模态”说的是:在统一的“图像/视频与文字交错”的提示里,只给少量示例(few shots 几条就够),Flamingo 就能直接用自回归方式完成一批通用视觉–语言任务,而不需要再做任务特定的微调。它像 GPT 在纯文本里靠 few-shot 学会新任务那样,把这个范式成功搬到了“看图/看片并回答”的场景。

下面用常见任务说明它到底“会些什么”,以及 few-shot 是怎么起效的。

    1. 图像描述(caption)
      给两三条“〈图〉→一句好的描述”的示例,再放一张新图,让模型续写描述。Flamingo会把视觉特征当作“前文语境”,续写出风格一致的描述。优点是开放词汇、能融合世界知识。

    2. 视觉问答(VQA,开放式或多选)
      提示里交替给若干 “〈图〉Q: … A: …” 的对,让模型在新图上按同样格式答题。few-shot 的作用是把“问法”和“答句式样”教给模型(比如要不要只给一个词,要不要解释)。Flamingo在常识型、属性识别、简单关系判断上表现稳健。

    3. 文档/界面问答(接近 OCR-free 的理解)
      把发票、PPT页、网站截图当输入,在示例里演示“问定位明确的问题、给简短答案”的范式(如“日期/金额/按钮名称”)。模型并不做传统OCR,但能从视觉特征+语言提示里对齐关键信息。提示要尽量指向“可见文本”,避免让它臆测隐含字段。

    4. 视频问答 / 动作识别 / 时序理解
      把视频抽帧成一串图(Flamingo内部会把这些帧压成固定数量的视觉token),示例里体现“时间词”和“动作线索”(如“刚开始…随后…最后…”)。它能回答“谁做了什么”“先后顺序是什么”“有没有循环动作”等。

另一类常见任务是分类,可以当成生成做。不微调分类头,直接在提示里写:〈图〉Q: 这属于下面哪一类?[长颈鹿/骆驼/驯鹿] A: … 再给两三例“标准答案只有一个词”的示范。这相当于把传统 closed-set 分类,改成“文本选项 + 生成一个类名”的 few-shot 设置,方便覆盖长尾标签或细粒度子类。

Flamingo 的“少样本多模态”,不是某个单一任务的窍门,而是一种统一接口——把“看见的东西”接入一个已经很会“说”的大脑里,用极少的在地示例,让它在同一条对话式提示里切换,可完成多种视觉–语言任务。

和“CLIP 时代”的根本不同

CLIP 学的是跨模态公共表征,推理多靠“相似度检索/匹配”;Flamingo 则是条件生成,在 LM 里真正“读图后继续说话”。它不替换已有的强视觉/强语言模型,而是用 Resampler + 门控跨注意把两者“温和地桥接起来”,这正是“连接器范式”的精髓。

小结

Flamingo 用最小侵入的方式,把冻结的视觉与冻结的 LLM接在一起:视觉侧先被 Perceiver Resampler 重采样为少量视觉 token;语言侧在层间插入门控跨注意力去“看图”;训练只用网页规模的图文/视频文弱标注,直接最大化“视觉条件下的语言似然”。这条路线带来了三个现实好处:(i)少样本迁移:任务只需几例提示即可启用;(i i)工程友好:大部分参数冻结、可并行扩展、算力可控;(i i i)统一接口:同一模型天然支持图、视频与文本交错的“对话式”使用方式。

 

 

图文对齐的关键一跃:CLIP 回顾

如何把“图”和“文”放进同一张地图

CLIP(Contrastive Language-Image Pre-training)是由OpenAI提出的跨模态预训练对比学习模型,是多模态研究的重要突破之一。多模态真正站稳脚跟,是从“把图像与文字放进同一张语义地图上”开始的。CLIP 做的,恰是这件看似朴素却最要紧的图文对齐的基本建设。

想象一间教室,三十二位同学每人手里一张图片和一句描述。老师发出一道题:请给每张图找到它唯一对应的那句描述;同时,每句描述也要只配上属于它的那张图。若把这三十二张图和三十二句描述两两比对,就得到一张 32×32 的相似度表格。对角线上的三十二格是“真配对”,其余都是“错配”。CLIP 就是在一遍又一遍地优化这张表格:让对角线越发亮堂,其余格子统统暗下去。

做这件事,CLIP 用的是两支“翻译笔”。一支翻译图像:用深度卷积或视觉 Transformer(ViT) 把图片压成一个向量;另一支翻译文字:用 Transformer 把文字描述压成一个向量。接着,它把两支笔写出的向量都映射到同一维度,并规范到单位长度。这样,两者的“接近程度”就能用一个最简单的量来衡量——余弦相似度。越像的一对,两个向量越对齐,夹角越小。

训练 CLIP 的秘诀有两个。第一是数据的“广”:谢天谢地谢互联网,我们不再需要临时请人来打标签,而是直接收集互联网上数量巨大、与日俱增的“网页图片 + 周边的文字”(如 <img>alt、标题、邻近句子等),一抓就准,轻轻松松数以亿计。文字质地参差,但覆盖丰富,恰好契合现实世界的混沌与长尾(当然总还配有垃圾过滤等)。第二是负例特“多”:上面的班级比喻里,一次“练习”就自带了海量错误配对,这是设计使然,无需人为构造。CLIP 让每个训练批次都像一场“谁配谁”的大考——批次越大,负例越多,区分能力越强

对于一个包含 N 对图文的批次,图像文本分别编码后对齐,把所有两两点积除以一个可学习的温度 τ,得到一张 的相似度矩阵。随后从两个方向计算“谁应该选谁”的交叉熵:以每一张图为起点,正确答案是哪一句;以每一句为起点,正确答案是哪张图。两个方向的损失取平均,就是 CLIP 的训练目标。温度参数的存在,使得模型能自适应地调节“分数的对比度”,在稳定与锋利之间找到平衡。

训练完毕后,CLIP 就得到了一张跨模态共享的“语义地图”。这张地图有两个直接好处。第一是检索与匹配:给一张猫的照片,它会在句子堆里把“a cat”拉到最近;给一句“a dog playing frisbee”,它能从图片库里把相应画面挑出来。第二是零样本分类:不再需要训练一个固定类别的分类器,只要把类名写成一句话(最好配上几种不同表述),编码成向量,与图片向量一比,分数最高的那一类就是答案。文本成了类别的可编程接口,开放词表与长尾概念因此得以纳入。

需要强调的是,CLIP 并不直接“会画画”。它的贡献在于让图像与语言真正“对上号”。而正是这张对齐良好的地图,让后来的多模态模型能“看图说话、听话作图”,让多模态问答与检索能“互通语义、互证细节”。给图片和视频自动标注,很多也是以此为基础的。在多模态的长路上,CLIP 是底座式的里程碑:把感知与语言接到了一起,把人工标注的天花板打通到了开放世界。

现实网页数据不可避免会出现“同义对”或近重复样本。它们在批内被当作负例,形成所谓“同类碰撞”。这会让模型在训练时对一些本应接近的样本产生轻微排斥。CLIP 之所以仍能学到稳健的语义地图,原因在于:其目标只是让真配对在行/列的排序中位居第一,而非把所有负例压到零;双向损失会把各自的真配对拉近,削弱对近义负例的过度排斥;同时,海量数据与大批次使偶发的“假负例”在统计上被摊薄。这样,CLIP 既保持了开放词表与零样本的优势,又避免了“同义排斥”带来的系统性偏差。

CLIP 的对比目标是对称的:同一批次里,模型既最小化‘从图到文’的交叉熵,也最小化‘从文到图’的交叉熵。前者逼近 p(text|image),后者逼近 p(image|text)。两项合起来,相当于把两种方向的匹配都训练到位,既避免了某一塔的表征过度聚团或过度发散,也让两个方向的检索都能受益。实现上并不增加额外前向计算:一张相似度矩阵,分别做行、列 softmax 即可。