跳转至

6 迁移学习概念

学习目标

  • 了解迁移学习中的有关概念
  • 知道迁移学习的两种迁移方式

6.1 迁移学习基本概念

迁移学习是机器学习中的一种方法,旨在将从一个任务中获得的知识应用到另一个相关任务上。这是一种非常有效的学习策略,尤其是在目标任务数据不足或标注数据稀缺的情况下。通过迁移已经在其他任务中学到的知识,可以显著加快模型在新任务上的训练,并提高模型的性能。

  • 定义

    迁移学习是指利用从一个领域(源领域)或任务(源任务)中学到的知识,来改进另一个相关领域(目标领域)或任务(目标任务)的学习性能。

    源任务:是我们已经有充足数据且已经训练好模型的任务。

    目标任务:是我们需要解决的任务,可能数据较少或数据标注困难。

  • 核心思想

    • 知识迁移:将源任务中学到的模型参数、特征表示或其他知识迁移到目标任务中。
    • 减少对目标领域数据的需求:通过迁移学习,可以在目标任务数据较少的情况下,仍然训练出高性能的模型。
  • 适用场景
    • 目标任务的标注数据有限
    • 源任务和目标任务之间存在一定的相关性
    • 源任务的模型已经在大规模数据上训练过
  • 深度学习中的迁移学习方法

    • 预训练模型
    • Fine-Tuning
  • 迁移学习vs传统机器学习

    特征 传统机器学习 迁移学习
    任务 源任务和目标任务是独立的 源任务和目标任务是相关的
    数据 每个任务都需要足够的数据进行训练 目标任务可以利用源任务的数据进行训练
    知识 每个任务都从零开始学习知识 利用已从源任务学习到的知识
    学习过程 从头开始训练模型 首先在源任务上训练模型,然后将模型迁移到目标任务上

6.2 预训练模型(Pretrained model)

  • 概念

    预训练模型是指已经在大量数据上训练过的模型,这些数据通常是通用的、广泛的语料库或数据集。预训练模型的目标是通过在大规模数据上学习丰富的特征表示,使得它们能够在多种下游任务中表现良好。预训练模型通常具备以下特点:

    • 大规模训练:预训练模型通常是在大规模数据集上进行训练,如 WikipediaCommon CrawlBooksCorpus 等,学习到的表示能够捕捉丰富的语法和语义信息。
    • 通用性:由于预训练模型通常是在多样化的任务或数据集上训练的,它们的表示非常通用,可以应用到多种任务中,而不需要从头开始训练。

    NLP领域,预训练模型往往是语言模型。因为语言模型的训练是无监督的,可以获得大规模语料,同时语言模型又是许多典型NLP任务的基础,如机器翻译,文本生成,阅读理解等。

  • 工作流程

    • 选择一个大型的通用数据集:这可以是一个包含大量文本、图像或音频的数据集。在NLP中,常用的预训练数据集包括:
      • Wikipedia
      • Common Crawl
      • BooksCorpus
      • OpenWebText
    • 训练一个基础模型:通常是一个基于深度学习的模型(如Transformer、BERT、GPT、T5 等)。预训练模型通过大量的训练数据学习到词汇的表示、语法规则、语言模式等。以BERT为例,它在预训练过程中使用了Masked Language Modeling(MLM)Next Sentence Prediction(NSP)任务。
    • 获得一个具有通用能力的模型:在预训练阶段,模型的参数是通过优化某个损失函数来更新的,通常是通过梯度下降法进行训练。此时的模型学习了大量的语言模式和语法信息,但尚未针对任何特定任务进行优化。
  • 常见的预训练模型:

    • Word2Vec: 经典的词嵌入模型。
    • GloVe: 基于共现矩阵的词嵌入模型。
    • FastText: 基于字符n-gram的词嵌入模型。
    • ELMo: 基于双向LSTM的上下文词嵌入模型。
    • Transformer系列:
      • BERT: 基于Transformer Encoder的预训练模型,使用MLM和NSP训练。
      • GPT: 基于Transformer Decoder的预训练模型,使用单向语言模型训练。
      • RoBERTa: 对BERT的改进,移除了NSP任务,并使用动态掩码。
      • BART: 使用Transformer Encoder-Decoder结构进行去噪自编码任务。
      • T5: 将所有NLP任务转换为文本到文本的任务进行训练。

