ICLR 上放出的这份演讲主题,说实话让我这种常年追模型进展的人有点意外,却又觉得在意料之中。“The ChatGLM's Road to AGI”,单看这个名字就能读出不少信息:GLM 团队要把自己这几年怎么一步步做大模型、怎么思考通用人工智能这件事,摊开来讲一遍。ICLR 是机器学习方向公认的顶会,每年投稿量上万,能被邀请站上这个舞台做报告,本身就是对团队工作的一种认可。所以这篇博文我不想只复述讲稿,而是想站在从业者的角度,把这条“从 GLM 到 ChatGLM,再到 AGI 探索”的技术路线拆开来看,聊一聊它背后的模型架构演进、对齐工程、长文本处理、Agent 能力,以及每一个普通开发者可以从中借鉴什么。
标题里提到的“首个中国大模型团队”这个身份,其实放到技术讨论里反而不是最重要的。重要的是这个团队选择的路径:开源、低成本可部署、从基座模型一路做到应用层。这篇内容适合正在做大模型训练、微调或者想要理解大模型内部逻辑的工程师,也适合只是想知道“一个国产大模型凭什么站上国际顶会”的爱好者。我尽量把每一步的原理和实操都说透。
1. 演讲背后的技术定位与整体设计
1.1 ICLR 演讲意味着什么
ICLR 全称是 International Conference on Learning Representations,在学术界和工业界的认可度都很高。每年的投稿量已经超过一万篇,接收率长期压在 30% 以下。能在这种会议上发表论文已经很不容易,被邀请做主讲报告更是另一回事,往往意味着这个团队在某个方向上做出了被同行认可的关键贡献。
这次演讲主题的核心词有两个:一个是 ChatGLM,一个是 AGI。把这两个词放在一起,说明报告不只是讲一个具体模型的细节,而是想把整个技术的发展脉络和终极目标串起来。我个人的看法是,对于大模型团队来说,顶会演讲实际上是一种“技术宣言”,它向外界传递的信息是:我们的模型不是简单追热点,背后有一套关于智能怎么产生、怎么对齐、怎么扩展的完整思考。
对普通开发者来说,ICLR 演讲还有一个实际价值:很多论文不会写清楚的工程细节、数据配比、失败经验,在口头报告和问答环节里往往会露出更多。所以看这类演讲,不要只盯着效果图表,多留意他们强调的瓶颈和取舍。
1.2 ChatGLM 在技术坐标中的位置
要理解 ChatGLM 的路线,得先明确它和 GPT 系列的区别。GPT 采用的是 Decoder-only 架构,训练时只做从左到右的自回归预测;BERT 则是 Encoder-only,做双向的掩码语言建模。ChatGLM 前身 GLM(General Language Model)走的是另一条路:它把“自回归”和“双向注意力”结合了起来。
这种设计的直接好处是:在理解类任务上,双向上下文能带来更好的语义建模效果,而在生成任务上,自回归解码又能保持 GPT 那种流畅的生成能力。你可以把它理解成一个人同时具备“精读”和“速写”两种能力,精读用于把握全面信息,速写用于快速产出内容。所以 GLM 在论文里的定位就叫 General Language Model,不是单纯对标 GPT,也不是重做 BERT,而是试图在两者之间找一个新的平衡点。
从 GLM-130B 到 ChatGLM-6B、ChatGLM2、ChatGLM3,这个系列的产品策略也很清晰:一边把大模型做到千亿规模,验证数据和算力的上限;另一边把模型压缩到消费级显卡也能跑的量级,让中小团队和独立开发者都能玩起来。这种上下通吃的打法,在开源社区里积累了大量口碑。
2. 核心技术拆解:GLM 家族怎么一步步逼近 AGI
2.1 架构设计:不是简单复制 GPT
先说 GLM 的核心结构。它的实现思路是给出一个文本序列,随机遮蔽掉一部分 token,然后让模型以自回归的方式生成这些被遮蔽的内容。训练时使用了特殊的注意力掩码组合:被遮蔽的片段内部使用双向注意力,而片段之外保持自回归顺序。
这样做有个很关键的特性:模型在预测被遮蔽 token 时,能看到它左右两侧的上下文,因此对语义的理解比单向模型更充分;但同时因为生成过程仍然是自回归的,建模的损失函数和推理方式又与 GPT 一致。RoPE 旋转位置编码也在这里发挥作用,它让模型可以外推更长的序列长度,这为后续长文本能力的提升打下了基础。
还有一点值得注意:GLM 在预训练阶段除了自回归损失,还引入了“多任务指令预训练”的思路,在一开始就把不同 NLP 任务的格式混合进训练数据中。这种做法从源头让模型具备了调用多种能力的基础,而不是像早期模型那样只会在某个固定任务上生效。
从工程实现角度看,Prefix Decoder 的注意力掩码比普通 GPT 的掩码复杂,需要手动构造每个 batch 的布尔掩码矩阵。如果是你在从头训练一个类似模型,建议提前写好掩码生成模块并用单元测试验证,因为这里出 bug 很容易导致训练 loss 异常上升,而且不好排查。
2.2 数据工程与规模定律
模型架构决定了“天花板”,但训练数据才真正决定模型能跳多高。ChatGLM 系列在中文任务上表现突出,一个重要原因是数据配比不是简单地把英文数据翻译成中文,而是围绕中文语义特点做了专门清洗和筛选。
具体来说,数据工程中常见的几个环节是:去重、语言识别、质量过滤、毒性内容过滤、隐私信息脱敏。去重不只是去掉完全相同的内容,还要做近似去重,比如 SimHash 和 MinHash 方案。公开网页数据里有大量重复段落和模板化正文,不去重会导致模型在某些常见表达上过拟合,表现为回答内容空洞、反复使用固定句式。
质量过滤同样关键。我见过不少团队直接用爬取的网页喂给模型,结果模型学会了“点击查看更多”“本文由某某编辑”这类噪音。正确做法是训练一个分类器,根据正文长度、标点比例、信息密度等特征给每个文档打分,只保留高分数据。这个分数标准要自己根据验证集的表现人工抽检调优,没有银弹。
Scale 定律在这条路线里同样成立:在模型规模和训练数据量之间,更倾向于多放数据、适度控制模型参数。GLM 系列提供 6B 这个档位,很多任务上跑出来的效果与更大尺寸模型接近,与数据的精细化有很大关系。换句话说,小模型想追大模型,不能只拼算力,而是要在数据质量上做到超过别人的水平。
2.3 对齐工程:让模型说人话
预训练出来的模型本质上是一个“续写机器”,它只会预测下一个 token,不知道用户想要什么样的回答。ChatGLM 之所以好用,关键在对齐这一步。对齐分三个阶段:SFT(监督微调)、RM(奖励模型)、RLHF(基于人类反馈的强化学习)。
SFT 阶段需要构造大量的指令-回答对。这部分数据是各家最有壁垒的地方,因为数据质量直接决定了模型的语言风格和知识边界。好的指令数据要覆盖多种任务类型,包括写作、问答、翻译、代码生成、逻辑推理、角色扮演等。每条指令的粒度、期望回答的长度、语气都要尽量贴近真实使用场景。
RM 训练阶段,需要人类标注者对同一指令下的多个模型输出进行排序,然后训练一个奖励模型去预测哪种回答更受欢迎。这里有一个容易踩的坑:人类标注者的偏好差异很大,所以一般会综合多个标注者的排序结果,并且把不同标注者 ID 作为特征输入到奖励模型中,让模型学习到偏好中的共性。
RLHF 则是在奖励模型的指导下对 SFT 模型进行强化学习。常用算法包括 PPO 和近年火起来的 DPO。DPO 的优势是无需单独训练奖励模型,直接通过偏好数据优化策略模型,训练更稳定且显存占用更低。很多团队在实践中发现 DPO 在小模型上效果更可控,适合作为 RLHF 的轻量替代方案。
对齐不只是让模型“听话”,还包括安全对齐。这里的核心思路是让模型学会拒绝不合理请求,而不是生硬地回避所有问题。实际操作中要准备拒绝样本和边界样本,并对敏感场景做专项评测。这里说的安全,更多指技术层面的鲁棒性,比如防止 prompt 注入和有害内容生成,这是每一个上线服务的团队都必须面对的工程问题。
3. 走向 AGI 的实操路径:从训练到部署
3.1 基座模型训练流程实战
如果你也要从零开始训练一个类似 GLM 的大模型,第一件事是确定可用的算力。假设你手里有 8 张 A100-80G,想训练一个 6B 参数的模型,可以做一次初步显存估算:6B 参数在 FP16 下权重占 12GB,混合精度训练时 Adam 优化器维护的动量参数约占 2 倍即 24GB,梯度再占 12GB,光这些就已经逼近 48GB。加上激活值,单卡可能放不下。所以一般要搭配 ZeRO Stage 2 或 ZeRO Stage 3 把优化器状态和梯度做分片。
训练流程大体分四步:先做小规模数据上的 smoke test,确认 loss 能正常下降;接着跑少量 step 观察数值稳定性,检查是否出现 NaN 或 inf;然后进入正式预训练,设置学习率为峰值 3e-4 左右,配合 warmup 和 cosine 衰减;最后在保留的验证集上做困惑度测试和若干下游任务评测。
预训练最怕的是“静默失败”:loss 在降,但模型输出质量却在变差。这种情况往往是因为数据中有害重复样本太多,或者词表设置不合理。GLM 系列使用 SentencePiece 训练了独立的中文词表,这样中文文本被切分的粒度更合理,生僻字也能得到有效建模。如果你直接使用英文 BPE 词表跑中文任务,会发现 token 数明显增加,推理速度和效果都会受影响。
训练过程中建议每隔固定步数做一次生成测试,不要只盯着 loss。把一批固定 prompt 存成文件,每次用同一套 prompt 跑生成,对比前后输出差异,这是发现模型崩溃的最直接手段。
3.2 指令微调与偏好对齐实操
在基座模型基础上做指令微调时,最常用的低成本方案是 LoRA。LoRA 的原理是在原始权重旁新增低秩矩阵,只训练新增部分。对一个 7B 模型,用 LoRA 微调只需要在可训练参数上占用很小的显存,通常单张 24G 消费卡就能跑起来。
具体参数上,LoRA 的 rank 一般取 8 到 64。rank 太小表达力不足,rank 太大训练变慢且容易过拟合。alpha 一般设置为 rank 的 2 倍,比如 rank=16 时 alpha=32,这样能避免微调过程中破坏原始模型的分布。学习率通常设置在 1e-4 到 3e-4 之间,比全量微调的学习率大一些,因为可训练参数少,反而需要更大幅度更新。
数据构造是一次微调的成败关键。每条训练样本要统一模板,比如:
<|user|> 请解释一下什么是反向传播 <|assistant|> 反向传播是一种用于训练神经网络的算法……这种模板在推理时也要保持一致。如果训练时用了 system prompt,推理时却忘了加,效果会明显下降。这个坑我踩过很多次,检查时首先对比训练模板和推理模板是否完全一致。
偏好对齐阶段,最稳妥的做法是先收集真实用户反馈和人工改写数据,做出 SFT 模型的多轮样本,再在 SFT 模型上做 DPO。DPO 训练的参考模型一般是 SFT 模型本身,损失函数不依赖奖励模型,而是直接在偏好对上计算。实际操作中,DV 类偏好对构造要平衡难度,如果胜者和败者差距太大,模型学不到细粒度差异;如果差距太小,训练会不收敛。人工评测至少要抽 200 条涵盖多样指令,才能对模型效果有基本判断。
3.3 推理部署与性能优化
模型训练出来后,部署环节往往是另一个坑。先说量化。ChatGLM 提供了 INT8 和 INT4 量化版本,这显著降低了部署门槛。INT4 量化后,7B 模型权重可以压到 4GB 左右,很多轻薄本都能跑。但量化一定会带来效果损失,尤其对数学推理和代码任务影响较大。如果业务场景对精度要求高,建议先用 FP16,在满足需求后再尝试量化。
推理时显存大头不只是权重,还有 KV cache。KV cache 的大小可以通过公式估算:2(K 和 V) × 层数 × 注意力头数 × 头维度 × 序列长度 × 字节数。以 32 层、32 头、每头 128 维、序列长度 2048、FP16 为例,一份 KV cache 约等于 2 × 32 × 32 × 128 × 2048 × 2 字节,算下来是 1GB 左右。如果并发请求多,这部分显存会快速膨胀。
因此,高性能推理通常会用 PagedAttention 方案,把 KV cache 分页管理,减少显存碎片。另一个实用优化是动态批处理:把不同请求拼到一个 batch 里,同时让提前结束的序列马上释放显存,这样吞吐量能提升数倍。如果框架支持 Continuous Batching,强烈建议直接用,不要自己写调度逻辑。
长文本场景下,RoPE 的外推能力有限,直接用超过训练长度的输入,位置编码会“外溢”。稳妥做法是把长文本分段处理,或者用滑动窗口注意力。如果你想简单提效,也可以对 PyTorch 的 attention 计算做算子融合,跳过显式的 attention mask 拼接,这类优化能带来 20% 以上的提速。
4. 常见问题与排查技巧实录
4.1 微调中的灾难性遗忘
在基座模型上做指令微调,最常遇到的问题就是灾难性遗忘。模型学会新任务后,把原有的通用能力丢掉,表现为旧任务上效果下降、知识问答变差。
原因很直观:微调数据分布和预训练数据分布不一致,模型在更新参数时只顾优化新任务。缓解方法有几条。
第一,控制学习率。LoRA 微调不要直接用全量微调的 1e-5,而是从 2e-4 开始试探,一旦发现旧任务指标下滑,立刻减半。第二,混合旧数据。每批次训练数据里掺入 10% 到 20% 的通用指令数据或预训练数据,相当于让模型“边学新任务边复述旧知识”。第三,使用低秩更新限制。LoRA 的 alpha 不宜过高,过高的更新幅度容易把原始权重带偏。
如果遗忘已经发生,有一种补救方法是做“继续预训练+微调”两段式恢复:先用一部分原始语料做低学习率继续预训练,恢复通用能力,再重新做指令微调。这个办法能解决部分问题,但代价是训练时间增加,所以最好在微调阶段就做好防止措施。
4.2 幻觉问题怎么排查
大模型幻觉是个老生常谈的问题。ChatGLM 在一些开放领域问答中,也会出现断言式错误,一本正经说出错误事实。排查幻觉不能只靠提示词。
首先看解码参数。温度和 top_p 设置过高会增加随机性。对于事实性问答,温度建议降到 0.3 以下,top_p 设为 0.8 左右。不要默认使用文本生成任务的参数,那会放大幻觉。
其次看检索增强是否接入。如果任务需要回答最新信息或专业领域知识,最好把相关内容检索出来后拼进上下文,再让模型作答。模型在“有依据”的情况下幻觉概率显著降低。这时候 system prompt 里要明确写“只能根据提供的资料回答,不要自行推断”,实测下来很稳。
还有一类幻觉来自 SFT 数据的“虚假指令”:比如要求模型回答一个不存在的事件,模型为了满足用户反而编造内容。这需要在数据构造时增加不确定性表达,比如在数据里加入“这个问题我暂时无法确认”的回答模式。
常用的自动评测指标是 FactScore,它把生成答案拆分成原子事实,再逐条核对真实性。如果答案是“ChatGLM 是在 ICLR 2025 上做的报告”,那分解出来就是:模型名称、会议名称、年份、行为,四个事实全部正确才能得一分。这个打分思路也可以用在人工抽检清单上。
4.3 Agent 与工具调用为什么这么难做好
ChatGLM 近几代加入了工具调用(Function Calling)能力,这是往 AGI 迈进的重要一步。但工具调用训练起来非常容易翻车:模型要么参数提取不对,要么格式不符合 JSON 规范,要么在对话过程中反复调用同一个工具不停止。
难点在于工具调用需要模型进行“规划-执行-观察”的多步循环,而预训练阶段模型根本没做过这种事。所以 SFT 阶段必须构造高质量的工具调用轨迹数据:每一步都包含用户意图、工具选择、参数填充、返回结果、最终回复。同时要设计一个严格的格式化器,把模型输出解析成结构化动作,解析失败时要做重试和纠错。
我在实际项目中见过一个高频错误:模型把工具参数和用户原文混在一起,导致参数里出现多余字符。解决办法是在数据集中刻意加入干扰样例,让模型学会只提取关键实体。另一个问题是模型不会判断何时停止工具调用,需要加入“终止条件”指令,并在强化学习阶段对这种行为做奖励约束。
评估工具调用能力不能只看准确率,还要看端到端任务成功率,比如“查询天气并推荐穿搭”这种复合任务。建议每轮迭代都准备一套手工构造的评估集,覆盖正常路径、边缘路径、异常输入三种情况。
5. 从 ChatGLM 到 AGI 的关键拼图
5.1 多模态融合
ChatGLM 走向 AGI 的下一步,必然是多模态。语言模型只能处理文本,而真实世界的信息包含图像、音频、视频。要让模型真正理解世界,必须把这些模态对齐到一个统一的表示空间里。
目前主流做法是把视觉编码器输出的特征序列映射到语言模型的输入空间,模型继续用自回归方式生成文本。这种方式稳定,但会限制细粒度视觉理解。想在视觉问答上做到更好,需要在训练中加大图像-文本对数据比例,并对图像特征做更细腻的对齐,例如逐 patch 的对比学习。
从业者角度,多模态模型最容易被忽视的问题是“模态偏差”。模型可能会过度依赖文本指令,忽略图像中真正要关注的区域,导致指代错误。做多模态评测时,要专门构造“文本误导”样本,验证模型能否正确关注视觉信息。
5.2 长期记忆与持续学习
AGI 的一个重要特征是能持续学习和积累长期记忆。现在的对话模型每轮对话独立处理,上下文窗口再大也只是临时记忆。要让模型拥有持久知识,常见方案是外部向量数据库加检索,把用户历史和百科知识统一管理起来。
这个方案的好处是成本低,不用每次更新模型权重,换知识库就能调整回答。缺点是检索质量决定了回答质量,所以 embedding 模型的选择很关键。对中文场景,不仅要支持字面相似,最好还能捕捉同义改写。你可以自己构造一批中文近义疑问句来测试检索的召回率,不要只看官方的 benchmark 分数。
持续学习的另一个方向是“模型编辑”,在保持整体能力不变的前提下修改特定知识。GE 类方法比如 MEMIT,可以在几秒钟内更新一条事实,但应用中有风险,改一个知识可能连带影响关联知识。对生产环境,我更推荐用“检索增强+外部知识覆盖”来替代直接编辑模型参数,这是当前鲁棒性最高的方案。
5.3 开源生态与社区贡献
这一节我想认真聊聊开源的意义。ChatGLM 系列最被低估的贡献并不是榜单上的分数,而是它让很多小团队和个人开发者第一次体会到“跑大模型”不再遥远。6B 参数级别模型配合量化和 LoRA,哪怕手里只有一张 4070,也能完成微调和部署。
这种生态价值会在数据上形成正向循环:更多人用同一个基座模型,就有更多人贡献评测反馈、微调数据、部署案例;这些反馈又反哺到模型迭代中。做 AGI 不是只有堆显卡一条路,社区数据和集体智慧同样重要。
如果你打算在自己业务中接入这类开源模型,请务必重视许可证要求。不同版本的开源条款存在差异,商用前要先和团队确认授权范围。另外,监控开源社区的活跃度也很重要:issues 响应速度、代码更新频率、新版本变化记录,都是判断一个模型是否值得长期依赖的信号。
6. 我在这个路线里看到的真实经验
从 GLM 的双向自回归设计,到 ChatGLM 的对齐打磨,再到走向 AGI 需要解决的多模态、记忆、Agent 问题,这条路其实映射了整个大模型行业的演进逻辑:模型不是越复杂越好,而是在理解能力、生成能力、可控性之间找平衡。
我个人的体会是,对于中小团队,与其花大精力从零训练一个 100B 模型,不如选择一个成熟的开源基座,把资源和时间投入到数据质量、对齐策略、部署优化上。这几个环节里每个都能做出差异化。ChatGLM 能登上 ICLR 演讲舞台,恰恰说明工程和数据层面的扎实积累,有时候比论文里的理想化模型更重要。
最后再分享一个小技巧:无论你选择哪个模型,都要建立一个固定的评测集。它不需要很宏大,但要能覆盖你业务中的核心场景。每次模型迭代、每调整一次采样参数、每换一版提示词,都跑一遍这个评测集,把结果记录下来。很多时候你以为自己在改模型,实际上改的是数据分布和随机种子,有了评测集,你才能分清楚到底是哪一步起了作用。这套方法论,才是大模型时代真正值钱的东西。