《AIGC原理与实践》读书笔记:所有生成模型都在做同一件事
阅读方式:微信读书网页版,从版权页翻到第 13 章末,共 856 屏、13 章、17 分 06 秒。 这是一本硬书:从深度神经网络讲起,VAE、GAN、StyleGAN、风格迁移、注意力、Transformer、GPT/BERT、RLHF、扩散模型、CLIP、Stable Diffusion,最后用 180 页补数学基础。
前九本书我读得很快,这本慢得多。因为它不是"教你用工具",是"告诉你工具底下是什么"。
读完之后,有一句话在我脑子里定型了:
整个 AIGC 领域看起来枝繁叶茂,其实只有一个动作——学一个分布,然后从里面采样。
所有模型的分歧,都落在两个问题上:怎么学这个分布,怎么从里面采。
一、图像生成的三代:糊、崩、稳
第 3 到第 5 章讲图像生成,其实是一条很清晰的演进链。我把三代的软肋总结成三个字。
VAE 的问题是"糊"。 它把图像压到一个低维的隐空间,再从隐空间解码还原。听着很优雅,但它的损失函数里有一项是重建误差——优化"平均误差"的结果,就是生成一个"平均的脸"。 平均的脸必然模糊,因为细节在平均过程中被抹平了。
GAN 的问题是"崩"。 它换了个思路:不直接学分布,而是找一个裁判(判别器)来判断"这张图真不真",让生成器去骗它。这个思路很聪明,但它有个著名的毛病——模型坍塌:生成器发现只画少数几种图就能骗过裁判,于是它就只画那几种。
扩散模型的问题是"慢"。 它的做法最反直觉:先把图一步步加噪,加到完全变成噪声;然后学着把这个过程倒过来,从纯噪声一步步去噪还原。稳、清晰、可控,代价是采样要迭代几十步,比 GAN 慢一个数量级。
这三代不是替代关系,是三种不同的取舍。而扩散模型之所以赢,是因为它把"生成"这个难题拆成了几十个小难题——每一步只学"去掉一点点噪声",比一步学"从无到有画一张图"容易太多。
二、GAN 为什么这么难训:一个数学解释
第 4 章讲 GAN 的缺陷,是我读这本书时最"啊哈"的一段。它没有停在"GAN 训练不稳定"这种描述上,而是给了推导。
"只要 pdata、pg 没有一点重叠或重叠部分可忽略,JS 散度就固定为常数 log2。而这对于梯度下降方法意味着梯度为 0!此时对于最优判别器来说,生成器肯定得不到梯度信息。"
翻译一下:当生成的图和真实的图完全不像的时候,裁判给出的反馈是"一样糟",没有任何方向感。 梯度为零,生成器就不知道该往哪改。
更麻烦的是这个平衡极难把握:
"判别器训练过度,会导致生成器梯度消失,进而生成器的损失值无法降低;判别器训练不足,则会导致生成器梯度失真,进而导致模型出现大幅振荡。只有判别器训练得恰当,才能取得理想的结果。但是这个分寸很难把握,甚至在训练的各个阶段这个分寸都可能不一样。"
这段话解释了一件我一直没想通的事:为什么 GAN 调参像玄学。
不是调参的人不专业,是这个系统本身在追求一个"动态平衡点",而这个点在训练过程中一直在移动。你要追的不是一个固定值,是一条一直在跑的线。
后面 WGAN 的解法也在这章:把 JS 散度换成 Wasserstein 距离(俗称"搬土距离")。区别在于——两个分布完全不重叠时,JS 散度是常数,而 Wasserstein 距离仍然有值,仍然能给出方向。
这就是数学的力量:它不是让模型变聪明,是让梯度重新有了意义。
三、一条注意力,撑起整条语言线
第 7 到第 10 章讲语言模型,从注意力机制一路讲到 ChatGPT。这条线我读得最顺,因为它的逻辑非常干净。
起点是一个工程问题:循环神经网络(RNN)处理长句子时,信息要一个词一个词往后传,传到最后前面的信息就衰减了。
解法是自注意力:让每个词直接去看句子里的所有词,算一下"我该关注谁",然后按权重把信息拿过来。一句话里任何两个词的距离都变成 1,不再随长度衰减。
我认为这是整条线上唯一真正的创新。剩下的(多头、残差、层归一化、位置编码)都是让这个机制能训得起来、训得稳的工程手段。它们很重要,但它们是"让它能用",不是"让它成立"。
然后是分岔:GPT 和 BERT 走了两条路。
GPT 加掩码,只看左边。 它只能看到前面的词,任务就是"猜下一个词"。这个约束看起来是限制,实际上逼它学会生成。
BERT 不加掩码,两边都看。 它的任务是"把挖掉的词填回来"。这个任务逼它学会理解。
一个会写,一个会懂。后来的事我们都知道了——会写的那条路,顺带把"懂"也学会了。 这是这本书没明说、但读下来能自己得出的判断。
再往后是 ChatGPT 的关键一步:RLHF。指令微调让它会听指令,然后用人类偏好训练一个奖励模型,再用 PPO 拿这个奖励去优化语言模型。
第 10 章讲得很实:标注员不给绝对分数,而是给两个回答排序。 理由是——人对"哪个更好"的判断,比对"这个打几分"的判断可靠得多。这个细节,是 RLHF 能work的真正原因。
四、CLIP 才是"提示词"的底层解释
第 12 章讲多模态,CLIP 那一节我读了两遍。
CLIP 做的事很简单:拿海量图文对,训练两个编码器,让匹配的图文在向量空间里靠近,不匹配的远离。
就这么一件事。但它带来一个后果:图和文被压进了同一个空间。
这意味着什么?意味着"文字"可以当作"图像空间里的一个方向"来用。
于是 Stable Diffusion 的架构就好理解了:CLIP 负责把提示词变成一个方向,扩散模型负责沿着这个方向把噪声修成图。 两个模型各干一半,中间用交叉注意力接起来。
读到这里,我之前对提示词的一个误解被纠正了。
我以前以为提示词是"命令"——我下指令,它执行。实际上不是。提示词是在那个联合向量空间里指一个位置。
这解释了三件我一直觉得奇怪的事:
为什么近义词效果差很多? 因为在向量空间里,"温馨"和"温暖"不一定挨着,它们各自落在一片区域。你选哪个词,落点就不同。
为什么加一串形容词反而变差? 因为每个词都在指一个方向,指的方向多了就互相拉扯,最后落在一个谁都不像的中间点。
为什么"杰作、8K、超高清"这种词有用? 因为在训练数据里,这类图往往和高质量图对,它们被拉到了"高质量"那片区域附近。这不是玄学,是数据分布的副产品。
这一节读完,我觉得所有讲提示词技巧的书,都应该先讲 CLIP。 不讲这个,技巧就是口诀;讲了,技巧才有出处。
五、第 13 章那 180 页,才是地基
这本书有个很特别的结构:把数学放在最后。
第 13 章从矩阵运算讲到随机变量、信息论(熵、互信息、KL 散度、交叉熵、Wasserstein 距离、困惑度)、推断(极大似然、EM、变分推断、MCMC)、强化学习(策略梯度)。
放在最后,好处是前面读模型时不至于一上来就被公式劝退;坏处是你会发现前面很多"知其然"的地方,答案在这里。
举一个例子:为什么 VAE 的损失函数里有一个 KL 散度项?因为它在做变分推断——用一个简单的分布去近似真实的后验分布,而衡量两个分布差多少,用的就是 KL。
再举一个:为什么扩散模型能成立?因为它整个正向加噪过程是一个马尔可夫链,而反向去噪是在做这个链的逆。这一整套推导,在第 13.4.5 节。
我的建议是:这本书可以倒着读。 先翻第 13 章建立坐标系,再回去看每个模型,会顺很多。
六、这本书的短板
一是"零基础"这个副标题有点勉强。 第 2 章直接从 PyTorch 构建神经网络讲起,卷积、转置卷积、感受野、归一化、优化器一路铺开。有基础的人读着很顺,真零基础的人会在第 50 页卡住。
二是代码密度过高。 856 屏里,相当一部分是完整代码。好处是真能跑,坏处是——代码翻过去就忘了,原理留下来了。 读的时候要注意区分这两层。
三是时效。 书里讲的是 GPT-3 到 ChatGPT 那一代,扩散模型讲到 SD 2.0/XL。后面的进展(更强的推理模型、新的架构)都没有。但原理层的东西不会过期,这也是这本书能读的原因。
它最大的优点是:它把每一个模型都从零实现了一遍。 不是调库,是写网络结构、写损失函数、写训练循环。这个做法很笨,但只有这么做,你才知道"那一行公式"到底对应哪段代码。
七、一句话
AIGC 看起来分支繁多——文本、图像、多模态、视频,各有各的模型。但读透之后会发现,它们全在做同一件事:把数据变成一个分布,再从分布里采样。 差别只在两处:怎么学(VAE 学隐空间、GAN 找裁判、扩散学去噪),怎么采(贪心、束搜索、Top-K、Top-p)。 想清楚这一点,这个领域就不再是一片迷雾,而是一棵树。
而"提示词为什么有用"这种问题,也只有一个答案:因为图和文被对齐到了同一个空间里,你写的词,是一个方向。
阅读记录:微信读书网页版逐页翻阅,856 屏 / 13 章 / 17 分 06 秒。
本书知识图谱见文中配图,原图地址:https://www.jiangtian.top/zb_users/upload/kg/aigc-principle-map.png
发表评论: