简介:本文从Transformer基础结构出发,系统梳理大模型读取输入与产生输出两条技术路线的分化逻辑:为何编码器适合理解、解码器适合生成,为何近年又出现判别式推理模型。文章结合注意力可见范围、预训练任务、推理时的计算模式与延迟构成,解释不同架构在性能、效率和适用场景上的本质差异。
大模型虽然都以Transformer为基础,但不同模型在“如何读取输入”和“如何产生输出”这两个环节上存在根本差异。理解这两个环节的机制差异,比记住一堆模型名称更能帮助开发者判断:某个模型适合做什么任务,为什么响应快或慢,为什么有些模型输出文本而有些模型只输出概率。
本文从2017年Transformer的原始结构出发,沿着编码器与解码器两条技术路线展开:一条走向以理解为中心的判别式模型,一条走向以生成为中心的生成式模型。随后解释近年出现的一种特殊形态——只做判别、不生成文本、直接返回类别概率的推理模型。通过拆解注意力可见范围、预训练任务、推理时的调用次数和延迟构成,读者可以建立一套判断模型行为特征的基本框架。
Transformer最初被提出时,面对的是机器翻译任务。这个任务天然包含两个子过程:先完整读入源语言句子,再逐个生成目标语言词。研究者很快发现,这两个子过程对注意力机制的要求是对立的。
读入源语言句子时,理解一个词需要同时参考它前后文的信息。比如“bank”在“river bank”和“bank account”中含义不同,只有看到后文才能确定。这意味着输入侧的注意力应当允许每个位置看到整个序列。
生成目标语言词时,情况完全不同。模型逐词输出,每生成一个新词,只能依赖已经生成的前缀,而不能“偷看”尚未生成的后缀。否则训练时模型会直接抄答案,推理时也根本没有后缀可看。这意味着输出侧的注意力必须是因果的,每个位置只能看到自身及之前的内容。
这两种对立的需求,在原始Transformer中被分给两个组件处理:编码器负责双向读入,解码器负责因果输出。后续模型架构的分化,本质上都源于在这两个组件之间的取舍和重组。
理解不同大模型架构差异,需要先掌握两个关键概念。
注意力机制的核心操作是:处理某个位置的表征时,计算该位置与序列中其他位置的关联权重,再按权重加权汇总其他位置的信息。所谓“可见范围”,指的是一个位置在计算注意力时能看到哪些位置。
以句子“今天天气很好”为例。在双向注意力下,处理“天”这个位置时,它可以同时看到“今”、“气”、“很”、“好”等所有位置的信息。在因果注意力下,处理“天”时只能看到“今”和“天”本身,看不到“气”、“很”、“好”。因果注意力通过掩码矩阵实现:将当前位置之后的注意力权重设为负无穷,经softmax后权重归零。
可见范围的差异直接决定了信息流动的方向。双向注意力让每个位置充分吸收全局上下文,适合需要整体理解的场景;因果注意力强制信息只向一个方向流动,天然适合序列生成。
预训练任务的本质是:在没有人工标注的情况下,设计一个模型可以自动学习的监督信号。
一种经典任务是掩码语言建模:随机遮住输入序列中的若干词,让模型根据上下文预测被遮住的词。这个任务迫使模型建立对句子结构的深层理解,因为只有理解了上下文,才能还原缺失位置。掩码语言建模假定每个位置本来可以看到全局,只是被人为遮住,所以它与双向注意力自然匹配。
另一种任务是自回归语言建模:给定前面的所有词,预测下一个词。这个任务直接在真实文本序列上训练,每次预测都只依赖前缀。自回归建模的监督信号来自人类写作的自然顺序,它与因果注意力自然匹配。
可见范围与预训练任务之间存在耦合关系:双向注意力配掩码建模,因果注意力配自回归建模。这个耦合关系是后续路线分化的深层原因。
编码器路线的模型只使用Transformer的编码器部分,核心特征是全序列双向注意力加掩码语言建模预训练。
从结构看,这类模型由若干层编码器单元堆叠而成,每个单元包含多头自注意力子层和前馈网络子层。由于不包含解码器,它不直接生成文本,而是为输入序列中的每个位置产出融合了上下文的表征向量。
这样一个纯编码器模型本身不能“说话”,它做的事情是:给定一个输入,输出一组深度理解后的表征。要让模型完成具体任务,需要在预训练之后增加一个任务相关的输出层。例如,对于分类任务,在编码器输出的首个位置表征上加一个线性层,训练它映射到类别标签;对于序列标注任务,在每个位置的输出表征上加分类层。
这种“预训练编码器加任务输出层”的模式,决定了这类模型擅长需要整体或局部理解的任务。因为双向注意力让每个位置的输出都融合了全局上下文,即使只取某个位置的向量,其中也包含了后续位置的语义信息。
解码器路线的模型只使用Transformer的解码器部分,采用因果注意力加自回归语言建模预训练。
结构上,解码器单元与编码器单元的差异在于注意力层使用了因果掩码。堆叠若干层后,模型的功能十分直接:输入一个前缀序列,输出对下一个位置的预测分布。由于预训练任务就是预测下一个词,解码器模型天然具备续写能力,不需要额外添加任务输出层。
在推理阶段,这类模型逐词生成。每生成一个词,就把它拼接到输入序列末尾,再走一遍前向计算得到再下一个词。这个过程持续到生成结束符或达到长度上限。正因为每个词都要完整跑一遍前向计算,生成一段包含几百个词的文本,就需要几百次串行的前向推理,这是解码器路线延迟较高的根本原因。
近年出现的一类模型,在输入端和编码器路线类似,对输入材料做双向编码;但在输出端,它既不逐词生成,也不做单一分类,而是针对若干预定义的问题形式,一次前向计算返回多个判别结果及其概率。
这种模型的关键特征是输出空间是固定的、有限的。例如,一个问题形式是“从N个选项中选一个”,输出维度就是N加一个表示“无选项成立”的类别;另一个形式是“判断陈述是否成立”,输出维度是二分类;还可以是“在若干等级上评分”,输出维度等于等级数。
因为这些输出维度在模型设计时就已确定,模型一次前向计算可以同时产出所有判别问题的概率分布。它不需要像生成式模型那样逐词循环,所以完成一组判断的延迟可以压缩到百毫秒量级。这一特性来自一个简单的机制:把原本需要多步生成才能获得的结果,转化为一次并行计算就能得到的固定维度分布。
要理解不同架构的差异,最直观的方式是追踪一次完整请求的处理链路。
第一步,文本被分词器切分为Token序列。中文文本每个Token约对应一个字或词,英文约对应一个单词或子词。
第二步,Token序列被送入堆叠的编码器层。第一层从嵌入向量出发,通过双向自注意力让每个位置聚合全局信息,再经过前馈网络做非线性变换;后续每一层都在前一层输出的基础上重复这个过程。层数越深,每个位置的表征融合的语义层次越高。
第三步,取特定位置的输出向量,送入任务输出层映射到类别空间,得到每个类别的概率。由于编码器只需要跑一次前向计算,整个处理链路的时间开销与输入长度相关,与输出类别数关系不大。
第一步同样是分词。输入的Prompt被切分为Token序列。
第二步,模型对这个序列做一次前向计算,因果注意力保证每个位置只融合前缀信息。第一步前向计算输出的是下一个Token的概率分布。
第三步,从这个分布中采样得到一个Token,将其追加到输入序列末尾,形成新的序列。
第四步,模型对新序列再做一次完整的前向计算,得到再下一个Token的分布。如此循环,直到产生结束Token。
这个链路的核心特征是:第n个Token的生成必须等前n-1个Token全部确定之后才能计算,每一步都依赖前一步的输出,无法并行。这也是生成式模型响应速度难以压缩到极低的根源。
第一步,输入材料与问题定义一起被编码。模型读到的不仅是原始文本,还包括每个判别项的描述,例如选项内容、评分等级定义或待验证陈述。
第二步,编码器对拼接后的序列做一次前向计算,得到全局表征。
第三步,模型从全局表征出发,针对每个判别项分别计算概率分布。由于所有判别项共享同一次编码结果,多个问题的判断可以在一轮前向计算中完成。
这个链路意味着:判别项的数量会影响输出层的计算量,但不会像生成式模型那样产生串行循环。只要编码一次,所有判别结果都可以并行给出。
生成式模型的总延迟由单次前向耗时乘以生成Token数决定。单次前向耗时受输入长度、模型参数量、硬件带宽影响;生成Token数则由回答长度决定。即使单次前向很快,只要需要生成几百个Token,总延迟就会成倍放大。
判别式模型的延迟只包含一次编码前向时间和输出层计算时间。它不存在Token级别的串行循环,这是它能在极短时间内完成一组判断的机制基础。当然,这种速度优势是有代价的:它的输出空间是预设的,不能自由组织语言。
双向注意力让每个位置的输出都融合了完整序列。对于判断类任务,模型可以看到全部材料再下结论,信息利用充分。因果注意力让模型只知道前缀,这在生成场景下是必要的约束,但在某些需要全局判断的任务上,反复生成过程会积累不确定性。
一个常见的工程选择是:对于需要一次性判断、选项明确的场景,使用编码器或判别式结构;对于需要灵活组织回答的场景,使用解码器结构。这也解释了为什么一些系统采用流水线方式,先用编码器模型理解意图、提取关键信息,再用解码器模型组织自然语言回答。
预训练任务不只是训练阶段的事情,它塑造了模型的默认能力。掩码语言建模训练出的模型,在训练时反复学习“根据上下文填补缺失信息”,这种能力迁移到分类、标注、判断等任务上非常直接。自回归语言建模训练出的模型,反复学习“根据前缀续写”,所以它天然能做开放式生成。
判别式推理模型则通常在预训练之后又经过面向特定判别格式的微调或提示学习,使模型学会把各种问题统一转化为对预设输出空间的选择。它的底层网络可以是编码器结构,也可以是经过特定调整的解码器结构,关键在于输出层和训练目标被重新定义。
假设任务是:给定一段材料,判断“该材料是否包含数据安全风险”这一陈述是否成立。
在编码器路线下,模型对材料做一次双向编码,取整个序列的综合表征,经过二分类输出层,得到“成立”和“不成立”两个概率。全程一次前向计算,延迟以几十到几百毫秒计。
在解码器路线下,模型被设计为生成自然语言回答。它先编码输入Prompt,然后逐Token生成“该陈述成立”或“该陈述不成立”之类的文本。要得到可用的二分类判断,系统还需要对生成的文本做后续解析。延迟明显更高,但回答形式更自然,可以在给出判断的同时附加解释。
在判别式路线下,模型将材料和陈述一起编码,输出层直接返回陈述成立与否的概率分布。计算量与编码器路线相当,但输出更直接,不需要后处理解析,也不需要逐Token生成。
这个对比说明:同一任务可以有不同的架构解法,架构选择本质是在灵活性、延迟和输出确定性之间做权衡。
优势在于一次前向即可获得全局理解,分类和标注类任务延迟低,训练相对高效。限制是模型不能直接生成自然语言,需要为每个任务额外设计输出层,多任务泛化能力有限。
优势在于输出形式完全灵活,可以回答开放问题、生成代码、撰写文章,一个模型无需改动即可应对多种任务。限制是生成延迟高,结果存在随机性,某些需要精确判断的任务上可能出现过度发散。
优势在于延迟低、输出确定、适合高频调用和规则集成场景。它直接在给定选项内给出概率,便于后续系统做决策。限制是输出空间固定,无法自由表述,遇到需要解释或灵活组织答案的场景时需要配合其他组件。
误区一:认为编码器和解码器的区别只是有没有输出层。 实际上核心区别在注意力可见范围和预训练目标,输出层的差异只是结果而非原因。
误区二:认为响应快就说明计算量小。 判别式模型响应快是因为它不需要串行生成,而不是单次前向计算比生成式模型便宜很多。在相同输入长度和参数量下,单次前向成本可能处于同一量级。
误区三:认为双向注意力一定比因果注意力更强大。 双向注意力信息更丰富,但在生成场景下不能使用因果约束来模拟未来信息缺失。两种注意力各有所适,不存在绝对优劣。
误区四:忽视输出解析成本。 即使某个架构能快速产生结果,如果后续还需要对文本输出做解析和验证,端到端延迟和可靠性都会受到影响。直接返回概率的判别式路线在这类场景下具有架构层面的优势。
大模型架构的演进与分化,本质上是在回答两个问题:模型应该如何读取输入,应该如何产生输出。读取输入的差异由注意力可见范围决定,产生输出的差异由输出空间和训练目标决定。编码器路线以双向注意力加掩码建模为核心,适合理解与判别;解码器路线以因果注意力加自回归建模为核心,适合生成与续写;判别式路线保留双向编码的优势,将输出压缩为固定空间的概率分布,在特定判断类任务上获得显著的延迟优势。
对开发者而言,选择哪种架构不应只看流行度,而要回到任务本身:需要灵活生成还是精确判断?允许多少延迟?输出是否易于解析?把这些问题与注意力机制、预训练目标、推理时调用模式对照起来,就能做出更理性的架构判断。