datawhale:Happy-LLM 打卡-Task04:3.1Encoder-onlyPLM仅编码预训练模型(NLP预训练模型、Encoder-only架构)
前言:
该部分[1]主要是对Transformer的变体路线——Encoder-only仅编码器架构的描述,介绍了3种主要的Encoder-only架构模型(BERT、RoBERTa、ALBERT)。所以首先对“多头放缩点积自注意力机制”进行回顾,然后对编码器模块进行分析,再对NLP预训练模型进行一定的梳理,然后以Encoder-only概念模型作为主要研究对象分析(更接近于RoBERTa),并梳理Encoder-only相关模型的研究。
1 多头放缩点积自注意力机制
首先是注意力机制,然后采用放缩点积的形式进行相似度计算,采用多头的形式并行,最后Q与K/V来自同一序列,因此是“自注意力”。为了便于称呼,后续简称为“自注意力”。
代入Task2博客“2 多头点积注意力”(datawhale:Happy-LLM 打卡-Task02:注意力机制与Transformer的Encoder-Decoder架构《Attention Is All You Need》-CSDN博客)中的具体计算过程,可以得到如下计算过程:

可以看出,自注意力机制在同一个token序列上,计算每个token与其它token的关系,然后融合信息,在整个序列上进行信息融合,然后得到融合了自身信息的token新序列。
2 编码器模块
编码器模块,由N个编码器层堆叠而成。每个编码器层由一个多头自注意力层(MHA层)与一个前馈神经网络层(FFN层)构成。输入文本序列,需要的输出是最后一层的向量表示,作为对输入序列的精炼表示。如下图所示:

