对于希望学习算法或尝试现有框架的人来说,预训练的模型是一个很好的帮助。由于时间限制或计算资源的限制,不可能总是从头构建模型,这就是为什么存在预训练模型!
通常而言,预训练好的网络参数,尤其是底层的网络参数,若抽取出特征跟具体任务越无关,越具备任务的通用性,所以这是为何一般用底层预训练好的参数初始化新任务网络参数的原因。而高层特征跟任务关联较大,实际可以不用使用,或者采用Fine-tuning用新数据集合清洗掉高层无关的特征抽取器。
一、预训练模型
1、什么是预训练模型?
预训练模型是指在大规模数据集上预先进行训练的神经网络模型,通常在通用任务上学习到的特征可以被迁移到其他特定任务中。预训练模型的思想是利用大规模数据的信息来初始化模型参数,然后通过微调或迁移学习,将模型适应在特定的目标任务上。
即在训练结束时结果比较好的一组权重值,研究人员分享出来供其他人使用。我们可以在github上找到许多具有权重的库。
预训练模型(Pretrained Models)和预训练语言模型(Pretrained Language Models)虽然听起来类似,但实际上涵盖了不同的概念,不过它们之间存在一定的联系。
-
预训练模型(Pretrained Models):
- 是一个广泛的术语,涵盖了所有通过在大量数据上进行训练而得到的模型。这些模型可以用于各种任务,如图像识别、语音识别、自然语言处理等。
- 预训练模型通常在特定任务上进行初始训练,然后在特定的应用场景中进行微调(Fine-tuning)。
- 例如,一个在成千上万张图片上训练的图像识别模型可以被用来识别新图片中的对象。
-
预训练语言模型(Pretrained Language Models):
- 预训练模型的一个子集,专注于处理和理解人类语言的任务。
- 这些模型在大规模的文本数据集上进行预训练,以学习语言的基础结构和模式。常见的例子包括BERT、GPT和Transformer模型。
- 预训练语言模型在被用于特定的下游任务(如文本分类、情感分析、问答系统等)之前,通常需要针对特定任务进行微调。
联系:
- 预训练语言模型是预训练模型的一种特殊形式,专注于处理自然语言。
- 它们共享相同的核心思想:首先在大量的数据上进行训练以捕捉通用的模式或特征,然后根据具体任务进行调整或微调。
- 无论是图像模型、语言模型还是其他类型的模型,预训练的目的都是利用大量数据来提高模型的泛化能力,从而使模型在特定任务上表现得更好。
2、预训练模型分类
预训练模型在各个领域都有广泛的应用,其中一些模型在其领域内非常著名和广泛使用。以下是一些主要领域及其著名的预训练模型:
-
自然语言处理(NLP):
- BERT (Bidirectional Encoder Representations from Transformers): 通过遮蔽语言模型(MLM)进行预训练,适用于各种NLP任务。
- GPT系列 (Generative Pre-trained Transformer): 主要用于文本生成任务,如GPT-2, GPT-3。
- TransformerXL, XLNet: 改进了长距离依赖处理能力。
- RoBERTa: BERT的一个变体,通过更大的数据集和更长的训练时间改进了性能。
- T5 (Text-To-Text Transfer Transformer): 采用“文本到文本”的框架处理所有任务。
-
计算机视觉:
- ResNet (Residual Networks): 在图像识别和分类方面表现卓越。
- Inception: 知名的图像识别模型。
- VGGNet: 在图像处理中广泛使用,特别是在特征提取方面。
- EfficientNet: 用于图像分类,以其高效的性能和准确性而著名。
-
语音识别与处理:
- WaveNet: 用于生成高质量的人声语音。
- DeepSpeech: 由Mozilla开发的开源语音识别模型。
-
多模态学习(结合文本和图像):
- CLIP (Contrastive Language–Image Pretraining): 通过大量的图像和文本对进行预训练,擅长理解图像与文本之间的关系。
- DALL-E: 用于图像生成,根据文本描述生成图像。
-
其他领域:
- BERT for Cheminformatics: 用于化学信息学,特别是药物发现。
- AlphaFold: 用于蛋白质结构预测。
这些模型代表了其各自领域的前沿技术和方法,并在各自的应用场景中取得了显著的成果。
3、预训练方法分类
预训练方法主要取决于模型的类型和应用领域。在不同的领域(如自然语言处理、计算机视觉、语音处理等),预训练方法各不相同。以下是一些常见的预训练方法:
-
自然语言处理 (NLP):
- 遮蔽语言模型(Masked Language Modeling, MLM): 如在BERT中使用,这种方法随机遮蔽输入文本中的某些单词,然后训练模型预测这些遮蔽单词。这有助于模型学习理解和推断上下文。
- 下一个单词预测(Next Word Prediction): 如在GPT系列模型中使用,这种方法训练模型预测给定一系列单词后的下一个单词。这种方法促进了模型学习语言生成能力。
- 句子级任务(Sentence-level Tasks): 如在BERT中使用,包括下一个句子预测(Next Sentence Prediction)等任务,以帮助模型学习理解句子之间的关系。
-
计算机视觉:
- 自监督学习: 这种方法包括在没有标注数据的情况下训练模型,例如通过修改图片(如旋转、颜色变换)并让模型预测这些变化。
- 迁移学习: 在这种方法中,模型首先在大型数据集(如ImageNet)上进行预训练,然后在特定任务上进行微调。
-
语音处理:
- 自动语音识别(ASR): 在大量的语音数据上预训练模型,以便识别和转录语音。
- 声音转换: 通过在各种声音样本上预训练,使模型能够转换或生成特定类型的声音。
-
多模态学习:
- 在图像和文本的组合数据集上进行预训练,例如用于图像标注或视觉问答回答任务。
-
对比学习:
- 在这种方法中,模型被训练以区分相似和不同的样例,例如在图像识别或文本嵌入中识别不同类别的对象或概念。
这些方法可以单独使用或组合使用,以提高模型在特定任务上的性能。预训练通常涉及大量的数据和计算资源,但它使模型能够更好地理解和处理复杂的数据模式。
== 近几年预训练语言模型的发展比较的典型,所以我们的重点主要放在预训练语言模型来研究!==
二、预训练语言模型
与经典的机器学习流程相比,预训练语言模型具有以下三方面优势:1)模型参数规模大。在预训练阶段充分利用大规模无标注数据,能对模型规模的增大提供有力支持,使系统更好地掌握通用语言能力。与此同时,模型只需要对少量特定任务的有标注数据进行微调即可完成下游任务学习,有标注数据的利用率高。
2)模型通用能力强。在通用无标注语料上预训练得到的同一个语言模型,只需要对不同特定任务的有标注数据进行微调即可应用于不同任务中,不需要针对每个任务专门研制模型。
3)模型综合性能好。由于预训练模型掌握极强的通用语言能力,在每个特定任务上都能表现出超越只用该任务标注数据训练模型得到的性能。因此,大规模预训练模型成为自然语言处理甚至整个人工智能领域的重要技术突破,有望将数据驱动的深度学习技术推向新的发展阶段。
1、什么是预训练?
预训练主要分为两大分支,自编码语言模型(Autoencoder Language Model),自回归语言模型(Autoregressive Language Model)。
1.1 自回归语言模型(Autoregressive Language Model)
自回归语言模型是根据上文内容预测下一个可能的单词,就是常说的自左向右的语言模型任务,或者反过来也行,就是根据下文预测前面的单词。GPT 就是典型的自回归语言模型。
- 优点
其实跟下游NLP任务有关,比如生成类NLP任务,比如文本摘要,机器翻译等,在实际生成内容的时候,就是从左向右的,自回归语言模型天然匹配这个过程。
- 缺点
只能利用上文或者下文的信息,不能同时利用上文和下文的信息。
1.2 自编码语言模型(Autoencoder Language Model)
自编码语言模型是对输入的句子随机Mask其中的单词,然后预训练过程的主要任务之一是根据上下文单词来预测这些被Mask掉的单词,那些被Mask掉的单词就是在输入侧加入的噪音。BERT就是典型的自编码类语言模型。
- 优点
它能比较自然地融入双向语言模型,同时看到被预测单词的上文和下文。
- 缺点
主要在输入侧引入[Mask]标记,导致预训练阶段和Fine-tuning阶段不一致的问题,因为Fine-tuning阶段是看不到[Mask]标记的。而Bert这种自编码模式,在生成类NLP任务中,就面临训练过程和应用过程不一致的问题,导致生成类的NLP任务到目前为止都做不太好。
2、预训练任务
预训练任务对于预训练模型非常重要,这决定了预训练模型会在什么下游任务表现的比较好,现在的预训练任务大致分为:监督学习、无监督学习、自监督学习三种。
现在自监督学习任务比较主流,他是监督学习和无监督学习的混合。自监督学习学习的范式和监督学习一样,但是他的label是从数据中自动生成的。
3、预训练模型分类
4、预训练模型压缩
预训练模型至少都有百万级的参数量,由于资源限制和在线的响应速度,这些预训练很难直接部署上线,一般都需要进行压缩,常用的压缩方法有:模型剪枝、权重量化、参数共享、知识蒸馏、模块替换。
- 模型剪枝(Model Pruning ):移除少量的不重要的参数;
模型剪枝就是移除模型的权重、神经元、部分层、通道数、注意力头数,从而减少模型的大小,加快模型推理速度。
- 权重量化(Quantization):使用更少的bits来替换参数;
权重量化就是降低模型的精度,比如从float32降低到float16
- 参数共享( Parameter Sharing ):这个比较直观,就是不同模型直接参数要一样;
CNN是比较早的使用参数共享,预训练ALBERT是参数共享的典型例子,ALBERT的参数大幅度减少,但是在训练和推理阶段并没有比标准的BERT快。一般认为,参数共享不能在推理阶段提高计算效率。
- 知识蒸馏(Knowledge Distillation):使用一个小的学生模型去学习原始模型的中间输出层;
知识蒸馏一般是从一个已经预训练好的模型中通过优化目标来训练一个小的学生模型,目的是找到一个比较稀疏的架构。常用的知识蒸馏方法有:
- 模块替换(Module Replacing):使用更小的替换品去替换原始模型的模块
模块替换是使用小模块替换原始预训练模型的大模块。(Ship of Theseus问题,假如老部件每一次被替换之后,都重新用于建造一艘新的船。到了最后,旧船的部件被完全替换,而新船的部件完全使用了旧船的原部件。最终,这艘「新船」没有一处不来自原来的忒修斯船,而旧船在物质上则已经变成不同的样貌。所以后续问题为:「新船」还是「旧船」才是「忒修斯船」?这就是忒修斯悖论。Xu受到忒修斯悖论启示,提出了悖论压缩,使用更少参数的模块来替换原始模型的对应模块,速度提高了1.94倍,性能是原始模型的98%)
5、下游应用
尽管预训练任务可以从大规模语料中获得通用的语言知识,但是这些知识表示在下游任务中的效果仍然是一个大的话题,现在从迁移学习和fine-tuning两个角度去分析一下:
5.1、Transfor Learning迁移学习
迁移学习是为了从原任务中获得到知识,应用到目标任务。
在NLP领域,一般有如下几种迁移学习方式:域适应、跨语言学习、多任务学习。把预训练模型应用到下游任务是序列迁移任务,任务被顺序的学习,而且目标任务有label数据。
那么具体如何进行迁移学习呢?有哪些注意的地方呢?
1)选择合适的预训练任务、模型架构和语料
比如NSP任务可以使得预训练模型理解两个句子间的关系,那么这些预训练就会更适应Question Answering (QA) and Natural Language Inference (NLI)。
在模型方面,比如BERT在很多任务上表现出众,但是不适合在生成任务
当然目标任务的语料和预训练语料越接近越好,和机器学习的训练集和测试集的原理一样。
2)选择合适的模型层
对于预训练模型,不同的层包含不同的信息,例如词性标注、句法解析、长依赖、语义角色、指代消解。
对于基于RNN的模型,Belinkov和Melamud的论文指出:对于不同的任务,多层LSTM编码器不同层可以学习到不同的表示,比如词性和词义。对于基于Transformer的预训练模型,Tenney发现BERT模型可以表示传统NLP的pipeline,浅层表示句法信息,深层表示语义信息。一般来说,选择预训练模型有如下三种方式:
- (1)只选择预训练模型的静态embedding信息,任务模型从零开始训练;
- (2)把预训练模型的最后一层表示直接加入到任务模型中,比如直接在BERT模型CLS的输出上做文本分类;
- (3)自动选择模型最好的层,比如ELMo,对每一层进行加权求和;
3)如何选择是否tune
目前模型迁移的两种方式是feature extraction(预训练模型的参数不变)和fine-tuning(预训练模型的参数需要变)两个模式。特征抽取方式一般需要更复杂的架构,所以fine-tuning方式更普遍一些。
5.2、Fine-tuning 微调策略
1)两阶段fine-tuning
第一个阶段预训练模型通过中间任务或者语料来fine-tuned,第二阶段在目标任务上进行fine-tuned。
2)多任务fine-tuning
Liu发现BERT在多任务和预训练是互补的
3)加入调整模块进行fine-tuning
fine-tuning的主要缺点是参数的利用率低,因为都调整了,另一个方案是原始的预训练模型参数不变,然后加入和目标任务相关的模块。
Houlsby在BERT的基础上增加了一个调节模块,是一个扩展的模块,每个新任务只需要增加少量的训练参数就可以了,原始预训练模型的参数固定,模型顶层的参数共享即可。
三、未来方向
3.1 架构和预训练方法
- 新的架构:
- Transformer 的计算复杂度太高,序列太长无法计算
- 自动方法:NAS(neural architecture search)
- 将 PTMs 应用到特殊场景,比如低容量设备和低延迟应用程序,其中 PTM 的效率是一个关键因素
- 下游任务偏好不同的架构,需要根据下游任务的类型仔细设计特定任务架构
- 新的预训练任务
- PTM 需要更深的架构,更多的语料和有挑战的与训练任务,这些都需要更高的训练成本
- 训练大模型本身也有挑战,需要高超的技巧,比如分布式、混合精度等
- 要基于现有硬件和软件设计更高效的预训练任务,ELECTRA 是个很好的尝试
- 超越微调
- 微调的不足:参数无效率——每个下游任务都有自己的微调参数。一个改善方法是固定原始参数,为特定任务添加小的微调适配模块
- 新的微调方法:prompt 微调是刺激分布在 PTM 中的语言和世界知识的一种很有前途的方法。具体来说,通过设计、生成和搜索离散(Petroni 等,2019;Gao 等,2021)或连续(Liu 等,2021b;Han 等,2021;Lester 等,2021)prompts 并使用 MLM 对于特定的下游任务,这些模型可以 (1) 弥合预训练和微调之间的差距,从而在下游任务上表现更好;(2) 减少微调大量参数的计算成本。
- 可靠性
- 对抗攻击
- 对抗防御
3.2 多语言和多模态预训练
- 多模态:挑战在于如何对这两种模式中涉及的时间上下文进行建模
- 更有洞察力的解释:至今依然不清楚为啥视觉和语言一起有效
- 更多下游应用:真实世界的应用场景
- 转移学习:要容易适配没见过的语言;应该能处理音频;如何使用多语言多模态直接转移源语言音频到目标语言文本或音频值得探索
3.3 计算效率
- 自动完成设备之间的数据移动
- 并行策略:
- 数据并行非常适合参数集相对小深度学习模型
- 模型和 pipeline 并行适用于参数量较多的模型
- 大规模训练
- HugeCTR,MegatronLM,DeepSpeed,InsightFace 适用不同应用
- 需要一个统一的通用解决方案
- 包装器和插件
- 手动编程通信操作非常复杂
- Mesh-Tensorflow,FlexFlow,OneFLow,MindSpore,GSard
3.4 理论基础
- 不确定性
- 过度自信的预测:不知道自己不知道什么
- OOD(out-of-distribution)数据的挑战
- 使用贝叶斯深度学习
- 泛化和鲁棒性
- 经典的学习理论不足以理解深度网络行为,需要新的工具
- PTM 除了理论问题外,还有其他问题比如:从理论上理解预训练在提高下游任务泛化方面的作用很重要
- 对抗鲁棒性问题:需要更复杂的样例
3.5 Modeledge 学习
我们很难知道 PTM 生成的表示意味着什么。 因此,我们可以将存储在 PTM 中的知识称为 “Modeledge”,区别于人类形式化的离散符号知识。
- 知识感知任务:PTM 可以被看作知识库或开放知识图谱
- Modeledge 存储和管理
- Chen et al. (2020a) 首先剔除 UCKB 的概念,他们将神经网络视为参数化函数,并使用知识蒸馏来导入和导出 Modeledge
- UCKB 克服了模型存储的冗余性,将各种模型的模型边存储到一个共同的连续知识库中
- 在超大规模数据上训练一个超大的模型
- 基于 MoE 将多个模型聚集成为一个大模型
- 如何存储和管理各种连续的 modeledge 是个挑战
- 是否可以构建一个通用连续知识库 (UCKB) 来存储来自各种 PTM 的 Modeledge?
3.6 认知和知识学习
- 知识增强:输入相关的外部知识。考虑到知识和纯文本的格式非常不同,重要的是弥合文本表示和知识表示(包括符号或向量)之间的差距,并统一使用它们的信息作为输入。这个问题的解决方案需要统一的模型架构和知识引导的预训练目标
- 知识支持:有了关于输入的先验知识,我们可以训练不同的子模块来处理不同类型的输入,这可以加速训练和推理的过程并有利于模型效率
- 知识监督:知识库存储大量结构数据,可在预训练期间用作补充来源
- 认知架构:人类认知系统的宏观功能和组织如何为下一代智能系统的设计提供启示
- 明确可控的推理:需要机器将决策过程自动规划为认知图,并像人类一样对图中的因素进行明确推理,如 InversePrompting
- 知识互动:PTMs 从预训练中学到的知识在很大程度上是未开发的。此外,由于我们的大脑在不同功能区的协作下工作,因此重要的是要了解 PTM 是否塑造了不同的内部功能模块以及它们如何相互作用
3.7 应用
- 自然语言生成:机器翻译,摘要,对话生成,故事生成,诗歌生成
- 对话系统:Meena,Blender,CDial-GPT,Plato,Plato-2
- 特定领域预训练模型:BioBERT,SciBERT
- 领域和任务适应:
- 对大 PTM 简单微调对特定领域的应用来说不够充分,最主要的原因是分布偏移——特定领域和通用领域的数据分布可能本质上不同。
- 对超大 PTM,在特定任务的标注数据上简单微调看起来计算效率低下,性能上也没有效果。因此,如何弥合预训练和特定任务微调之间的差距变得至关重要。此外,高效且有效的特定任务微调也是 PTM 未来应用的重要研究方向。
四、资源
- 艾瑞咨询:https://www.iresearch.com.cn/Detail/report?id=4227&isfree=0
- ??预训练语言模型综述:Pre-Trained Models: Past, Present and Future
- 计算机视觉的一些预训练模型
4.?? 万字解读:预训练模型最新综述!