如果你跟我一样,拿到 OpenClaw 的技术报告后会先翻预训练那一章,那你多半也会在看完之后陷入沉默——报告里对数据规模、计算量写得很大方,但真正涉及损失函数设计的地方反而惜字如金,只含糊提了一句“使用了多模态预训练目标”。这就像一个厨师告诉你“这道菜用了秘制酱料”,却不肯说酱料里到底有没有放酱油。于是社区里就一直有人在问:OpenClaw 的预训练到底用了多模态对比学习?还是用了生成式对抗?再或者,两者都上了?
我最初也想直接从代码和权重里找答案,但在公开信息有限的前提下,更靠谱的做法是把这个问题拆成三层来分析:概念层、架构层、证据层。概念层解决“这两个词分别指什么,能不能混为一谈”;架构层解决“从模型结构和训练目标反推,OpenClaw 更可能是哪种范式”;证据层解决“在开源权重和代码痕迹里,哪些线索可以交叉印证”。这篇文章就把这三层拆开讲透,适合正在做模型调研、准备复现预训练流程、或者单纯想搞清楚大模型技术选型逻辑的读者。你会看到,这类“是否使用了 XX 技术”的提问,很多时候真正的答案是“不完全是非黑即白”,关键要看损失函数在哪儿挂了钩。
1. 先把问题里的两个概念拆清楚:对比学习和 GAN 根本不是同一条赛道
1.1 多模态对比学习在预训练里到底学的是什么
要判断 OpenClaw 有没有用多模态对比学习,先得知道这类方法在模型里留下了什么“指纹”。
多模态对比学习的代表就是 CLIP 那套思路:把图像编码器和文本编码器分别视为两个特征提取器,训练目标是让“配对的图文”在共享嵌入空间里靠得近,让“不配对的图文”离得远。核心损失一般长这样:
L_contrastive = -log [ exp(sim(I_i, T_i) / tau) / sum_j exp(sim(I_i, T_j) / tau) ]这个sim通常是余弦相似度,tau是学习出来的温度系数。如果你在某个模型的代码仓库里看到logit_scale、ImageEncoder、TextEncoder、InfoNCE这类名字,基本就可以断定它用了对比学习家族的方法。
关键点是,对比学习是一种表征学习手段,它不直接生成图像或文本,它只负责把特征空间“掰成”一个对齐良好的形状。用生活化的方式说,对比学习像是一个双人质检小组:图像编码器和文本编码器各自从样品里提取特征描述,然后质检小组会根据两份描述是否指向同一件商品来打分,不断让两份描述口径一致。它不负责生产商品,只负责校准标准。
1.2 生成式对抗的原始定义与它在预训练中的尴尬位置
生成式对抗网络(GAN)则是另一套逻辑。它由生成器和判别器构成,生成器负责“做出以假乱真的样品”,判别器负责“分辨样品是真货还是假货”。两者互相搏斗,最后生成器练出了能以假乱真的本事。这个框架本质上是生成式建模,目标是直接造出数据分布里的新样本。
问题在于:预训练阶段用 GAN 是非常别扭的。大模型的预训练面向海量互联网数据,数据分布极其复杂和高维,GAN 的训练稳定性在大规模、高分辨率、多模态的场景下会急剧下降。训练 GAN 需要小心翼翼地平衡生成器和判别器的能力,一旦失衡就容易模式坍塌,也就是生成器只学会产出少数几种相似样本。对“追求泛化能力”的基础模型预训练来说,这是一种致命风险。更直接的原因是,大模型预训练的算力预算非常紧张,每一轮梯度更新都希望“稳妥地降低损失”,而 GAN 的对抗博弈天然带有波动性,难以保证训练曲线的稳定收敛。所以在主流大模型的预训练里,GAN 几乎是不出现的,它的地盘早就被扩散模型和自回归生成模型瓜分了。
这里还有一个常见的混淆点:很多人会把“生成式预训练”和“GAN”划等号,其实这是两码事。GPT 那种“预测下一个 token”是生成式预训练,但它完全没有任何对抗成分;扩散模型加噪去噪也是生成式建模,但它也没有判别器。把“生成式”等同于“对抗”,是很多技术讨论里最容易跑偏的地方。
1.3 为什么这两个概念经常被绑在一起问
之所以大家会把“多模态对比学习”和“生成式对抗”放在同一个问题里,是因为它们在多模态生成模型的发展历史里确实出现过“组合拳”式的研究方向。早期有一些工作尝试用对比学习做图文对齐,再配合 GAN 做图像生成,形成“理解+生成”的双阶段流程。但这类方案当年的定位是“任务模型”,不是基础模型预训练范式。
OpenClaw 这个项目从命名风格和技术定位来看,更接近于近年流行的多模态基础模型。这类模型通常只有一个主干网络,文本和图像都经过同一个 Transformer 家族处理,预训练目标就是最朴素的“下一个 token 预测”或者“掩码重建”。在这种框架下,你很难找到“双塔”对比的容身之地,更别说 GAN 了。所以当我看到这个问题时,我的第一反应不是“它用没用”,而是“提问者可能把模型预训练的底层逻辑想象得过于混合了”。
2. 从架构痕迹反推 OpenClaw 的预训练目标:双塔与单塔的岔路口
2.1 架构上的硬线索:投影头、温度参数和编码器分离
判断一个模型有没有做过对比学习,最直接的方法就是看它的主干结构是不是“双塔”。CLIP 风格的下游模型一般长这样:图像编码器独立存在,文本编码器独立存在,两者之上各接一个投影头,把特征映射到共同维度,再算相似度。如果 OpenClaw 的权重文件里出现类似vision_encoder.proj、text_encoder.proj、logit_scale这样的张量名,那答案几乎呼之欲出:它要么用了对比学习,要么至少把对比损失当作辅助目标之一。
反过来,如果 OpenClaw 是一个统一主干结构,只有一套 Transformer 权重同时处理文本 token 和图像 patch,那么它的预训练目标基本就绕开了经典意义的对比学习。统一主干意味着输入侧无论是文字还是图片,最终都会变成一串序列,模型要做的只是预测“下一个序列元素”。这种设置下,图像和文本之间并没有显式拉近距离的损失项,它们的语义对齐是在自回归预测的过程中隐式学习的。
我之前见过一个内部演示项目,团队号称做了“多模态统一预训练”,结果一查权重,发现根本没有独立的图像塔和文本塔,而是所有模态都塞进同一个 Transformer。虽然效果也不错,但你要说它用了对比学习,那是不严谨的。
2.2 训练日志里的损失项比论文摘要更有说服力
论文摘要里说“使用了多模态预训练目标”是非常模糊的表述,真正有信息量的是训练日志中的 loss 名称。对比学习的典型 loss 名包括contrastive_loss、infonce_loss、clip_loss、ema_logit_scale等。生成式预训练的典型 loss 名则是cross_entropy_loss、next_token_loss、reconstruction_loss、diffusion_loss。
如果你在某开源社区下载过 OpenClaw 的中间 checkpoint,并且配套的日志文件里能看到loss_contrastive和loss_ce同时出现,那说明它做了多任务训练,对比学习只是辅助目标之一。但就目前公开信息来看,OpenClaw 的训练汇报里更常见的是loss_ce主导,这传达的信号是:它采用的是典型的自回归/生成式预训练路线,对比学习即使有,也是被放在很边缘的辅助位置,不是主轴。
这里要提醒一句:看日志时别只看 loss 的平均值,要观察 loss 的尺度关系。对比学习的损失一般数值较小,比如 0.1 到 1.0 之间,而自回归的交叉熵动辄 2 到 5。如果某个训练的日志里loss_ce从 4 降到 2.5,而contrastive_loss一直停留在 0.2 附近,说明对比损失的作用可能只是“锦上添花”,这类模型对外宣称“多模态对齐”时,你最好把它理解为“弱对齐”。
2.3 对比学习与生成式目标在 OpenClaw 身上的适用性差异
从任务形态来看,OpenClaw 既然是一个面向多模态理解与生成的基础模型,它的训练目标必须支持“可泛化的能力底座”。对比学习擅长让模型理解“图文是否匹配”,但它的表征粒度是全局的、匹配级的,很难承载细粒度的像素级理解或生成能力。
生成式目标则刚好相反,它在每个 token 级别都施加监督信号,模型被迫学到非常细的语义和结构信息。这也是为什么现代多模态模型几乎一边倒地选择“自回归生成+统一主干”的范式。OpenClaw 如果要同时支持视觉问答、图像描述、文本生成这些任务,选择生成式目标是最省力也最稳妥的路径。
从工程角度讲,纯自回归目标的分布式训练实现非常成熟,数据切分、梯度累积、吞吐优化都有现成方案。如果加入对比学习分支,就需要额外维护两个编码器的同步问题、大 batch size 的负样本队列,以及温度系数的调度策略,这会让训练基础设施的复杂度上一个台阶。一个冷静的项目团队,在预训练阶段通常不会轻易引入这种额外负担。
3. GAN 在预训练里的真实处境:不是消失,而是换了岗位
3.1 为什么大模型预训练几乎见不到判别器对抗
先给个硬结论:OpenClaw 的预训练阶段大概率没有用 GAN。这不是对 OpenClaw 的贬低,而是整个技术生态集体选择的结果。
GAN 的核心问题是“训练目标不稳定”。生成器和判别器像一个互相拉扯的双人团队,判别器太强,生成器就学不到东西;生成器太强,判别器又失去指导意义。在图像生成领域,GAN 经过大量调参也能稳定训练,但那是针对“单一域”数据,比如人脸、风景、动漫头像。OpenClaw 要处理的是互联网级别的图文混合数据,数据分布里的模式数量极其庞大,对抗训练的调参难度会指数级上升。
另一个问题是 GAN 缺乏密度估计能力。它能把生成样本的分布逼近真实分布,但很难告诉你“某个样本的概率密度是多少”。而预训练模型经常需要输出精确的概率,特别是语言侧,每个 token 都需要一个可分解的、归一化的概率分布。判别器对抗训练无法直接提供这种可分解的词表级分布,所以语言相关的预训练几乎不可能用 GAN 作为主损失。
3.2 对比学习与扩散模型如何瓜分了 GAN 的地盘
有人可能会问:既然 GAN 曾经是多模态生成的主流,为什么现在被挤到边缘?答案很简单:扩散模型在生成质量上更稳定、更容易并行训练,而且在数学上没有对抗博弈带来的不确定性。扩散模型通过反复加噪—去噪的方式学习数据分布,训练损失就是简单的均方误差或变分下界,非常稳定。
多模态对齐的任务则被对比学习稳稳接住了。对比学习不需要生成像素,它只需要在特征空间里拉近相同语义的距离,所以计算开销比生成式对抗小得多,而且训练曲线平滑。
OpenClaw 如果要做一个“多模态预训练”,最合理的设计就是把自回归目标作为主损失,把对比学习作为辅助损失,再用扩散模型承担图像生成部分——但扩散模型不是 GAN,这一点一定要和“生成式对抗”区分开。
3.3 如果 OpenClaw 真的用了对抗损失,它最可能出现在哪个环节
虽然预训练阶段几乎没有对抗损失的容身之处,但模型训练流程里确实存在一个常见的位置会用对抗思维:奖励模型或者说偏好对齐阶段。
在 RLHF 式的对齐流程中,人类偏好被浓缩成一个奖励函数,模型在这个奖励信号下做强化学习微调。在少数实践里,团队会训练一个判别器来区分“模型输出”和“人类偏好输出”,以此作为隐式奖励,这其实就是对抗性思想的变体——不过它已经不是预训练的一部分了,而是对齐后训练的一部分。
如果你在 OpenClaw 的技术报告中看到“使用了偏好模型”或“输出质量评估器”,那更像是在说这类对抗式判别器,而不是 GAN 意义上的生成器—判别器组合。把对齐阶段的判别器误认为预训练阶段的 GAN,是技术解读中非常常见的错位。
4. 在公开信息有限时,我如何从权重、代码和数据集配比里找证据
4.1 权重文件里的张量名就是最诚实的说明书
下载一个模型的 checkpoint,用 Python 加载权重文件,遍历张量名,往往比看十篇论文摘要都有用。我建议你写一段简单的遍历逻辑:
import torch ckpt = torch.load("openclaw_checkpoint.bin", map_location="cpu") if isinstance(ckpt, dict) and "model" in ckpt: state_dict = ckpt["model"] else: state_dict = ckpt keys = list(state_dict.keys()) for k in keys: if any(marker in k.lower() for marker in [ "contrast", "logit_scale", "proj", "clip", "text_encoder", "vision_encoder" ]): print(k)如果输出里出现类似visual.proj、text.proj、logit_scale的键,那说明模型在结构上支持对比学习;如果输出里只有一层encoder或者transformer,那基本就是统一主干的生成式架构。还有一个细节:对比学习模型通常会有独立的visual和text两个大块分支,而统一主干模型的权重里只有一个model前缀,不会有模态分叉。
我自己做模型调研时都会跑一遍这个脚本,它能在五分钟内过滤掉大量猜测。很多团队的技术报告会刻意模糊训练细节,但权重文件是压缩后的真实结构,骗不了人。
4.2 代码仓库里的 loss 实现和默认参数会暴露真实训练目标
权重结构告诉你的是“骨架”,代码仓库里的 loss 实现才会告诉你“骨架里到底跑了什么逻辑”。
重点看这几个文件:trainer.py、loss.py、modeling.py。在 OpenAI 的 CLIP 开源仓库里,loss.py中会有CLIPLoss类和logit_scale的初始化函数;在纯自回归开源项目里,loss.py通常就是对CrossEntropyLoss的一层薄封装。
如果 OpenClaw 的代码仓库里同时存在contrastive和autoregressive两个 loss 模块,你需要进一步看它们在训练循环里的加权方式。有的项目会把contrastive_loss的权重设成 0.1,把ce_loss的权重设成 1.0,这属于“辅助对比学习”;有的项目则对两者一视同仁,那就是真正的多任务预训练。
此外,temperature参数的初始值也能说明问题。对比学习一般会初始化一个可学习的logit_scale,初始值通常在 1 到 100 之间,训练中缓慢调节;自回归模型则不会设置这样一个可学习参数。所以当你看到config.json里有logit_scale或temperature字段时,这个模型大概率在某个阶段接触过对比学习。
4.3 数据配比和采样策略隐含的模态组织方式
预训练数据的采样策略是最后一个隐蔽证据。对比学习预训练的数据管线往往要求“图文对”以一定的对齐方式组织,每一条 sample 都是一个 pair 或一个 batch 内包含多个 pair。它的 DataLoader 会固定返回两个模态的视角,图像和文本之间具有对齐关系。
生成式预训练的数据管线则完全不同,它会把图像和文本都统一成 token 序列,然后拼成一条长序列。图像 token 在前、文本 token 在后,中间用一个分隔符隔开。你可以在数据预处理里看到image_tokenizer和text_tokenizer同时工作,但它们的结果会拼接到同一个序列上。
OpenClaw 这类模型的源代码如果公开,你可以直接看它的dataset.py和数据格式:如果数据集是 parquet 格式,每个记录包含image和caption两个字段,且始终成对出现,那更像对比学习;如果数据集是纯文本序列格式,图片已经离线转换成了离散 token,那就是生成式路线。注意,“图文成对出现”本身太常见了,任何做图文多模态的模型都得有对齐的数据,所以这个线索只能当辅助判据,不能单独定罪。
4.4 一个容易被忽略的信号:中间 checkpoint 的收敛行为
有时候你拿不到训练日志,但能拿到不同训练步数的中间 checkpoint。这时候可以通过观察模型行为的演化来推断训练目标。对比学习模型通常会在训练早期就表现出很强的图文匹配能力,给它一张图,它能很快选出正确标题;自回归模型早期则更擅长文本续写,图文匹配能力相对滞后。
如果你有 OpenClaw 在 5 万步、10 万步、20 万步的三个 checkpoint,可以跑一个简单的图文检索实验:用同一个图文对数据集做 top-1 检索准确率。如果准确率从 5 万步到 20 万步提升得非常平滑且快速,说明对比损失可能占了一部分权重;如果提升缓慢,甚至在某一阶段停滞后突然跃升,那更像是自回归目标中的隐式对齐在起作用。
坦率地说,大部分时候外部研究者没有机会拿到中间 checkpoint,所以这个方法的实操性不如前几种强。但它提供了一种思考框架:当证据分散在不同位置时,要交叉验证,而不是只盯着一处下结论。
5. 回到 OpenClaw 这个问题本身:我的结论与一套可复用的判断流程
5.1 综合判断:OpenClaw 更可能的预训练路线
基于目前公开信息里的架构描述、模型规模和技术生态趋势,我的判断是:OpenClaw 的预训练主体更接近统一主干 + 自回归生成目标,也就是 GPT 风格的多模态序列建模。它在训练中用一个cross_entropy_loss主损失来预测所有模态的 token 序列,图像和文本被统一成离散 token 或连续 embedding 序列后输入同一个 Transformer。
对比学习不是“完全不存在”,但它更可能是辅助角色。如果团队追求更好的图文检索能力或表征质量,他们可能会在训练流程中加入一个辅助的对比损失,但这不是主干。至于 GAN,在预训练阶段几乎可以排除;如果你看到 OpenClaw 相关代码里出现类似判别器或对抗损失的模块,那更可能是用在偏好对齐或输出质量评估环节,而不是数据分布学习环节。
这个结论并不令人惊讶:近年发布的多模态基础模型几乎都走向了同一条路线。自回归目标的工程实现最成熟、训练曲线最稳定、支持任务类型最广,对比学习作为辅助可以补足表征质量,但 GAN 因为收敛不稳定且难以和序列生成范式融合,被主流生态淘汰出预训练主赛道。OpenClaw 作为同时代的产物,不太可能逆着这个趋势走。
5.2 一套可以迁移使用的判断流程
我把这套判断方法整理成四步,以后你再看到任何一个新模型产生类似疑问,都可以直接用:
第一步,翻权重结构。加载 checkpoint,遍历张量名,看有没有visual分支、text分支、logit_scale这类对比学习特征。有这些,对比学习才可能进入候选名单;没有,直接转向自回归/扩散假设。
第二步,翻代码库的 loss 模块。看默认启用的损失名称和权重,区分“主损失”和“辅助损失”。一个 loss 的加权值如果和主损失相差一个数量级以上,基本就是辅助目标。
第三步,翻数据管线。看 dataset 的字段组织方式。图文 pair 组织 + batch 内负采样,偏向对比学习;统一 token 序列组织,偏向生成式预训练。
第四步,对结论做安全性检验。问自己一个问题:如果这个模型同时在预训练里引入对抗博弈和对比对齐,训练稳定性会如何?如果答案是无法在合理算力预算内收敛,那么“两者都用了”的概率就很低。技术判断要讲工程合理性,一个方案即使理论上很美,工程上不划算,也不会被真实选用。
最后再分享一个技术之外的体会:很多“模型到底用了什么技术”的争议,本质上是概念口径不一致。对比学习、生成式对抗、扩散模型、自回归生成,这几种方法的边界在学术定义上很清楚,但在工程实践中经常被包装成“多模态统一框架”之类的商业话术。做技术调研时,不要被名字牵着走,回到权重、日志和代码里去看那个真正跑起来的损失函数,它才是模型最诚实的自述。