Pre-training and Fine-tuning Paradigm(范式)★
Pretraining(预训练):
流程:使用大规模数据集训练一个基础模型。该过程主要用于学习输入数据的通用general特征或表示。这一初始训练通常是在一个与最终任务相关但不完全相同的任务上进行的。
数据:大规模数据集,用于捕捉广泛的特征和模式。
输出:基础模型(Base Model),包含了初步学习到的特征和表示。
NLP中的应用:例如,一个模型可能在大规模文本语料库上进行预训练,任务包括预测句子中的缺失词(掩码语言模型)、预测序列中的下一个词(语言模型)或预测两个句子是否连续(下一句预测)。
计算机视觉中的应用:可能涉及在大规模图像数据集上训练卷积神经网络(CNN),以学习边缘、纹理和形状等通用特征。
Fine-tuning(微调):
流程:在预训练模型的基础上,使用较小的特定领域数据集或特定任务数据集domain-specific datasets or a specific task datasets 进行进一步训练。这个过程调整模型的参数,使其更好地适应新数据或新任务。
数据:较小的数据集,针对特定任务或领域。
过程:在微调过程中,模型的参数被调整以更好地适应新数据或新任务,同时利用预训练中学到的知识。这通常涉及使用较小的学习率,以避免灾难性遗忘之前学到的特征。
优势:微调允许模型适应目标任务或数据集的具体细节,从而提高性能
用于computer vision
ImageNet数据集是一个包含大量真实世界图像的标注数据集,广泛用于计算机视觉研究,包含1000个对象类别和数百万张图像。
上部框架:
预训练阶段:使用ImageNet数据集训练标准的卷积神经网络(CNN)架构,例如VGGNet、ResNet、Inception等。模型学会了识别图像的通用特征。
权重转移:将预训练阶段学到的网络权重转移到新任务中。
下部框架:
定制顶部层:在预训练模型的基础上,添加自定义的顶部层,适应具体的新任务。
冻结和学习:部分层的参数被冻结(Freeze),保持不变,而新添加的顶部层则进行学习(Learn),调整参数以适应新任务。
测试阶段:
测试数据:使用新的图像数据进行模型预测。
集成方法(Ensemble Methods):将多个模型的预测结果组合起来,提高预测性能。
最终预测(Predictions):输出最终的预测结果。
用于自然语言处理
通过无标签文本语料库生成通用的词嵌入,如Word2Vec、GloVe和FastText。
1.Word2Vec
原理:基于分布假设(Distributional Hypothesis),表示词汇的方法是通过学习它们的共现统计数据来生成词向量。Based on the distributional hypothesis, representing words with vectors learned from their co-occurrence statistics.
方法:Word2Vec有两种主要的训练方法:
CBOW(Continuous Bag of Words):预测给定上下文窗口中的中心词。
Skip-gram:给定一个词,预测其上下文中的词。
共现统计(Co-occurrence Statistics)是指在给定的文本语料库中,计算不同词汇在相同上下文中共同出现的频率。这种统计方法用于捕捉词汇之间的语义关系,常用于词嵌入模型的训练。
2. GloVe (Global Vectors for Word Representation)
原理:利用全局词-词共现统计数据来学习词向量。通过构建一个词共现矩阵,并利用该矩阵进行因式分解,得到每个词的向量表示。
方法:GloVe通过优化目标函数,使得词向量能够捕捉到词与词之间的语义关系。
3. FastText
原理:在词嵌入中引入子词信息,对于处理未登录词(out-of-vocabulary words,OOV)特别有用。通过将单词分解为多个子词,并利用这些子词来生成词嵌入,从而提升模型的泛化能力。
方法:FastText在Word2Vec的基础上进行了扩展,使得模型不仅能学习词的表示,还能学习子词的表示,这样即使是训练集中未出现的词也能得到合理的向量表示。
基于Transformer的模型
如ELMo、BERT和GPT-1扩展预训练方法,用于自然语言任务,成为开发大型语言模型的核心技术路径。这些模型利用Transformer架构的优势,通过自注意力机制捕捉长距离依赖关系,使得模型能够高效地处理和生成自然语言文本
通过在大规模数据上进行预训练,再在具体任务上进行微调,这些模型在广泛的NLP任务中取得了卓越的表现。
基于Transformer的预训练模型具有高度的通用性和扩展性,能够适应多种任务,成为开发大型语言模型的核心技术路径。
Pretrained Foundation Models (PFMs)
预训练基础模型(PFMs)被认为是各种下游任务的基础,通过在大规模数据上训练提供合理的参数初始化,用于广泛的下游应用。
Pretrained Models in CV
计算机视觉中的监督任务:
分类(使用ImageNet数据集和LeNet、AlexNet、ViT等方法)
语义分割(使用Pascal VOC和COCO数据集,方法包括FCN、DeepLab、PVT)
检测(使用COCO数据集,方法包括Fast R-CNN、YOLO、SSD)
Vision Transformer (ViT)
Vision Transformer (ViT) 是一种基于 Transformer 架构的计算机视觉模型,通过将图像划分为固定大小的 patch,然后对每个 patch 进行线性嵌入,并添加位置嵌入,最终将这些向量序列输入到标准的 Transformer 编码器中,生成最终的图像表示。Generally, ViT is pretrained on ImageNet
- Split an image into fixed-size patches
- Linearly embed each of them
- Add position embeddings,
- Feed the resulting sequence of vectors to a standard Transformer encoder
- Get the final represetaition
- Classification layer
图片解释
左侧:展示了图像如何被分割为固定大小的 patch,并通过线性投影和位置嵌入生成嵌入向量序列。
中间:嵌入向量序列被输入到 Transformer 编码器中。Transformer 编码器包括多层(L 层)叠加的多头自注意力机制和前馈神经网络。
右侧:Transformer 编码器的输出表示被用于分类层进行图像分类任务。
详细步骤
1.图像划分为固定大小的 patch
·图像被分割成若干个固定大小的 patch,例如 16x16 像素的块。每个 patch 都被看作是一个小的图像部分。
2.对每个 patch 进行线性嵌入:
·每个 patch 被展平为一个向量,然后通过一个线性投影(线性层)将这些向量映射到固定维度的嵌入空间中。
3.添加位置嵌入:
·由于 Transformer 模型本身不具备位置信息,因此需要添加位置嵌入(Position Embeddings)来编码每个 patch 在图像中的位置信息。这有助于模型理解每个 patch 的相对位置。
4.输入到 Transformer 编码器:
·将线性嵌入和位置嵌入后的 patch 向量序列输入到标准的 Transformer 编码器中进行处理。Transformer 编码器通过多头自注意力机制和前馈神经网络来处理这些向量序列,生成每个 patch 的最终表示。
5.分类层:
·为了进行分类任务,通常会在向量序列的开头添加一个可学习的分类 token([CLS]),该 token 的最终表示用于分类层来进行图像分类任务。
6.预训练:
·ViT 模型通常在大型图像数据集(如 ImageNet)上进行预训练。通过预训练,模型可以学习到丰富的图像特征,然后在下游任务(如图像分类、物体检测等)中进行微调。
计算机视觉中的注释成本高,因此从监督任务转向自监督任务,例如图像修复和上色,这些任务无需额外的注释。
} Inpainting task: reconstructing missing or damaged parts of an image
} Colorization: adding color to grayscale images or videos
Pretrained Models in NLP
自然语言处理中的预训练模型演变(from the perspective of task solving capacity):
1.从统计语言模型到神经语言模型(如Word2Vec、GloVe)
特点:使用 n-gram 模型&统计方法和概率估计
任务解决能力:主要辅助特定任务,适用于具体任务的助手(Specific task helper)
2.神经语言
特点:静态词表示(如Word2Vec)&神经上下文建模(Neural context modeling)
任务解决能力:任务无关的特征学习器(Task-agnostic feature learner),可以解决典型的NLP任务(Solve typical NLP tasks)
3.从神经语言模型到预训练语言模型(如BERT、GPT-1、T5)
特点:上下文感知表示(Context-aware representations)&预训练 + 微调(Pre-training + fine-tuning)
任务解决能力:可迁移的NLP任务解决器(Transferable NLP task solver),解决多种NLP任务(Solve various NLP tasks)
4.从预训练语言模型到大规模语言模型(如GPT-3/4、ChatGPT)
规模化语言模型(Scaling language models)&基于提示的完成(Prompt-based completion)
任务解决能力:通用任务解决器(General-purpose task solver),解决各种现实任务(Solve various real-world tasks)
Language Modeling★
语言模型是一种自然语言的概率模型,任务是给定一系列单词预测下一个单词。模型通过估计单词在上下文中的概率分布来理解自然语言的结构和模式。
Three architectures of pretraining in NLP
编码器(如BERT):获取双向上下文,适合文本分析。
编码器-解码器(如T5):结合编码器和解码器的优点,适合自然语言理解任务。
解码器(如GPT):适合生成任务,特别是需要生成与预训练时词汇类似的序列。
Recall:
Encoder: The encoder takes the input data and processes it into a fixed-size representation called the “context vector” or “hidden state.” The input data can be a sentence, paragraph, or image.
Decoder: The decoder takes the context vector produced by the encoder and generates the output data. It can be another sequence of different length, such as a translated sentence, a response in a chatbot, or a different image.
Pretraining Encoders--BERT★
预训练目标(Pretraining objective)
问题:由于编码器能够获取双向上下文(bidirectional context),不能直接进行语言建模(传统的语言模型,如RNN和LSTM,通常是单向的)。
解决方案:掩码语言模型(Masked Language Modeling),MLM通过随机掩码一些单词,然后让模型预测这些被掩码的单词,从而避免了看到未来的信息。
方法:在输入中用特殊的[MASK]标记替换一些单词,然后预测这些被掩码的单词。
什么是subword tokens
传统的基于单词的词汇表可能过于庞大且无法处理所有可能出现的词汇。子词分词通过将单词拆分为更小的子词单元tokenizer,解决了这一问题。
特殊标记(Special Tokens):
[CLS]:分类标记,用于句子级别的分类任务。这个标记通常放在输入序列的开头。
[SEP]:分隔标记,用于区分两个句子或段落。在句子对任务中,[SEP] 用于分隔两个句子。
[PAD]:填充标记,用于将输入序列填充到相同长度。这对于批处理训练非常重要。
[MASK]:掩码标记,用于掩盖语言模型任务中要预测的词。
BERT分词器的重要参数
vocab_size:
词汇表大小:BERT模型词汇表中的词汇总数。BERT-Base模型的词汇表大小通常为30522。
max_length:
最大长度:输入序列的最大长度。所有输入序列都将被填充或截断到这个长度。常见的最大长度为128或512。
do_lower_case:
是否小写化:如果设置为True,分词器将把所有输入文本转换为小写。这在处理不区分大小写的文本时非常有用。BERT-Base-Uncased模型默认设置为True。
pad_to_max_length:
填充到最大长度:如果设置为True,所有输入序列将被填充到最大长度。这对于批处理训练是必需的。
truncation:
截断:如果输入序列超过最大长度,是否进行截断。可以设置为True来确保输入序列不超过最大长度。
return_tensors:
返回张量类型:指定返回的张量类型。可以是'tf'(TensorFlow)、'pt'(PyTorch)或'np'(NumPy)。这决定了分词后的输出格式。
BERT(Bidirectional Encoder Representations from Transformers)
第一个任务:掩码语言模型(Masked LM):
目标:在BERT中使用的掩码语言模型是为了预测随机15%的子词令牌(subword tokens)。
词片段分词:BERT使用WordPiece算法将单词拆分为更小的子词单元。例如,“playing”可能被拆分为“play”和“##ing(##表示子词)”。这种方法有助于处理罕见词和拼写错误的词。
具体操作:
80%的情况:将输入词替换为[MASK]标记。
10%的情况:将输入词替换为随机词(例如pizza替换了went,虽然是错的)。
10%的情况:输入词保持不变,但仍需预测(例如to)。
第二个任务:下一句预测(Next Sentence Prediction):
目标:预测一个句子是否紧跟在另一个句子后面(相邻)或是随机抽取的。
争议:后续研究认为“下一句预测”任务并不是必要的。
Fine-tuning
在BERT的顶部添加任务特定的层。例如,对于分类任务,可以在顶部添加一个全连接层,用于输出类别。
输入处理
文本编码: 使用BERT分词器将输入文本转换为令牌ID,并添加必要的特殊标记(如[CLS]和[SEP])
然后加载模型调就行,使用标注数据进行有监督训练,通过反向传播更新模型参数。
BERT的两个版本:BERT-base和BERT-large,预训练在BooksCorpus和英语维基百科上进行。
Trained on:BooksCorpus (800 million words)&English Wikipedia
Cost:
- 预训练大型语言模型(如BERT)需要大量的计算资源和时间。这是因为模型的规模很大,参数数量庞大,需要处理大量的训练数据。
- 单个GPU的计算能力和内存有限,无法高效地处理大规模的预训练任务。
- 例如,BERT的预训练使用了64个TPU(张量处理单元)芯片,花费了4天时间。TPUs是一种专门用于加速张量运算的硬件,比传统的GPU在深度学习任务中更高效。
- 预训练好的模型可以在单个GPU上进行微调,因为微调通常只需处理较小的特定任务数据集,计算量相对较小。
BERT的扩展版本:RoBERTa
RoBERTa(Robustly Optimized BERT Approach):
主要改进:RoBERTa主要通过延长训练时间并移除下一句预测任务来改进BERT。尽管模型架构没有大的变化,但这些改进显著提升了性能。
研究发现:RoBERTa的研究表明,即使不改变底层的Transformer编码器,更多的计算和数据也能显著改进预训练效果。
BERT(Bidirectional Encoder Representations from Transformers)是一种基于双向Transformer编码器的预训练语言模型,旨在从大量的文本数据中学习丰富的上下文信息,通过掩码语言模型(MLM)和下一句预测(NSP)进行预训练,之后在各种自然语言处理任务上进行微调。
BERT模型通过其编码器生成输入序列的上下文表示。虽然BERT本身不生成具体的输出(如文本生成),但其输出的上下文表示可以用于多种下游任务,通过添加额外的任务特定层(如全连接层和softmax层)实现特定任务的预测和分类。这种设计使BERT成为一个强大的通用预训练模型,在多种自然语言处理任务中表现出色。
Pretraining Encoder-Decoders – T5(Text to Text Transfer Transformer)
编码器-解码器架构结合双向上下文和语言建模,用于训练整个模型。
编码器-解码器结构可以执行类似语言建模的任务。
编码器部分受益于双向上下文信息,而解码器部分则用于通过语言建模训练整个模型。
T5模型采用了编码器-解码器结构,通过一种称为“跨度破坏”的预训练方法来训练。相比传统的语言建模,这种方法更能有效地利用双向上下文信息,并且通过微调,T5模型能够适应多种下游任务,如问答系统、文本生成等。这种方法不仅提高了模型的预训练效果,还增强了其在多任务环境中的适应能力。输入只能文本,输入图片会转换为文字描述
T5模型的特点
多任务微调(Fine-tuning for a Wide Range of Tasks):
T5模型的一个有趣特点是它可以被微调以回答各种问题,从其参数中检索知识。
这使得T5模型在多种NLP任务中表现出色。
Span Corruption(去噪/跨度破坏)任务优于纯语言建模,T5可以微调以回答广泛的问题,从其参数中检索知识。pretrained using an objective where spans of text are replaced with a special mask token, and the model learns to generate the missing text spans
在这种方法中,输入文本的一部分(称为跨度,span)会被随机选择并替换为一个特殊的标记(如[MASK]),而模型的任务是根据上下文恢复这些被替换的文本。
预训练步骤
1.随机选择跨度:
从输入文本中随机选择一些连续的词作为跨度。
2.替换为特殊标记:
将这些跨度替换为特殊标记(如[MASK]),以创建带有缺失部分的输入文本。
模型任务:
3.模型接收带有特殊标记的输入文本,并试图预测和恢复被替换的跨度文本。
示例
假设输入文本为“Natural language processing is fascinating”:
1.随机选择跨度,例如“language processing”。
2.替换为特殊标记,得到输入文本:“Natural [MASK] is fascinating”。
3.模型的任务是根据上下文预测并恢复被替换的部分,输出“language processing”。
优点
增强上下文理解:
通过预测被掩码的跨度,模型学会更好地理解上下文信息。
提高鲁棒性:
这种方法使模型能够应对不同长度和类型的上下文缺失情况,提高其鲁棒性。
统一框架:
这种预训练方法与T5的文本到文本框架一致,简化了预训练和微调的过程。
图片解释
原文(Original text):显示了原始句子“Thank you for inviting me to your party last week.”
处理后的输入(Inputs):该句子被处理后,部分内容被替换为占位符placeholder。处理后的句子为“Thank you <X> me to your party <Y> week.”(输入文本的破坏)
目标(Targets):目标是恢复被占位符替换的部分,即“<X> for inviting <Y> last <Z>”.
模型结构:展示了一个编码器-解码器结构。编码器将输入的占位符序列编码为上下文向量,解码器基于这些向量生成原始文本。
MLM(如BERT):使用编码器(Encoder-only)结构,模型只能理解上下文信息,而不生成新的序列,输出是预测的词的概率分布,使用无监督的大规模语料进行预训练
跨度破坏(如T5):使用编码器-解码器(Encoder-Decoder)结构,模型不仅需要理解上下文信息,还要生成新的序列来恢复被遮掩的片段。需要成对的输入输出文本序列作为监督数据进行预训练
T5在在自然语言理解任务中表现更好的任务上更具优势,例如机器翻译、文本摘要,而BERT更适合理解类任务例如情感分析、命名实体识别等
Pretraining Decoders– GPT
自然语言模型预训练解码器Generative Pretrained Transformer (GPT):
将解码器作为语言模型预训练,然后用作生成器是很自然的做法。
这在输出是一个类似于预训练时的词汇表的序列的任务中非常有用。
GPT的解码器使用了自注意力机制,通过关注输入序列中的前序单词来生成新的单词
2018年的GPT在预训练解码器方面取得了巨大成功!
模型结构:使用12层Transformer解码器,包含1.17亿参数。
隐藏状态维度:768维的隐藏状态和3072维的前馈隐藏层。
分词方法:使用Byte-pair encoding(BPE)进行分词,共有40,000个合并操作。
训练数据:在BooksCorpus上训练,包含超过7000本独特的书籍,这些书籍包含了长篇的连续文本,有助于学习长距离依赖关系。
名称起源:原始论文中未提及“GPT”这个缩写,可能代表“Generative PreTraining”或“Generative Pretrained Transformer”。
微调任务中的输入格式:
以自然语言推理为例,对句子对进行标注(如蕴涵(entailment)、矛盾(contradiction)和中立(neutral))。
输入格式示例:
前提(Premise):The man is in the doorway
假设(Hypothesis):The person is near the door
标注:entailment(蕴涵)
输入序列格式(为了将前提和假设输入到模型中进行微调,需要将它们组合成一个序列):
[START] The man is in the doorway [DELIM] The person is near the door [EXTRACT]
在线性分类器上应用于[EXTRACT]token的表示。
[START]:序列的开始标记
[DELIM]:分隔标记,用于区分前提和假设。
[EXTRACT]:表示序列结束的标记,或者用于提取特定表示的标记。
参数解释
max_length: 指定生成的文本的最大长度。
num_return_sequences: 指定生成多少个不同的文本序列。
GPT模型(Finetuned Transformer LM)在各个数据集上都取得了优异的成绩,例如MNLI-m和MNLI-mm分别达到了82.1和81.4的准确率,SNLI达到了89.9的准确率。
图片源于 COMPSCI714 UOA