Arganzheng's Blog

stay hungry, stay foolish

多模态(07):扩散模型(下):score matching、flow matching 与 classifier-free guidance

Diffusion II: Score Matching, Flow Matching, Noise Schedules, and Classifier-Free Guidance

上篇用 DDPM 的语言把扩散模型讲了一遍:加噪、猜噪声、逐步去噪、DDIM 跳步。这一篇讲另外两种看同一件事的方式——score matching(网络学的其实是”概率密度上升最快的方向”)与 flow matching(网络学的是”从噪声到数据的速度场”,SD3 与 FLUX 用的就是它)——它们的推导与记号完全不同,读起来像三个东西,实际上训练的是同一个网络、只是参数化不同;看清它们在哪一步汇合,读任何一篇扩散论文都不会再迷路。然后讲两个所有文生图模型都依赖的技术:噪声调度(哪些噪声水平该多学)与 classifier-free guidance(\(w = 7.5\) 到底在做什么)。 全篇继续用上篇那个二维的两个月牙 toy:分数场可以画成箭头图、flo...

多模态(06):扩散模型(上):DDPM——加噪、去噪与「预测噪声」

Diffusion I: DDPM — Forward Noising, Reverse Denoising, the ELBO, and DDIM

生成线的数学从这里开始。语言模型的生成是”下一个 token 的分类”——目标函数是交叉熵,采样是逐个 token;图像生成走了另一条路:从纯噪声出发,一步步去噪,几十步后得到一张图。这条路在 2020 年由 DDPM 确立、2021 年被 score-based SDE 统一、2023 年被 flow matching 简化,三种视角各有一套推导与记号,读起来像三个不同的东西——实际上它们训练的是同一个网络、只是参数化不同。 扩散模型分上下两篇。上篇(本篇)只讲 DDPM——最早、也最容易从零看懂的那个视角:怎么把一张图一步步加噪成纯噪声(前向),怎么训一个网络把噪声一步步去掉(反向),为什么训练目标最后化简成”猜出加进去的噪声”这么一句话,以及 DDIM 怎么...

多模态(05):语音(下):语音理解、语音生成与全双工

Speech II: Speech Understanding, Speech Generation (TTS), Omni Models and Full-Duplex Dialogue

上篇把声音变成了两种东西:连续的编码器特征(Whisper encoder 每 20 ms 一个向量)与离散的 codec token(RVQ,每帧几个整数)。这一篇讲怎么用它们:理解——让 LLM 听懂语音(编码器 + connector + LLM,VLM 的翻版);生成——让模型说话(TTS 的三条路,以及 LLM 直接生成语音 token);全模态与全双工——一个模型同时听、看、说,而且要像打电话一样随时能被打断、几百毫秒内接话。 2024–2025 年的全模态模型(GPT-4o、Qwen2.5-Omni、Moshi)都建立在上篇的离散 token 之上,并进一步要求实时。实时的难点不在算得快,而在”边听边说”这个形态本身:模型每 80 毫秒就要决定一次”...

多模态(04):语音(上):从波形到 token——mel 谱、Whisper 与神经 codec

Speech I: From Waveform to Tokens — Mel Spectrograms, Whisper, and Neural Codecs with RVQ

声音进入 LLM 的路与图片相似又不同。相似的是范式——一个编码器把音频变成向量序列,一个 connector 对齐到 LLM,然后像文本一样处理;Whisper 的 encoder 之于语音,就像 CLIP ViT 之于图片。不同的是语音要双向:VLM 几乎只做理解(看图说话),语音模型从一开始就要既听又说——语音助手要用语音回答。生成侧要求把 LLM 的输出变回波形,而波形是每秒 16000–48000 个数的连续信号,不能像文本一样逐 token 生成。 这就是语音比图片更需要离散 token 的原因:神经 codec 把一秒音频压成几十到几百个离散 token,让 LLM 可以用生成文本的方式生成语音。语音分上下两篇:上篇(本篇)讲表示——声音在计算机里是...

多模态(03):VLM 的训练:数据、阶段与评测

Training a VLM: Data, Stages, Evaluation and Hallucination

前两篇定了结构:一个预训练的 ViT、一个 connector、一个预训练的 LLM。三个部分来自三个不同的训练过程,表示空间互不相同。VLM 的训练要做的是把它们对齐成一个模型——让 LLM 读懂编码器的输出、让编码器为 LLM 的任务调整、让整体学会按指令回答关于图片的问题、最后让它符合人的偏好。这件事不是一步做完的:每个阶段冻结哪些部分、用什么数据、多少数据、多大的学习率,各家的报告差别很大,且这些差别在 benchmark 上的影响比 connector 类型的影响大得多。 这一篇把 VLM 训练拆成阶段与数据两个维度。阶段的问题是”谁在什么时候学”:先冻结 LLM 只训 connector,是为了不让随机初始化的 connector 的梯度破坏 LLM;...

