从语言模型到LLM:大模型演进的关键技术与工程实践 1. 先从一段“旧时光”说起语言模型到底在解决什么问题如果你现在打开任何一篇讲大模型的文章几乎都会从“语言模型”这个词开始。但这个词被用得太宽泛了以至于很多人其实分不清——我们常说的语言模型和这两年火遍全网的LLMLarge Language Model大语言模型到底是不是一回事先给个结论语言模型是一个概念LLM是这个概念在工程和数据规模上被推到极致之后的具体产物。两者的血缘关系很近但能力维度完全不同。就好比“发动机”和“航空发动机”的关系——都是把燃料转化为动力但后者对材料、设计、温度控制的要求已经不在一个量级了。语言模型最原始的学术定义其实非常朴素给定一段文本的前几个词预测下一个词是什么。这个任务看起来人畜无害甚至有点幼稚。但它之所以成为整个自然语言处理NLP领域的基石是因为几乎所有高层任务——机器翻译、文本摘要、问答系统、情感分析——都可以被拆解成“根据上文预测下文”这个基本动作。举个具体的例子。早期的机器翻译系统无论是基于规则的还是基于统计的核心都在做同一件事给定一个源语言的句子找出目标语言中最可能对应的句子。而这个“最可能”本质上就是一个条件概率问题。语言模型就是用来计算这个条件概率的。也就是说翻译、生成、理解这些听起来高大上的能力归根结底都建立在“预测下一个词”这件小事上。这个视角一旦打通再看后来的所有大模型发展你就会发现一条清晰的逻辑线所有模型的迭代本质上都在做同一件事——把“预测下一个词”这件事做得更好、更稳、更聪明。区别只在于为了做好这件事不同时期的人们用了完全不同的方法而这些方法背后是数据、算力、算法三股力量的交替崛起。2. 从n-gram到神经网络语言模型的第一波范式转移2.1 统计语言模型的黄金时代如果要给语言模型写一部编年史第一个重要的里程碑应该是n-gram模型。n-gram的思路非常直观假设一个词出现的概率只取决于它前面的n-1个词。比如bigram2-gram模型就是假设“苹果”这个词出现的概率只取决于前面一个词比如“吃”。trigram3-gram就是看前面两个词。这个假设叫马尔可夫假设它把计算整个句子的概率问题转化成了计算一串局部条件概率的乘积问题。听起来很合理但这个模型有一个致命伤叫做数据稀疏。假设你的词表里有10万个词bigram的组合数就是10万乘以10万等于100亿种组合。哪怕你拥有一条规模很大的语料也不可能把所有组合都覆盖到。总会有很多合理的搭配从未出现过那概率就是0。但概率为0并不代表这回事不可能发生只能说明语料里没有。为了解决数据稀疏统计语言模型时代有一整套花式平滑技术从最简单的加1平滑Laplace Smoothing到回退模型backoff再到Kneser-Ney平滑本质上都是在做同一件事把一部分概率质量从高频事件中“匀”出来分给那些没出现过的组合。这个思路一直到今天都不过时——后来深度学习模型里的各种正则化手段、标签平滑精神祖先就是这里的Kneser-Ney。这一阶段的核心矛盾非常清晰模型能力受限于人工设计的平滑技巧而真正的语义理解几乎没有。n-gram模型看到的只是词的表面共现关系它对“苹果”和“水果”之间有什么内在关联一无所知。它只是一个非常庞大的查表工具只是这个表被概率填满了而已。2.2 神经网络的入场分布式表示的魔法2003年一篇论文打破了统计语言模型的瓶颈就是神经网络语言模型NNLM。它的核心贡献不是把模型做深了而是引入了分布式表示Distributed Representation这个概念。传统的one-hot编码下每个词是一个无比稀疏的高维向量“苹果”和“香蕉”这两个词在向量空间里没有任何关系。神经网络语言模型把每个词映射到一个低维稠密的向量空间里——也就是后来被广泛称为词向量的东西。在这个空间里语义相近的词距离更近“苹果”和“香蕉”可能就会被聚到同一个区域。这个词向量的威力有多大呢后来的经典例子是经典的语义运算关系 某一极其著名的词向量运算样例 能够接近某一极其著名的关联关系结果。虽然这个结果有夸大成分但它的确揭示了一个关键事实神经网络不只是记住了统计规律它学到了词语之间某种结构化的关系。这种关系不是被人工设计出来的而是从数据里自动涌现出来的。在这个阶段模型结构其实还很简单一个Embedding层加一个全连接层加一个Softmax输出层。训练用的语料量级大概也就是几千万到几亿词。但就是这套被现在的大模型衡量堪称简陋的结构奠定了后来一切的基础。可以说没有分布式表示这一步就没有后来的Transformer更不会有现在的LLM。2.3 为什么说RNN是“顺序思维”的代表词向量解决了表示的语义化问题但没有解决时序问题。语言是一个序列顺序很重要。“我打你”和“你打我”用的是同样的词意思却截然相反。n-gram模型通过固定窗口来捕捉局部顺序但窗口太短记不住远距离依赖窗口太长又遭遇数据稀疏。任何这么看都是死路。所以就迎来了循环神经网络RNN的时代。RNN的思路很有意思它把语言处理看作一个逐步累积状态的过程。每读入一个词模型更新一次“记忆”——这个记忆是一个隐藏状态向量相当于把之前看到的所有内容压缩成了一个固定长度的摘要然后基于这个摘要预测下一个词。理论上RNN可以捕捉无限长的依赖关系。但在实际训练中它遇到了梯度消失和梯度爆炸两个棘手问题。简单说就是当序列太长时距离较远的信息在反向传播过程中要么衰减到可以忽略要么膨胀到导致模型不收敛。虽然LSTM和GRU通过精巧的门控机制极大地缓解了这个问题但RNN的串行计算特性仍然让它在大规模训练面前力不从心——每一步的运算都依赖于前一步的结果没有办法并行化。这一点在当时还不是致命伤因为那会儿的语料规模、算力水平也没给并行化提出那么高的需求。但后来当数据量爆炸式增长时RNN的串行瓶颈就成了不可逾越的障碍。换句话说不是RNN不够好而是当整个行业的数据和算力飙涨时一个不能充分并行的大规模训练方案注定要被淘汰。3. 从“预测下一个词”到“无所不能”Transformer带来了什么3.1 注意力机制让模型学会“选择性关注”Transformer之前还有一个关键的过渡环节就是注意力机制Attention。注意力机制最早被用于机器翻译任务中解决的是RNN的“信息瓶颈”问题——因为RNN把所有历史信息都压缩在一个固定长度的向量里信息必然有损。注意力机制的想法很直接与其把所有信息都压进一个向量不如在每一步预测时直接去源语言的所有位置上“挑重点”。重点关注哪些位置的信息就加权更多地读取哪些位置的信息。这个机制带来了质的飞跃。它让模型不再受限于固定长度的语义摘要而是可以灵活地从整个输入序列中提取信息。更重要的是注意力计算在数学形式上非常利于并行化——它本质上是一组矩阵乘法不像RNN那样有严格的时序依赖。Google在2017年发表的论文《Attention Is All You Need》算是在这个思路上做了个极致的贯彻既然注意力机制这么好用那就干脆不要RNN了整个模型完全用注意力机制搭建。这就是Transformer。3.2 自注意力的三个关键操作Q、K、VTransformer里最核心的组件是自注意力Self-Attention。它理解起来其实不难可以类比成一场会议讨论。每个词更准确地说每个token在模型中都有三个不同角色的向量Query查询、Key键、Value值。这个过程可以这样理解当你需要考虑上下文中的其他词时你会用你的Query去和所有其他词的Key做匹配算出相关性得分。然后根据相关性得分对所有词的Value做加权求和得到一个新的表示。相关性越高你对那个词的内容吸收得越多。用大白话说Query是“我在找什么”Key是“我能提供什么标签”Value是“我真正的内容”。每个词同时扮演三个角色模型通过学习调整这三个向量的映射权重来灵活决定每个词应该关注上下文中的哪些词以及从它们那里吸收多少信息。这个机制的精妙之处在于它不预设任何固定的注意力范围。不像n-gram那样只看局部窗口也不像RNN那样只能按顺序阅读自注意力机制让任意两个位置的token可以直接交互不管它们在句子里隔得多远。这就从根本上解决了长距离依赖问题同时又天然支持并行计算。再加上Transformer论文里引入的多头注意力Multi-Head Attention——相当于让模型同时从多组不同的角度去看序列中的关系——以及位置编码Positional Encoding来补充顺序信息Transformer迅速成为NLP领域的新主力架构。3.3 从Encoder-Decoder到Decoder-Only架构选择的岔路口Transformer原论文提出的是一个Encoder-Decoder结构。Encoder部分负责把输入序列编码成一组表示Decoder部分负责根据这些表示逐词生成输出。这种结构非常适配机器翻译这类序列到序列的任务。但在后来的演进中大模型领域逐渐形成了一种看似令人意外的收敛——几乎所有成功的LLM都是Decoder-Only架构。这与我们常识中“能编码又能解码更加全能”的印象有些相反但实际发展路径就是这样选择的。为什么原因可以拆成几层。第一Decoder-Only架构天然匹配语言模型的自回归训练方式——给定上文预测下一个词不需要看双向上下文。这使得它和大规模无监督语料完美契合。第二在生成任务中Decoder本身就承担了“逐个生成”的职责不需要额外的推理模块。第三当模型规模足够大时Decoder-Only架构在训练效率和工程实现上更简单尤其是配合自回归生成的目标函数上下游设计都相对直接。这个架构选择其实还和下游任务形态有关。LLM的核心使用方式已经不再是“从一段输入翻译成一段输出”而是“给一段提示词Prompt让模型继续往下写”。这种自由形式的文本续写天然就是Decoder-Only的主场。后续业界把这种方式称为“生成式预训练”也就是GPT这个名称中GGenerative的来源。4. 规模化的威力从BERT到GPT的“岔路”与“合流”4.1 两条路线之争双向理解还是单向生成Transformer出现之后往后的两年里整个领域其实分成了两条技术路线。一条以BERT为代表一条以GPT为代表。BERT走的是“双向编码 预训练后微调”的路子。它用的是Transformer的Encoder部分通过Masked Language Model遮盖掉句子中部分词让模型去预测被遮住的词的方式进行预训练。这种方式让模型在训练时能同时看到一个词左右两侧的上下文因此在理解类任务上表现格外突出。那个时代的GLUE榜单基本就是BERT系列模型的天下。GPT走的是“单向解码 生成式预训练”的路子。它用Transformer的Decoder部分仍然采用“预测下一个词”的自回归目标。它不做双向编码但仍然保留了上下文窗口内的历史信息。GPT系列的早期版本在理解类任务上其实打不过BERT但它在生成任务上的流畅度是BERT很难企及的。这两条路线在2020年前后形成了一组很有意思的对照BERT是精读型选手适合做填空、判断、分类GPT是续写型选手天然适合做对话、创作、生成。当时很多人觉得这是两种互补的技术路线未来可能长期共存。但后来的发展证明生成式路线走出了自己的第二曲线而BERT路线的天花板反而被快速触及。4.2 涌现现象为什么模型变大之后“突然”变聪明了GPT系列从GPT-1到GPT-3最大的变化就是规模。GPT-1的参数是1.17亿GPT-2涨到15亿GPT-3直接跳到1750亿。这个参数的膨胀幅度远超大部分人的预期。真正让人开始意识到“规模”本身有魔力的是涌现能力Emergent Ability这个概念的出现。所谓涌现是指当模型规模跨越某个阈值之后一些原本小模型不具备的能力突然出现了。比如少数样本学习Few-shot Learning、代码生成、多步推理、甚至一些简单的逻辑思考能力在小规模模型上几乎不出现但一旦参数规模达到某个级别这些能力就“凭空”长了出来。从技术视角来看这些能力其实有一个通俗的理解方式模型内部存储的知识分布足够稠密时它可以在推理时组合出原本没有显式训练过的答案路径。这就像拼图小模型手里只有几十块拼图怎么拼都拼不出全貌但大模型手里的拼图足够多哪怕随机组合也能拼出很多合理的图案。不过需要说明的是涌现能力不是一条平滑的曲线而是一个类似“相变”的过程。有些能力在某个规模以下是0分跨过临界点突然变成60分再变大变成80分。这也是为什么业内反复争论“模型缩放到底有没有上限”——目前没人能给出准确答案但至少从目前的观察来看规模带来的红利还远没有完全释放。4.3 数据、算力、算法的三角赛跑如果说大模型是火箭那么数据、算力、算法就是它的三台发动机。这三者的演进速度其实是非常不均衡的。数据的爆发来得最早也最自然。互联网积累了海量的公开文本数据早期GPT-2的训练集已经是WebText这种规模的语料到了GPT-3训练数据直接达到了几千亿个token。但这里面有一个隐患——高质量的数据是有限的。到了后来业界开始讨论一个有些焦虑的话题高质量文本语料大概在某个总量水平附近如果模型继续变大训练数据很快就可能不够用了。算力的增长也极其惊人。早期训练GPT-1用几块GPU就够了。训练GPT-3直接动用了数千块高性能GPU训练成本以百万美元计。这里出现了明显的“算力壁垒”——不是每个人都有条件续写大模型的军备竞赛。算法层面的演进则相对平缓。Transformer的基本架构从2017年之后没有发生颠覆性的改变后续的改进大多集中在训练技巧、损失函数、结构微调比如RoPE位置编码、SwiGLU激活函数、RMSNorm归一化这些层面。但算法的“微调”却能在同等规模下带来非常大的性能提升这也是为什么后来开源社区能不断缩小与闭源模型的差距——不完全靠堆规模而是靠更精细的算法设计来“省着用算力”。5. 从“预训练微调”到“预训练提示”LLM用法的范式革命5.1 为什么微调越来越不经济在BERT时代把预训练模型用到下游任务的标准流程是“预训练 微调”。你需要为每个具体任务准备标注数据然后在预训练模型的基础上做有监督训练。这在当时看起来没什么大问题。但到了GPT-3这种规模的模型微调变得非常不现实。第一是GPU成本1750亿参数的模型哪怕做几个epoch的微调需要的算力也不是一般团队能承受的。第二是数据成本很多专业领域的标注数据本身就很稀缺比如医疗、法律获取高质量标注数据的成本非常高。第三是部署成本更难接受——微调之后你每次更新模型都要维护一份新的完整参数副本存储和serving的压力都很大。于是业界逐渐转向了另一条路不更新模型参数而是通过设计提示词Prompt来引导模型输出。这就是后来大家熟知的“预训练 提示”范式。GPT-3论文本身也明确使用了In-Context Learning这种形式即你想让模型做什么就把任务描述和示例直接写在提示词里模型根据这些上下文“即兴发挥”。这个转变的意义极其深远。它把使用大模型的成本从“训练一个大模型”降到了“写清一个指令”。从此大模型从一个需要专门训练才能使用的“工业设备”变成了一个开箱即用的“通用工具”。5.2 提示工程另一种意义上的“编程”提示词这个设计约束催生出了一个非常有意思的新职业方向——提示工程Prompt Engineering。虽然这个名字听起来像是玩文字游戏但实际操作中提示词的设计确实需要非常严谨的工程化思维。好的提示词通常包含几个要素明确的任务描述、清晰的角色设定、必要的输入格式说明、以及可选的示例Few-shot Examples。比如你希望模型做文本分类与其直接丢给它一句话“帮我判断这句话的情感”不如给它一个结构化指令“你是一个情感分析助手请判断以下文本的情感极性输出仅限正面或负面并给出简短原因。”然后附上两三个示例最后再给待分析文本。这背后的逻辑是大模型对指令的理解高度依赖上下文。同样的任务措辞稍微含糊一点模型输出的质量可能就天差地别。我在实际使用中见过一个很典型的场景同样是让模型提取会议纪要中的待办事项直接说“提取待办事项”模型输出乱糟糟但把角色设定成“你是一个项目助理请从会议纪要中找出所有的行动项按负责人和截止日期分列”输出立刻规范了很多。提示工程本身还在不断发展后来又延伸出了CoT思维链、Self-Consistency自洽性采样等一系列高级技巧。这些技巧本质上都是在引导模型“多想几步”而不是直接输出直觉答案。我个人认为提示工程将会长期存在因为模型的底层逻辑始终是“根据上下文补全”而提示词就是用户对上下文最直接的控制手段。5.3 RLHF让模型学会“说人话”单靠预训练和提示工程还不够。GPT-3虽然能生成非常流畅的文本但它经常产生一些“不对劲”的输出——编造事实、逻辑混乱、语气生硬。2020年之后业界开始引入强化学习人类反馈Reinforcement Learning from Human FeedbackRLHF技术来“调教”模型。RLHF的核心思路并不复杂分三步走。第一步训练一个奖励模型让人工标注员对同一问题的多个候选回答进行排序然后用这个排序数据训练一个奖励模型用来预测“人类更喜欢哪个回答”。第二步用这个奖励模型作为信号对预训练好的语言模型进行强化学习优化让模型学会生成更符合人类偏好的内容。第三步往复迭代。这里有一个非常关键的技术细节强化学习过程中模型非常容易“作弊”。它可能会找到一些让奖励模型打高分的套路比如疯狂使用高密度词藻、说一堆正确的废话但实际上并没有真正理解用户的意图。为了防止这种偏移还需要在奖励函数中加一个KL散度惩罚项约束优化后的模型不能和原始预训练模型偏离太远。RLHF带来的变化是肉眼可见的。经过RLHF的模型在对话中会更自然、更礼貌、更懂得拒绝不合理请求。这就是后来ChatGPT能够“破圈”的关键一步——不只是在学术评测上取得好成绩而是让普通用户和模型对话时感觉自己在和一个聪明且有礼貌的人聊天。6. 开源社区的平行宇宙从GPT系列到Llama、ChatGLM的百花齐放6.1 为什么要关注开源大模型GPT系列是闭源的外界只知道它的能力很强却看不到训练细节。这催生了一大批开源大模型项目它们试图用公开数据、公开代码、公开权重来复现类似的能力。开源阵营里最值得一提的转折点是Llama系列的发布。它虽然不是最大的模型但通过相对“小”的模型尺寸7B、13B、70B达到了非常强的性能而且权重完全公开。这直接引爆了全球的微调和部署热潮。因为模型权重公开之后任何人都可以在消费级显卡上运行一个7B或13B的模型用来做本地部署、微调、定制开发。国内的开源生态同样非常活跃比如ChatGLM系列。它以中文能力见长而且对中文场景做了非常多的针对性优化。你可以在本地跑一个ChatGLM的量化版本做一个完全私密的本地AI助手而无需把数据发给任何云端服务。这对于数据敏感的行业比如医疗、金融、科研价值非常大。开源和闭源之间的竞争关系也非常有趣。闭源模型凭算力优势模型尺寸更大、能力更强但开源模型凭借社区的力量迭代速度快、定制化程度高、部署成本低。两者的差距一直在动态变化中。站在使用者的角度开源模型提供的是一个“可控”的选项你完全掌握数据和模型不用担心数据隐私或服务商变动这在很多场景下比单纯追求最高精度更重要。6.2 微调的艺术LoRA为什么能以小博大在大模型应用实践中最出圈的一项技术是LoRALow-Rank Adaptation低秩适配。它的出现解决了“微调成本太高”这个核心痛点。LoRA的思想是在冻结原模型权重的前提下额外引入一组低秩矩阵在训练时只更新这些低秩矩阵的参数。因为低秩矩阵参数量很小所以训练所需显存和算力都大幅下降。举个例子对一个7B模型做全量微调可能需要20GB以上的显存而用LoRA微调显存占用可以控制到6GB以内。它的数学原理可以这样理解虽然模型的原始权重维度很高但在针对某个特定任务做微调时真正需要更新的参数可能分布在一个较低维度的子空间里。低秩矩阵恰好去逼近这个低维子空间的变化用较少的参数捕获大部分有效的模型更新。我在自己的项目中用过很多次LoRA最大的体会是它大大拉低了微调门槛。一个普通开发者不依赖庞大的GPU集群也可以在自己的单张显卡上完成针对特定领域的大模型微调。你可以把LoRA训练出来的权重无缝加载到基座模型上进行推理也可以常驻多个LoRA模块随时切换不同的领域风格非常灵活。6.3 量化让大模型跑在普通硬件上与大模型部署密切相关的另一个话题是量化。模型参数越多占用的显存就越大。7B模型用FP16精度加载显存需求大约14GB已经超过了很多人的单卡水平。而通过量化技术把权重从FP16压缩到INT8甚至INT4显存需求可以降到原来的四分之一甚至更低。量化的基本思路就是把模型的浮点参数映射到更少的bit来表示。压缩带来的损失通常很小因为模型本身有冗余而且大量参数的分布在经验上比较集中。实际部署中我会根据场景做不同选择如果只是跑对话demoINT4量化足够如果要做高精度的推理任务推荐保留FP16或BF16。整个开源生态都在朝着“让大模型更亲民”的方向发力。正是因为有了Llama、ChatGLM、各种量化工具、LoRA微调框架才使得普通人也能在自己的电脑上跑起一个可用的本地大模型而不是只能仰望云端的那几个闭源产品。这个进程还在加速未来可能会出现更高效的架构进一步压缩训练和推理成本。7. 演进史给我们的启示下一站在哪里7.1 数据瓶颈与合成数据要说当前大模型面临的最大制约数据应该是首当其冲的。前面提过高质量人类文本是有限的而模型的训练需求几乎是无限的。很多团队开始转向合成数据Synthetic Data——用模型自己生成的数据来训练下一代模型。这个方法听起来有点“吃自己的尾巴”实际操作中确实有一些风险。如果合成数据的质量把关不严模型会陷入一种自我复制甚至自我退化的循环。但反过来如果能设计好合成数据的生成逻辑和质量过滤流程它可以在一定程度上缓解数据稀缺的问题甚至让模型在特定领域的能力超过仅靠人工标注数据所能达到的水平。另一个有潜力的方向是多模态数据。语言模型只处理文本但人类的学习并不只是看文字。如果我们能打通文本、图像、音频、视频之间的边界模型的认知能力可能会有新的质变。目前已经有很多模型在图文联合理解上取得突破但离真正的“多模态涌现”还有距离。7.2 推理成本与效率优化模型越来越大能力越来越强但推理成本也水涨船高。你部署一个70B模型在云端每个请求的成本并不便宜。这就在商业化落地面前摆了一个很现实的矛盾技术上能做到的事经济上未必划算。业界现在的方向之一是投机采样Speculative Decoding用一个小模型快速生成草稿再用大模型进行验证可以在几乎不损失质量的情况下显著提速。另一个方向是蒸馏Distillation把一个大模型学到的能力压缩到一个更小的模型里。这些优化手段共同的目标是让大模型从“能用”变成“好用”让开发者不必为每一个请求支付高昂的算力账单。7.3 安全对齐与可控性模型的能力越强安全对齐的挑战就越大。早期的语言模型是没有“拒绝”这个概念的你问它什么它就试图回答什么。但一个有实际影响力的产品不能这样——它需要能识别有害请求、拒绝不当内容、避免输出危险信息。安全对齐和模型的能力是一对矛盾。过度安全对齐会让模型变得保守、生硬丧失创造性对齐不足又会带来滥用风险。未来的方向应该是分层可控的——不同场景可以配置不同的安全策略让模型既能在创意写作时放开手脚也能在医疗咨询领域中保持谨慎。这个平衡点如何把握会成为下一代大模型竞争的关键分水岭。8. 写在最后我在跟进大模型演进中的三点体会如果你完整看完了上面的梳理应该能感受到大模型的发展不是某一天突然冒出来的奇迹而是一次次工程决策、算法突破和数据积累叠加出来的结果。我个人的第一个体会是很多时候所谓的“智能涌现”其实只是“规模数据”带来的隐性组合能力。没有什么神秘的魔法有的只是把“预测下一个词”这个动作做到极致之后自然浮现出的副产品。第二个体会是技术路线的选择往往带有很强的路径依赖。BERT路线没有错GPT路线也未必全对只是在当时的算力和数据约束下生成式路线更好地匹配了后续规模化的需求。这个判断放到今天依然适用——谁能在效率和能力之间找到更好的平衡谁就有可能定义下一代模型。第三个体会是模型大小本身不是终点落地能力才是。一个能跑在普通电脑上的小型模型可能比一个只能部署在云端机房里的巨型模型在真实世界里创造更大的价值。后面我打算专门写一篇关于大模型本地部署与量化操作的实操向内容把这部分经验系统分享出来。