6.3 微调(Fine-tuning)

  • 概念

    微调是指将预训练模型应用到特定任务的数据集上,并调整模型的参数,使其更好地适应新任务。通常是使用新任务的数据集继续训练预训练模型,让模型学习特定任务的特征。

  • 工作流程

    • 加载预训练模型: 加载在大型数据集上预训练好的模型权重。
    • 替换或添加顶层 (Head Layer): 根据新任务的需求,替换或添加顶层。 例如:
      • 对于文本分类任务,可以添加一个softmax分类器。
      • 对于目标检测任务,可以添加检测头。
    • 使用新任务的数据进行训练: 在新任务的数据集上训练模型,通常采用监督学习的方式。
    • 更新参数: 使用反向传播算法更新整个模型的参数,包括预训练模型和新添加的顶层。
  • 微调策略

    • 微调所有层: 更新预训练模型的所有层和顶层参数,这种方式通常能达到最好的效果,但也需要更多的计算资源和时间,容易过拟合。
    • 冻结部分层: 冻结预训练模型的部分层 (例如底层的卷积层或嵌入层),只更新顶层的参数,可以节省计算资源并防止过拟合。
    • 逐步解冻: 先训练顶层,然后逐步解冻预训练模型的层,可以让模型更好地适应新任务。
    • 差异学习率: 使用不同的学习率训练不同的层,通常预训练模型的底层参数使用较小的学习率。

6.4 两种迁移方式对比

对比项 预训练模型 微调
定义 使用已经在大规模数据集上训练好的模型直接进行推理或者迁移。 在预训练模型的基础上对模型进行小范围的调整,适应目标任务。
数据需求 不需要目标任务的数据,可以直接使用预训练模型进行任务执行。 需要目标任务的数据来进行微调,特别是要对模型做一些局部优化。
计算资源 减少训练成本,因为直接使用现成的模型,而不是从头开始训练。 在预训练的基础上做细微调整,减少训练时间,但仍需要一定计算资源。
适用场景 数据极其稀缺的场景,源任务与目标任务相似时(例如,同类型任务)。 当目标任务与源任务有一定差异,但目标任务仍然有一定的数据时。
表现 在目标任务上不一定表现最好,因为没有针对性地进行微调。 微调后,通常能更好地适应目标任务,性能提升显著。
训练方式 直接使用预训练模型进行推理或迁移学习,可能不需要训练。 在预训练模型的基础上进行参数更新,微调模型的部分或全部参数。
  • 直接使用预训练模型,进行相同任务的处理,不需要调整参数或模型结构,这些模型开箱即用。但是这种情况一般只适用于普适任务, 如:FastText工具包中预训练的词向量模型。另外,很多预训练模型开发者为了达到开箱即用的效果,将模型结构分各个部分保存为不同的预训练模型,提供对应的加载方法来完成特定目标。

  • 更加主流的迁移学习方式是发挥预训练模型特征抽象的能力,然后再通过微调的方式,通过训练更新小部分参数以此来适应不同的任务。这种迁移方式需要提供小部分的标注数据来进行监督学习。

  • 关于迁移方式的说明:

    直接使用预训练模型的方式, 已经在FastText的词向量迁移中学习。接下来的迁移学习实践将主要讲解通过微调的方式进行迁移学习。

6.5 为什么需要预训练和微调

  • 解决数据稀缺问题: 在数据量较少的情况下,直接训练一个大型模型很容易过拟合。预训练模型学习到的通用特征可以作为良好的初始化,从而提高模型的泛化能力。
  • 加快训练速度: 预训练模型已经学习到了一些有用的特征,因此微调通常比从头开始训练模型更快。
  • 提高模型性能: 预训练模型能够捕捉到数据中的深层模式和规律,微调能够让模型更好地适应新任务,从而提高模型性能。
  • 降低训练成本: 预训练模型通常需要大量的计算资源,但只需训练一次,可以在多个任务中重复使用,从而降低了整体的训练成本。