多模态(02):VLM 的结构:connector、注入方式与动态分辨率

VLM Architecture: Connectors, Injection Methods and Dynamic Resolution

上一篇的编码器把一张图变成了几百个 \(d_v\) 维向量(CLIP-L 是 1024 维)。LLM 的输入是 \(d\) 维向量(7B 模型是 4096 维)——两边维度不同、”语言”也不同,中间要有一个转接头。这一步有三个设计决定:connector——用什么把编码器的 \(d_v\) 维特征映射到 LLM 的 \(d\) 维输入空间,顺便要不要压缩 token 数;注入方式——图片 token 是像文本一样进入 LLM 的输入序列(decoder-only 注入),还是通过额外的 cross-attention 层被 LLM “看”(cross-attention 注入);分辨率策略——固定尺寸、切 tile、还是让编码器接受原生分辨率。三个决定合起来回答一个...

多模态(01):视觉编码器:CLIP、SigLIP 与自监督 ViT

Vision Encoders: CLIP, SigLIP and Self-Supervised ViTs

一个视觉语言模型(vision-language model,VLM——能看图回答问题的语言模型,如 GPT-4o、Qwen2.5-VL)的第一步是把一张图变成几百个向量。语言模型只认”一串向量”:一句话先被切成 token、每个 token 查表变成一个向量,再送进 Transformer;图片没有”词”,要先有一个部件把像素变成同样形状的一串向量,这个部件叫视觉编码器(vision encoder)。做这件事的几乎总是一个预训练好的 ViT——LLaVA 用 CLIP ViT-L/14,Qwen2-VL 用自己训的 ViT(从 DFN 的 CLIP 初始化),InternVL 用 InternViT-6B,Gemma 3 与 PaliGemma 用 SigLIP...

多模态:从视觉编码器到扩散模型(总纲)

Multimodal Models: From Vision Encoders to Diffusion

内容简介 《多模态:从视觉编码器到扩散模型》是一组共九篇正文加一篇总结的系列文章,对应《AI 算法工程师学习地图》的第 L7 层。它面向已经理解 Transformer 与 LLM(L4)、做过后训练(L5)的读者,回答两个问题:图片、视频、语音怎么进入一个语言模型,以及图像与视频的生成为什么是另一套数学。 “多模态”下面有两条几乎独立的线。理解线把其他模态编码成 token 送进 LLM:一个视觉编码器(ViT)把图片变成几百个向量,一个 connector 把它们对齐到 LLM 的输入空间,LLM 像处理文本一样处理它们——这条线是 LLM 的扩展,用的是 L4、L5 的全部方法,新增的是编码器、connector 与对齐训练。生成线从噪声出发逐步去噪得到图...

高效推理与压缩(07):系列总结与通关自测

Efficient Inference and Model Compression: Series Recap and Final Self-Test

六篇正文回答了一个问题:不改硬件、不改推理引擎,怎么让同一个模型更快、更小、更便宜——以及每种办法让模型的输出改变了多少。第一篇讲从分布里怎么取一个 token,第二篇讲唯一不改变分布的加速(投机解码),第三、四篇讲权重与激活的低比特表示(PTQ 与 QAT),第五篇讲训好之后还能对 KV 做什么,第六篇讲删掉一部分参数之后怎么恢复、以及一个 70B 怎么变成一个能用的 8B。六篇合起来,是《Transformer 与 LLM》那条成本公式的算法侧。 本文不讲新内容,做三件事:把六篇压成一张表与六段回顾,把贯穿六篇的几条线拎出来,然后给一套三段式的通关自测——判断与计算、跨篇综合、面试题。各篇末尾的自测检验的是”这一篇读懂了没有”,这里检验的是”六篇能不能连起来用...

高效推理与压缩(06):剪枝、深度缩放与小模型配方

Pruning, Depth Scaling and How Small Models Are Made

前五篇改的是表示(量化)、过程(解码、投机)与缓存(KV),模型的参数数量与结构没有变。最后一条线改参数的数量:删掉一部分权重、一部分 head、一部分层,让模型本身变小。剪枝是最老的压缩方法(LeCun 等 1989 的 Optimal Brain Damage),在 CNN 时代成熟,在 LLM 上重新变得重要——因为”一个 70B 怎么变成一个能用的 8B”这个问题有了新的答案:不是从头训一个 8B,而是从 70B 剪出来再蒸馏,用十分之一的 token 达到相近的效果。 剪枝与前几篇的根本区别是:剪掉的东西不能靠更好的舍入找回来,必须靠训练恢复。所以剪枝几乎总是”剪枝 + 蒸馏”的组合(L5 第七篇的方法在这里是工具),它的算力账是”剪枝 + 恢复的 to...

×