编码器与解码器堆(encoder and decoder stacks)
/ en-KOH-der and dee-KOH-der staks /
Transformer 由两类做互补工作的层堆搭成。编码器堆一次读入整段输入,为它建立起丰富的、感知上下文的理解——每个词元都能双向地看见其他每个词元。解码器堆则一次生成一个词元的输出,而关键在于:它产出的每个词元只能看见排在它前面的词元,绝看不到未来,从而让生成对「目前已知什么」保持诚实。
最初的 2017 设计把两者合在一起做翻译:编码器把源句消化成一组满载上下文的向量,解码器在逐词写出译文时,通过交叉注意力伸回那些编码器向量,以忠实于原文。但这两半也能分开过活。仅编码器模型(BERT 家族)擅长理解类任务——分类、检索、就给定文本回答问题——因为它双向地把一切读尽。仅解码器模型(GPT 家族,以及当今的聊天机器人)则是为生成而造,因而在开放式写作上独占鳌头。
知道一个模型用的是哪种堆,便能看出它大致是做什么用的。仅编码器模型能读、能判断,却无法自由生成长文;仅解码器模型能流畅生成,但它处理输入时,用的也是那同一副单向的、面向生成的镜片。当今的大语言模型压倒性地都是仅解码器的——这是对最初「两半俱全」设计的一个显著偏移——因为这单一的堆,对于驱动聊天助手的「预测下一个词元」目标,竟扩展得极为漂亮。
一个翻译模型:编码器一次读完「我饿了」,建起上下文向量;解码器一次写一个词地写出「J'ai faim」,每个新词既注意自己已写出的部分,又通过交叉注意力,注意编码器对那句中文的理解。
编码器理解整段输入;解码器从左到右写出输出。
「Transformer」常被宽泛地用来指「仅解码器的聊天机器人」,但最初的设计是两半俱全的,许多有用的模型也是仅编码器的。该用哪种堆,取决于任务:读与判断偏爱编码器,开放式生成偏爱解码器。