1. 从三个现象级模型说起:它们到底共享了什么底层逻辑
1.1 表面看是三件事,底层其实是一件事
GPT-4、Imagen、Stable Diffusion,这三个名字放在一起,很多人第一反应是“都是AI大模型”,但具体哪里像、哪里不像,往往说不清楚。我刚开始接触这几个东西的时候也有同样的困惑:一个是文本对话,一个是文生图,一个是开源图像生成,看起来八竿子打不着,凭什么放在一篇文章里讲?
后来把它们的论文、技术报告和开源实现翻了一遍,才慢慢理清楚——它们背后共享的底层技术栈,重合度远比想象中高。核心就三样东西:大规模Transformer架构、扩散模型(Diffusion Model)的采样与训练范式、以及海量数据驱动的预训练+微调流程。这三样东西像三根柱子,撑起了当前生成式AI的大半个天花板。
GPT-4走的是纯文本的自回归生成路线,Imagen和Stable Diffusion走的是文本到图像的扩散生成路线,但它们在“如何理解输入条件”这件事上,用的都是同一套思路:把文本编码成向量,再让生成模型去对齐这个向量。区别只在于,GPT-4把向量解码成文字,Imagen和Stable Diffusion把向量解码成图像。
这个认知一旦建立起来,很多看似孤立的技术点就串起来了。比如为什么Stable Diffusion的提示词写法会影响出图质量?因为文本编码器的对齐质量直接决定了生成方向。为什么GPT-4的上下文长度这么重要?因为自回归生成的质量和上下文窗口大小强相关。这些问题的答案,都指向同一个底层逻辑。
1.2 为什么这三个模型值得放在一起研究
单独看GPT-4,你会觉得它是一个对话产品;单独看Imagen,你会觉得它是一个图像生成工具;单独看Stable Diffusion,你会觉得它是一个开源项目。但把三者放在一起,你会发现它们代表了生成式AI的三条典型路径:闭源商用、闭源研究、开源社区。这三条路径在技术选型、工程实现、部署方式上的差异,恰恰是理解整个行业格局的最好切入点。
更重要的是,这三个模型的技术报告和开源代码,构成了目前最完整的学习材料。GPT-4的技术报告虽然细节遮遮掩掩,但架构思路是公开的;Imagen的论文把扩散模型的文本条件机制讲得很透;Stable Diffusion的代码完全开源,你可以直接跑起来看每一层的输出。这三份材料配合着看,比单独啃任何一份都高效。
我自己的学习路径就是:先跑通Stable Diffusion的推理流程,理解扩散模型的基本采样过程;再读Imagen的论文,搞清楚文本条件是怎么注入的;最后回头看GPT-4的技术报告,理解自回归生成和扩散生成在训练目标上的本质差异。这个顺序走下来,整个生成式AI的技术地图就清晰了。
1.3 适合谁来读这篇内容
如果你是对生成式AI感兴趣但还没入门的新手,这篇内容会帮你建立一张技术地图,知道每个模型在做什么、为什么这么做。如果你已经在用Stable Diffusion出图或者调GPT-4的API,这篇内容会帮你理解背后的原理,让你在调参和写提示词的时候更有方向感。如果你是从业者,想搞清楚这几个模型的技术共性,这篇内容会帮你把散落的知识点串成线。
我不打算写成论文综述,也不打算堆砌公式。我会用从业者之间交流的方式,把每个技术点的“为什么”讲清楚,把实操中容易踩的坑标出来。你能看到具体的参数、具体的代码片段、具体的排查思路,而不是泛泛而谈的“原理介绍”。
2. 核心支柱一:Transformer如何成为生成式AI的通用底座
2.1 从注意力机制说起:为什么Transformer能通吃文本和图像
Transformer的核心是自注意力机制(Self-Attention),这个东西的本质是让序列中的每个位置都能“看到”其他所有位置,并根据相关性分配权重。文本是天然序列,图像也可以切成patch变成序列,所以Transformer理论上可以处理任何可以序列化的数据。这就是它能同时支撑GPT-4和Imagen的根本原因。
具体来说,GPT-4用的是纯解码器(Decoder-only)的Transformer结构,输入是文本token序列,输出是下一个token的概率分布。Imagen和Stable Diffusion用的是编码器-解码器或者纯解码器结构,但关键在于它们把图像也切成了patch序列,然后用Transformer或者U-Net来处理。Stable Diffusion的U-Net骨干里其实也嵌了Transformer层,用来做跨注意力(Cross-Attention),把文本条件注入到图像生成过程中。
这里有个容易混淆的点:Stable Diffusion的主干网络是U-Net,不是纯Transformer。但U-Net里的关键模块——跨注意力层——用的是Transformer的注意力机制。所以严格来说,Stable Diffusion是“U-Net+Transformer”的混合架构,而不是纯Transformer。这一点在理解它的行为特性时很重要,因为U-Net的卷积结构带来了局部归纳偏置,这让它在图像生成上比纯Transformer更高效。
2.2 文本编码器:三个模型共享的“翻译官”
GPT-4、Imagen、Stable Diffusion都需要把自然语言输入转换成模型能理解的向量表示。GPT-4自己就是文本模型,它的tokenizer和embedding层直接完成这个转换。Imagen用的是T5-XXL文本编码器,Stable Diffusion用的是CLIP文本编码器。这三个编码器的选择,直接影响了模型对提示词的理解能力。
CLIP文本编码器的特点是它在训练时就和图像编码器对齐了,所以它对“视觉相关”的文本描述特别敏感。你写“a photo of a cat sitting on a windowsill”,CLIP能很好地捕捉到“cat”“windowsill”“sitting”这些视觉概念。但如果你写很抽象的哲学描述,CLIP的表现就会下降。T5-XXL是纯文本编码器,它在纯语言理解上更强,但对视觉概念的对齐不如CLIP直接。
这个差异在实际使用中非常明显。Stable Diffusion的提示词写法讲究“具体、视觉化、避免抽象”,就是因为CLIP编码器的特性决定的。你写“beautiful scenery”不如写“mountain lake with pine trees and morning mist”效果好,因为后者提供了更多CLIP能对齐的视觉概念。
提示:如果你在用Stable Diffusion,提示词里尽量用具体的名词和形容词,避免抽象概念。这是CLIP编码器的特性决定的,不是玄学。
2.3 位置编码:让模型知道“谁在前谁在后”
Transformer本身没有顺序概念,所以需要位置编码(Positional Encoding)来告诉模型每个token或patch在序列中的位置。GPT-4用的是可学习的位置编码或者旋转位置编码(RoPE),Imagen和Stable Diffusion在图像patch序列上也用了类似的位置编码方案。
位置编码的设计直接影响模型能处理的最大序列长度。GPT-4的上下文窗口从4K扩展到32K甚至128K,背后就是位置编码方案的改进。Stable Diffusion的图像分辨率从512x512提升到1024x1024,也需要调整位置编码来适应更长的patch序列。
这里有个实操中的坑:如果你想把Stable Diffusion的生成分辨率调高,不能简单地把输入尺寸改大,还需要检查位置编码是否支持更长的序列。有些社区模型在训练时用的分辨率是512,你直接跑1024可能会出问题,因为位置编码没覆盖那么长的序列。正确的做法是用高分辨率微调过的模型,或者用分块生成再拼接的方案。
2.4 缩放定律:为什么模型越大效果越好
缩放定律(Scaling Law)是这三个模型共同遵循的经验规律:模型参数量、数据量、计算量同时增加时,模型性能会可预测地提升。GPT-4的参数量据传在万亿级别,Imagen的参数量在数十亿级别,Stable Diffusion的参数量在十亿级别。这个参数量差异直接决定了它们在各自任务上的表现上限。
但缩放定律不是万能的。Stable Diffusion之所以能在消费级显卡上跑起来,是因为它用了潜在扩散(Latent Diffusion)的方案,把图像压缩到低维潜在空间再生成,大幅降低了计算量。Imagen直接在像素空间做扩散,质量更高但计算成本也更高。GPT-4的自回归生成每一步都要跑整个模型,推理成本随序列长度线性增长。
这三个模型的工程取舍,本质上都是在缩放定律和计算成本之间找平衡点。Stable Diffusion选择了“降维+开源”,Imagen选择了“高质量+闭源”,GPT-4选择了“通用能力+闭源API”。没有绝对的对错,只有场景适配。
3. 核心支柱二:扩散模型如何从噪声中“雕刻”出图像
3.1 扩散模型的基本直觉:加噪与去噪
扩散模型的核心思想可以用一句话概括:先给图像逐步加噪声,直到变成纯噪声,然后训练一个网络学会从噪声中逐步恢复出图像。训练时是加噪过程,推理时是去噪过程。这个思路听起来简单,但背后的数学推导和工程实现有很多细节。
加噪过程是固定的,不需要学习。给定一张图像x0,每一步加一点高斯噪声,经过T步后变成纯噪声xT。去噪过程是需要学习的,网络输入是带噪声的图像和当前时间步t,输出是预测的噪声或者去噪后的图像。训练目标就是让网络的预测尽可能接近真实噪声。
Stable Diffusion的T通常设为1000步,但推理时不需要跑满1000步,可以用DDIM或者DPM-Solver等采样器加速到20-50步。这就是为什么Stable Diffusion能在几秒内出图,而不是跑几分钟。采样器的选择直接影响出图速度和质量,这个后面会详细讲。
3.2 文本条件注入:Cross-Attention的关键作用
扩散模型本身是无条件生成,要让它按文本描述生成,就需要把文本条件注入进去。Imagen和Stable Diffusion都用了Cross-Attention机制:在U-Net的每个分辨率层级上,把文本编码器的输出作为Key和Value,把图像特征作为Query,计算注意力权重,然后把文本信息融合到图像特征中。
这个机制的效果是:图像生成的每一步都会“参考”文本描述,确保生成方向不跑偏。文本编码器的质量直接决定了条件注入的效果。CLIP编码器对视觉概念敏感,所以Stable Diffusion对具体视觉描述响应好;T5-XXL对语言理解强,所以Imagen对复杂句子结构的处理更好。
实操中有一个常见问题:为什么我写了很详细的提示词,但模型只关注了其中一部分?这通常是因为Cross-Attention的权重分配问题。文本编码器会把整个提示词编码成一个序列,Cross-Attention会给每个token分配权重。如果某些token的权重被稀释了,模型就会忽略它们。解决办法是用提示词加权语法,比如在Stable Diffusion里用(word:1.2)来提升某个词的权重。
3.3 潜在空间 vs 像素空间:Stable Diffusion的降维策略
Stable Diffusion和Imagen最大的工程差异在于:Stable Diffusion在潜在空间做扩散,Imagen在像素空间做扩散。具体来说,Stable Diffusion先用一个VAE编码器把512x512x3的图像压缩成64x64x4的潜在表示,然后在这个低维空间上做扩散。Imagen直接在512x512x3的像素空间上做扩散。
这个差异带来的影响是巨大的。潜在空间的维度是64x64x4=16384,像素空间的维度是512x512x3=786432,差了48倍。这意味着Stable Diffusion的计算量大幅降低,能在消费级显卡上跑起来。但代价是VAE编码器的压缩会损失一些细节,所以Stable Diffusion在高频细节上不如Imagen。
这个取舍在实际使用中很明显。Stable Diffusion生成的人脸、文字、精细纹理容易出现瑕疵,因为VAE的压缩损失了这些高频信息。解决办法是用高分辨率修复(Hires Fix)或者用专门的VAE模型来改善解码质量。Imagen没有这个问题,但它的计算成本让它很难在消费级硬件上部署。
3.4 采样器选择:速度与质量的权衡
Stable Diffusion支持多种采样器,每种采样器的速度和质量不同。常用的有DDIM、Euler、Euler a、DPM++ 2M、DPM++ 2M Karras等。DDIM是早期方案,速度快但质量一般;Euler a是社区常用方案,质量不错但随机性强;DPM++ 2M Karras是较新方案,质量和速度平衡得比较好。
采样器的选择没有绝对的最优解,取决于你的具体需求。如果你要快速预览,用Euler a跑20步就够了;如果你要最终出图,用DPM++ 2M Karras跑30-40步效果更好。步数也不是越多越好,超过一定步数后质量提升会边际递减,甚至可能过拟合导致画面变差。
注意:不同采样器对步数的敏感度不同。Euler a在20-30步表现好,DPM++ 2M Karras在25-40步表现好。不要盲目堆步数,先查一下你用的采样器的推荐步数范围。
4. 核心支柱三:预训练+微调范式如何让模型“学会”特定能力
4.1 预训练:海量数据上的通用能力积累
GPT-4、Imagen、Stable Diffusion都经历了大规模预训练阶段。GPT-4在数万亿token的文本数据上训练,Imagen在数十亿图文对上训练,Stable Diffusion在LAION-5B的数十亿图文对上训练。预训练的目标是让模型学会通用的表示能力,而不是特定任务。
预训练的数据质量和规模直接决定了模型的上限。Stable Diffusion用的是LAION-5B数据集,这个数据集是从互联网上爬取的图文对,质量参差不齐。所以Stable Diffusion的基座模型在生成质量上不如Imagen,因为Imagen用了内部筛选过的高质量数据集。但Stable Diffusion的开源特性让社区可以基于它做微调,用高质量数据弥补基座的不足。
这个差异在实际使用中很明显。Stable Diffusion的官方基座模型出图质量一般,但社区微调模型(如DreamShaper、Realistic Vision等)质量高很多。这些微调模型用了精选的高质量图像数据,在特定风格上远超基座。这就是预训练+微调范式的威力:基座提供通用能力,微调注入特定能力。
4.2 微调技术:LoRA、DreamBooth、Textual Inversion
Stable Diffusion社区发展出了多种微调技术,每种技术适合不同场景。LoRA(Low-Rank Adaptation)是在模型权重上叠加低秩矩阵,训练参数量小,适合风格迁移和角色定制。DreamBooth是用少量图像微调整个模型,适合特定主体定制,但训练成本高。Textual Inversion是学习新的文本嵌入向量,适合学习特定概念,但效果受限于CLIP编码器的表达能力。
LoRA是目前最流行的方案,因为它的训练成本低、效果好、文件小。一个LoRA文件通常只有几十MB,可以快速加载和切换。训练一个LoRA在消费级显卡上只需要几十分钟到几小时,用Kohya SS等工具可以傻瓜式操作。DreamBooth效果更好但训练成本高,通常需要24GB以上的显存。Textual Inversion适合学习抽象概念,比如特定画风或者特定物体,但对复杂主体的还原能力有限。
选择哪种微调技术,取决于你的具体需求。如果你要定制一个特定角色,DreamBooth效果最好;如果你要迁移一种画风,LoRA最划算;如果你要学习一个抽象概念,Textual Inversion可以试试。我自己的经验是,大部分场景下LoRA够用了,除非你对还原度要求极高。
4.3 人类反馈强化学习:让模型更“懂”人
GPT-4用了RLHF(Reinforcement Learning from Human Feedback)来对齐人类偏好,Imagen和Stable Diffusion也用了类似的技术来改善生成质量。RLHF的核心思路是:先训练一个奖励模型来预测人类对输出的偏好,然后用强化学习让生成模型最大化这个奖励。
这个技术对模型行为的影响很大。GPT-4之所以能理解复杂的指令并给出有用的回答,RLHF功不可没。Stable Diffusion的社区模型之所以能生成更符合审美的图像,也是因为微调过程中用了人类偏好数据。Imagen的论文里专门提到了用RLHF来改善图像的美学质量和文本对齐度。
但RLHF也有副作用。过度优化奖励模型可能导致模式崩溃,生成结果变得单一。GPT-4有时候会给出过于保守的回答,Stable Diffusion有时候会生成过于“安全”的图像,都是RLHF的副作用。在实际使用中,你需要根据具体需求调整提示词,绕过这些限制。
4.4 从基座到产品:工程化落地的关键步骤
预训练和微调之后,模型还需要经过工程化才能变成产品。GPT-4的工程化包括推理优化、API设计、安全过滤等。Stable Diffusion的工程化包括WebUI开发、模型管理、插件生态等。Imagen的工程化主要是内部部署和API封装。
Stable Diffusion的工程化生态特别值得一说。AUTOMATIC1111的WebUI和ComfyUI是两个最流行的前端,它们把Stable Diffusion的推理流程封装成了可视化操作。WebUI适合新手,界面直观;ComfyUI适合进阶用户,节点式编程灵活度高。这两个工具的出现,大幅降低了Stable Diffusion的使用门槛。
工程化落地的关键是把模型能力封装成用户友好的接口。GPT-4的API设计让开发者可以几行代码调用强大的文本生成能力。Stable Diffusion的WebUI让用户不需要写代码就能出图。Imagen的API让企业可以集成图像生成能力。这些工程化工作,才是模型真正产生价值的地方。
5. 实操中的常见问题与排查技巧
5.1 Stable Diffusion启动报错:ImportError: dlopen的排查思路
Mac版Stable Diffusion启动时报ImportError: dlopen,这个错误我遇到过好几次,通常和动态链接库的加载有关。具体原因可能有几种:Python版本不匹配、依赖库版本冲突、系统架构不兼容(Intel vs Apple Silicon)、或者某些库没有正确编译。
排查步骤是这样的:先确认Python版本,Stable Diffusion WebUI通常需要Python 3.10.x,版本太高或太低都可能出问题。然后检查依赖库版本,用pip list看看有没有版本冲突。如果是Apple Silicon的Mac,确认你安装的是arm64版本的库,而不是x86版本。最后检查系统权限,有些库需要特定的权限才能加载。
提示:Mac上跑Stable Diffusion,建议用conda创建独立的Python环境,避免和系统Python冲突。安装依赖时用
pip install而不是conda install,因为很多库在conda上的版本更新不及时。
如果以上都检查了还是报错,可以试试重新安装torch和torchvision,指定适合你系统的版本。Apple Silicon的Mac需要安装torch的arm64版本,用pip install torch torchvision通常会自动选择正确版本。如果不行,去PyTorch官网查一下对应你系统的安装命令。
5.2 模型加载失败:常见原因与解决方案
Stable Diffusion模型加载失败的原因很多,最常见的是模型文件损坏、模型格式不匹配、显存不足。模型文件损坏通常是下载不完整导致的,检查文件大小是否和官方一致。模型格式不匹配是指你下载的是safetensors格式但WebUI只支持ckpt格式,或者反过来。显存不足是指模型太大,你的显卡跑不动。
排查顺序:先检查文件完整性,用sha256sum对比官方哈希值。然后检查模型格式,safetensors是更安全的格式,推荐优先使用。最后检查显存,用nvidia-smi查看显存占用,如果接近满载就需要换小模型或者降低分辨率。
模型加载失败还有一个容易被忽略的原因:模型版本和WebUI版本不兼容。有些新模型需要较新版本的WebUI才能加载,旧版本WebUI可能报错。解决办法是更新WebUI到最新版本,或者用--skip-torch-cuda-test等参数跳过检查。
5.3 出图质量差:从提示词到参数的全面排查
出图质量差是新手最常遇到的问题,原因可能出在提示词、采样器、步数、CFG Scale、分辨率等多个环节。我的排查顺序是:先看提示词是否具体、视觉化,再看采样器和步数是否匹配,然后看CFG Scale是否合适,最后看分辨率是否和模型训练分辨率一致。
提示词方面,避免抽象词汇,用具体的名词和形容词。采样器方面,Euler a适合快速预览,DPM++ 2M Karras适合最终出图。步数方面,20-40步通常够用,太多反而可能过拟合。CFG Scale方面,7-12是常用范围,太低会导致生成结果和提示词不相关,太高会导致画面过饱和。分辨率方面,512x512是Stable Diffusion 1.5的训练分辨率,768x768是Stable Diffusion 2.1的训练分辨率,用错分辨率会导致画面崩坏。
还有一个容易被忽略的因素:负面提示词。负面提示词可以排除不想要的元素,比如low quality, blurry, bad anatomy。合理使用负面提示词能显著提升出图质量。但负面提示词也不是越多越好,过度使用可能导致画面过于干净而失去细节。
5.4 显存不足:优化策略与硬件选择
显存不足是跑Stable Diffusion的常见瓶颈。优化策略包括:降低分辨率、用半精度(fp16)、用注意力优化(xformers)、用模型切分(model offloading)、用低秩模型(LoRA)替代全量微调。这些策略可以组合使用,根据你的硬件条件选择。
降低分辨率是最直接的方案,512x512比1024x1024省显存。半精度是把模型权重从fp32转成fp16,显存占用减半,质量损失很小。xformers是注意力机制的优化实现,能显著降低显存占用和提升速度。模型切分是把模型的不同层放到不同设备上,适合多GPU场景。LoRA替代全量微调是因为LoRA只训练少量参数,显存需求低很多。
硬件选择方面,NVIDIA显卡的兼容性最好,因为CUDA生态成熟。显存建议8GB起步,12GB以上更舒适,24GB可以跑大部分模型和微调任务。AMD显卡也能跑,但需要ROCm支持,配置起来麻烦一些。Apple Silicon的Mac可以用MPS后端跑,速度不如NVIDIA但能用。
5.5 常见问题速查表
| 问题现象 | 可能原因 | 排查方法 | 解决方案 |
|---|---|---|---|
| 启动报ImportError | 依赖库版本冲突 | 检查Python和库版本 | 重建虚拟环境,重装依赖 |
| 模型加载失败 | 文件损坏或格式不匹配 | 检查文件哈希和格式 | 重新下载,转换格式 |
| 出图质量差 | 提示词或参数不当 | 逐项检查提示词、采样器、步数 | 优化提示词,调整参数 |
| 显存不足 | 模型太大或分辨率太高 | 查看显存占用 | 降分辨率,用fp16和xformers |
| 生成速度慢 | 采样器或步数设置不当 | 检查采样器和步数 | 换快速采样器,减少步数 |
| 画面崩坏 | 分辨率与模型不匹配 | 检查模型训练分辨率 | 用匹配的分辨率生成 |
6. 从技术支撑到实际应用:我的几点经验体会
6.1 理解底层逻辑比记参数更重要
我刚开始玩Stable Diffusion的时候,花了很多时间记各种参数和提示词模板,但效果时好时坏。后来把扩散模型的基本原理和Cross-Attention的机制搞清楚了,才发现很多问题都有统一的解释。比如为什么提示词要具体?因为CLIP编码器对视觉概念敏感。为什么CFG Scale不能太高?因为过高的引导强度会导致采样过程偏离真实分布。
理解底层逻辑之后,调参就不再是碰运气,而是有方向的优化。你知道每个参数在做什么,就知道该怎么调。这个认知转变,是我从“会用”到“用好”的关键一步。
6.2 工具是死的,场景是活的
GPT-4、Imagen、Stable Diffusion都是工具,工具的价值在于解决具体问题。我见过很多人沉迷于研究模型参数,但很少思考“我用这个模型解决什么问题”。这个本末倒置的现象在AI圈很常见。
我的建议是:先明确你的场景,再选择工具和参数。如果你要生成写实人像,用Realistic Vision这类微调模型;如果你要生成二次元插画,用Anything V5这类模型;如果你要生成产品概念图,用ControlNet来控制构图。场景决定工具,工具服务场景。
6.3 持续学习是这个领域的必修课
生成式AI的发展速度太快了,三个月不学习就可能落伍。GPT-4之后有GPT-4 Turbo,Stable Diffusion之后有SDXL,Imagen之后有Imagen 2。新的采样器、新的微调技术、新的工程工具层出不穷。
我的学习方法是:跟踪几个核心信息源,比如arXiv上的新论文、GitHub上的热门项目、社区里的技术讨论。不需要每篇都精读,但要知道大概方向。遇到具体问题时,再深入查资料。这种“广度优先,深度按需”的学习策略,在快速变化的领域里比较高效。
6.4 最后分享一个小技巧
如果你在用Stable Diffusion,试试在提示词里加入(masterpiece:1.2), (best quality:1.2),同时在负面提示词里加入(worst quality:1.4), (low quality:1.4)。这个组合在大部分模型上都能稳定提升出图质量。原理是提升高质量token的注意力权重,同时抑制低质量token的影响。
但这个技巧不是万能的。有些模型对提示词加权不敏感,有些模型本身质量就很高不需要额外加权。你需要根据具体模型测试效果。我自己的经验是,在基座模型和早期微调模型上效果明显,在最新的高质量模型上效果有限。
这个内容后续还可以这样扩展:深入讲一下ControlNet的原理和使用方法,或者讲一下如何训练自己的LoRA模型。这两个方向都是实操中很实用的技能,值得单独展开。