可以看出,编码器层先在同一序列的token之间进行信息融合(MHA层,跨token交互),然后对每个token的特征进行非线性变换的语义提炼(FFN层,单个token特征变换)。每一个token都与前后上下文的token进行了充分的交互(即双向全局上下文建模),最终得到包含全局上下文信息的向量表示,在语义理解上具有显著优势。
3 Pre-training预训练
Transformer本身,是用于双语机器翻译,采用序列到序列(Seq2Seq) 的有监督学习,根据源序列与 + 已生成目标前缀,去预测下一个翻译词。
2012年AlexNet,采用交叉熵损失训练有监督分类预训练,在标注图像上做分类预训练,然后在下游的检测 / 分割等具体任务上微调,也被称为“迁移学习”,姑且算是视觉深度学习中监督预训练鼻祖,发展为AlexNet → VGG → ResNet,但是依赖昂贵人工标注,无自监督。
在自然语言领域,2013年Word2Vec使用了静态词表征预训练,2018ELMo通过双层双向 LSTM进行动态上下文词嵌入,也是预训练。二者都是先学习词的表示,然后用于下游具体任务。
由此,这种“预训练+微调”,也就是先大规模预训练获取能力,然后具体微调进行任务适配,显示出其魅力。诚如教程中所言[1]:
通过将预训练和微调分离, 完成⼀次预训练的模型可以仅通过微调应⽤在⼏乎所有下游任务上,只要微调的成本较低,即使预训练成本是之前的数倍甚⾄数⼗倍,模型仍然有更⼤的应⽤价值。因此,可以进⼀步扩⼤模型参数和预训练数据量,使⽤海量的预训练语料来让模型拟合潜在语义与底层知识,从⽽让模型通过⻓时间、⼤规模的预训练获得强⼤的语⾔理解和⽣成 能⼒。
而预训练需要大量是数据进行学习。图像领域,最早通过人工标注形式,为研究人员提供了一个大规模图像数据库用于训练和测试(ImageNet[2])。而自然语言...做标注好像有点困难,因此更倾向于在已有的⽂本语料上进行自监督学习。一个自然的想法,就是破坏掉已有的文本序列,要求预测缺失的部分。
自监督学习巧妙地利用了语言自身的序列特性,实现了“标注”过程的自动化,促使模型在无意识中学会了语法结构、词汇语义甚至广泛的世界知识。这里的“自监督”更多指的是从海量的无标注文本中自动构造训练内容,突破了人工标注的成本和规模瓶颈,但还是在构造了监督数据用于损失函数计算。
2018 年、2019 NLP 预训练领域发展,与Encoder-only、Decoder-only、Encoder-Decoder架构分别结合,诞生了三个标志性的模型:
1. Encoder-only的代表:BERT
2018年10月,Google 提出了 BERT(Bidirectional Encoder Representations from Transformers)。核心是采用掩码语言模型(Masked Language Model,MLM)预训练任务,随机遮蔽输入句子中的部分词汇,要求模型结合上下文双向信息去预测被遮蔽的词。
在推理阶段,要的就是高维向量表示,然后根据具体任务接入输出头去微调。这种方式让模型能够深度理解文本的上下文语义,在当时的文本分类、阅读理解、命名实体识别等各种自然语言理解(NLU)任务上取得了断崖式的提升,影响力很大,确立了 NLP 领域的“预训练 + 微调”标准范式。
2. Decoder-only的代表:GPT
2018 年 6 月,OpenAI 提出了 GPT(Generative Pre-trained Transformer)。核心是采用自回归语言模型(Autoregressive Language Model,AR)预训练任务(或者叫因果语⾔模型,Casual Language Model,CLM),从左到右逐词预测,天生契合“生成”任务。
在推理阶段,就是进行下一个词的预测输出,然后根据具体任务微调。也是“预训练-微调”范式,发布时间比BERT早,但影响力当时较弱。早期的 GPT 在理解任务上略逊于 BERT,但其赋予了模型强大的文本续写和生成能力。随着模型规模的不断扩大,这种自回归预训练方式最终孕育出了后来的 GPT-3 以及ChatGPT,确立了“预测下一个词”在当今的统治地位。
3. Encoder-Decoder的代表:T5
2019 年 10 月,Google 提出了 T5(Text-to-Text Transfer Transformer)。核心是采用去噪序列到序列重构(Denoising Sequence-to-Sequence Reconstruction)的预训练任务,可归纳为三步扰动加噪、双向编码、自回归重构。首先对原始文本施加某种形式的 “破坏 / 噪声”,得到被扰动的输入序列,然后将被扰动的序列送入编码器,由编码器进行双向上下文建模,提取完整的语义表示,最后用解码器以自回归的方式,基于编码器的语义输出,还原出目标文本。这种设计既通过编码器保留了类似 BERT 的双向语义理解能力,又通过解码器训练了类似 GPT 的自回归生成能力。不同的 Encoder-Decoder 模型采用了不同的噪声构造方式,例如 T5 的跨度损坏、BART 的全序列去噪重构、PEGASUS 的间隙句子生成等。
在推理阶段,编码器对完整输入文本进行双向语义编码得到全局语义表示,解码器基于该表示自回归生成完整的目标输出文本,所有任务均通过“输入文本 - 输出文本”的形式完成微调。正如T5 提出的“万物皆可 Text-to-Text”的统一框架,通过添加任务前缀,将翻译、分类、摘要等所有 NLP 任务统一转化为“输入文本-输出文本”的形式,为多任务统一建模提供了极具影响力的范式。
- 注1:虽然,,“因果语⾔模型”叫因果,但是还是在统计意义上的。。只保证预测时不偷看未来 token,并不保证学到的是真实世界的因果关系。同时与“因果推断”不同,前者底层还是进行相关性统计,尽管出现了涌现现象,,后者强调了“相关性不等于因果性”。
- 注2:尽管T5主打的“多任务统一建模”,但是GPT系列在GPT2、GPT3上也实际上实现了文本到文本的多任务,并最终投入实际使用。。2024年就已经是“所有的下游任务都视作text2text任务,只需要加点prompt就能顺利完成”([3]中的评论感叹)。
- 注3:到2026年为止,由于Decoder-only架构在训练上的优势,便于扩大规模、发掘涌现能力,走向“大语言模型”的核心——尺度定律(Scaling laws),同时大多数(或者说所有)任务都能通过输出序列的方式来作为text2text任务(正如task01中提到的文本语言text的承载能力(datawhale:Happy-LLM 打卡-Task01:第一章NLP基础概念-CSDN博客)),成为了主流架构。
4 Encoder-only架构
Transformer在2017年提出。2018年,Google 选择了 Encoder-only路线,通过将 Encoder 层进⾏堆叠,发布了BERT作为代表性模型。但是,BERT本身还使用了下⼀句预测(Next Sentence Prediction,NSP)的预训练任务,引入了段落嵌入,导致与纯粹的“Encoder-only模型”不同。而后续的RoBERTa更接近与纯粹的“Encoder-only模型”。考虑到都已经过去快10年了,,因此这里以纯粹的“Encoder-only模型”进行说明。
只使用编码器模块,即为“Encoder-only仅编码器”架构了。根据编码器模块的特点可以看出,其输出侧重于抽象的向量表示,在语义理解上具有优势。对语言上的“Encoder-only仅编码器”架构给出概念定义:
仅由多层 Transformer 编码器堆叠构成,通过掩码语言模型(Masked Language Model,MLM)进行自监督预训练,具备完整双向上下文建模能力的预训练语言模型。核心是“掩码建模”。
这里的“双向上下文建模”指的就是自注意力机制使得“每一个token都与前后上下文的token进行了充分的交互”。
其特点包括:
- 架构:采用Transformer 编码器堆叠,每层包含多头自注意力(MHA)与前馈神经网络(FFN)两个核心子层,其中的自注意力层不添加因果掩码,保持双向特征,并采用词嵌入(token embedding)与位置编码(positional encoding,也叫位置嵌入position embedding)表示输入的内容。
- 预训练任务:采用掩码语⾔模型(Masked Language Model,MLM),在输入文本中随机选择一定比例的 token,将其替换为特殊掩码符[MASK]、随机 token 或保持原词,让模型根据被掩码位置的双向上下文,预测出原始的 token,让模型学会利用完整上下文理解语义,而非仅靠上文预测下文,从而习得双向语言表示能力(形象的比喻:进行“完形填空”)
- 下游适配:向预训练完成的模型,添加输出头(分类头、序列标注头等),通过微调适配各类自然语言理解(NLU)任务,比如文本分类、情感分析、命名实体识别、语义相似度匹配等。
参考Transformer编码器-解码器架构图,给出“Transformer-Encoder-only仅编码器”的典型架构图如下:

在预训练阶段,输入被掩码的序列,然后要求模型对掩码位置进行预测。
具体而言,模型顶部有一个MLM 预测头,将编码器输出的 token 表示(token矩阵)映射到整个词表维度,通过 softmax 预测被掩码位置的 token,用于计算预训练的交叉熵损失。这个头部仅服务于 MLM 自监督任务,和下游任务逻辑无关。再具体的说,就是把“预测概率矩阵P”中掩码位置的概率分布拿出来,用于计算交叉熵损失。
输出头得到预测概率矩阵P,即对象A的m个位置,每个位置上是对下一个词的预测,表现为对整个词表的概率分布p。
- 注:这里可以对比“Task03”中的“4 输出头”与“5 预测概率矩阵P的使用”。(datawhale:Happy-LLM 打卡-Task03:2.3搭建一个Transformer(tokenizer分词器、Embedding 层token嵌入、位置编码、输出头)-CSDN博客)
预训练的输入、输出如下图所示:

在下游任务阶段,编码器主体(所有 Transformer 层)完全保留,作为通用语义特征提取器。移除顶部的 MLM 预测头,也就是只要到图中蓝色部分的“最后一层的向量表示(token矩阵)”那里就行了,再根据下游任务类型拼接对应的输出头,用任务标注数据对整个模型(编码器 + 新输出头)进行端到端微调。比如说二分类问题,就是输出两个维度,情感判断等多分类问题,就是多个维度输出的概率分布。
这个架构在理解能力上具有显著优势。应用方面,一个是作为上游语言理解模型用于下游任务,分类、命名实体识别(NER)、问答等传统自然语言理解任务,给我印象深刻的是“命名实体识别模型BERT-Bi-LSTM-CRF”。另一方面就是文本嵌入与语义检索,通过对比学习训练专用 embedding 模型,在 RAG、搜索、推荐中作为一召回阶段(bi-encoder,独立编码),二阶段 rerank 用 进行精排(cross-encoder,联合编码)等等。(编码器在检索中可以看这一篇了解一下[4]https://zhuanlan.zhihu.com/p/29965983855)
5 Encoder-only相关模型
变体、改进与应用非常多,养活了大批研究者(不是)。
5.1 BERT
“Encoder-only”架构的代表作为即为Google 团队在 2018年发布的BERT(Bidirectional Encoder Representations from Transformers) ,论⽂《BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding》[5]。采用掩码语⾔模型(Masked Language Model,MLM)与下⼀句预测(Next Sentence Prediction,NSP)的预训练任务,进行无监督预训练,使模型获得强大的语义理解能力,能够输出优秀的向量表示,然后接具体的输出头,在下游任务上进行微调以实现能力的迁移。其将预训练-微调范式发扬光大,甚至可以作为预训练、Encoder-only架构的代名词。由此,Encoder-only架构的模型,也常常被称为“BERT类模型”(毕竟都算是在这个基础上改进得到)。
掩码语⾔模型(Masked Language Model,MLM)为:随机选择 15% 的输入 token,其中 80% 替换为[MASK]、10% 替换为随机词、10% 保持原词,模型需根据双向上下文预测被掩码位置的原始 token,使用交叉熵损失训练。
然后它的预训练任务还使用了下⼀句预测(Next Sentence Prediction,NSP),即引入了特殊字符[CLS]与[SEP],以及段落嵌入(Segment Embeddings),要求模型判断⼀个句对的两个句⼦是否是连续的上下⽂。其输入如下图所示(图源自论文原文):

在输入的时候,于第一个位置引入特殊 token <CLS> ,该 token 代表整句的状态,作为句级的语义表征,[SEP]则作为两个句子的分割符号,段落嵌入用于区分当前token位置是句子A还是句子B。
位置编码方面,使用可学习绝对位置嵌入,在输入侧与词嵌入、段嵌入相加。
分词方法上,使用了WordPiece,词表大小30k。
具体内容不进行展开了。
- 注:值得注意的是,从发展历程而言,BERT是第一个 Encoder-Only 预训练模型,MLM+NSP、Encoder-Only 预训练等都是在它提出来的。但是为了追求“共性”,我们在前面抽象出了纯粹的“Encoder-only模型”(历史发展中并没有,或者说RoBERTa更接近,但是出现的比BERT晚)同时去除NSP 被公认为是改进,特此说明。
5.2 RoBERTa
2019年在论文《RoBERTa: A Robustly Optimized BERT Pretraining Approach》[6]中提出,一种用于稳健优化的 BERT 预训练方法。 具体来说,RoBERTa 使用了动态掩码、没有 NSP 损失的完整句子、更⼤的预训练数据、更⻓的序列⻓度和更多的训练 Epoch。更接近于纯粹的“Encoder-only模型”。
动态掩码:将 Mask 操作放到训练阶段,从⽽让每⼀个 Epoch 的训练数据 Mask 的位置都不⼀致。
预训练方法:只使用MLM任务。
位置编码方面,使用可学习绝对位置嵌入,在输入侧与词嵌入相加。
分词方法上,使用了 BPE,词表大小50k。
5.3 ALBERT
重点在轻量化上(个人感觉),注重参数减少技术[7]。
Embedding 层参数矩阵分解:对 Embedding 层的参数矩阵进⾏了分解,让 Embedding 层的输出维度和隐藏层维度解绑,在 Embedding 层的后⾯加⼊⼀个线性矩阵进⾏维度变换,使得 Embedding 层的输出维度低,然后经过一个线性变换升到维度与隐藏层一致。
改进 NSP为 SOP 预训练任务:正例同样由两个连续句⼦组成,但负例是将这两个的顺序反过来,增加对顺序关系的要求,采用MLM + SOP 预训练。
5.4 ModernBERT
2024年提出,更“现代化”的BERT[8],系统性吸收近年 Transformer 改进(RoPE、FlashAttention、GLU、交替注意力),采用掩码率 30%的MLM预训练任务,8192 token 上下文大小,在理解类任务上实现"更快、更准、更长"的突破。
[1]GitHub - datawhalechina/happy-llm: 📚 从零开始构建大模型 · GitHub
[2]ImageNet
[3]https://zhuanlan.zhihu.com/p/88438851
[4]https://zhuanlan.zhihu.com/p/29965983855
[5][1810.04805] BERT: Pre-training of Deep Bidirectional Transformers for Language Understanding
[6][1907.11692] RoBERTa: A Robustly Optimized BERT Pretraining Approach
[7][1909.11942] ALBERT: A Lite BERT for Self-supervised Learning of Language Representations
更多推荐
所有评论(0)