简介

什么是预训练,预训练能做什么呢?我们通过图片的预训练来介绍预训练在干什么事情,之后再慢慢深入到 BERT 这个预训练模型中去。

博客配套视频链接: https://space.bilibili.com/383551518 配套 github 链接:https://github.com/nickchen121/Pre-training-language-model 配套博客链接:https://www.cnblogs.com/nickchen121/p/15105048.html


一、预训练的定义

预训练是指:在大规模数据集(如 ImageNet)上预先训练一个深度学习模型(通常称为"预训练模型"),获得模型参数后,再将这些参数(尤其是浅层参数)迁移到下游具体任务中进行微调的过程。

【补充】 从机器学习的角度看,预训练本质上是一种迁移学习(Transfer Learning)技术,旨在将在源任务(Source Task)上学到的知识迁移到目标任务(Target Task)上,解决目标任务数据不足的问题。


二、为什么需要预训练?

2.1 深度学习的特点

深度学习的一个显著特点是:需要大数据支持。这与传统的机器学习(如支持向量机、决策树、线性回归等)形成对比——机器学习方法偏数学统计,对数据量要求相对较低。

【补充】 传统机器学习方法的代表著作如李航老师的《统计学习方法》,侧重于数学推导和统计建模;而深度学习则依赖于大规模数据和算力支撑。

2.2 现实问题

实际项目中,很多任务往往面临小数据困境:

例如:给你 100 张猫和狗的图片,要求分类出图片中是猫还是狗。

  • 如果用深度学习从头训练:100 张图片太少了,1000 张或 1 万张才勉强可行
  • 如果从头训练 100 层卷积神经网络:几乎不可能实现,或精度极低

2.3 预训练的解决思路

原视频例子:有研究者做了 10 万张鹅和鸭的图片分类任务,获得模型 A。

解决方案是跨任务迁移: - 任务 A(源任务):10 万张鹅鸭图片 → 已训练好模型 A - 任务 B(目标任务):100 张猫狗图片 → 需要模型 B

核心观察:卷积神经网络的浅层特征是通用的(如横竖撇捺等基础纹理)。

【补充】 这个现象称为特征可迁移性(Feature Transferability)。研究表明,神经网络的底层倾向于学习底层特征(如边缘、纹理),这些特征在视觉任务是通用的;而高层特征则更任务相关。


三、预训练的核心思想(难点重点)

3.1 迁移浅层参数

预训练的核心思想是:复用在大数据任务上训练好的浅层参数,结合小数据任务微调深层参数。

以卷积神经网络为例: - 浅层(底层):学习通用特征(横竖撇捺、边缘、纹理)→ 可跨任务复用 - 深层(顶层):学习任务相关特征 → 需要用目标任务数据训练

3.2 两种实现方式:冻结(Freezing)与微调(Fine-tuning)

方式 浅层参数 说明
冻结(Freezing) 固定不变 完全复用预训练参数,不参与反向传播更新
微调(Fine-tuning) 随训练更新 在目标任务上继续训练,浅层参数也会适应目标任务

【补充】 实际应用中,微调更为常用。因为即使浅层特征是"通用的",目标任务的数据分布与源任务仍可能有差异,微调可以让浅层参数在保留通用特征的同时,也适应目标任务的特点。

原视频原话:"微调的话,我是会一直都会变的。冻结就是浅层参数你永远都不变。"

3.3 预训练的局限性

预训练有一个重要前提:任务 A 与任务 B 必须高度相似

例如:用鹅鸭分类任务训练的模型,可以迁移到猫狗分类任务(都是二分类、都是图像),但: - 很难迁移到命名实体识别(NLP 任务) - 很难迁移到视频描述(视频 + 文本任务)

原视频原话:"模型 A 是在分类鹅和鸭,任务 B 是分类猫和狗,这两个任务极其相似。BERT 包括 Transformer 强大在哪里呢?强大在把这个局限性给解决了。"

【补充】 这正是 BERT 和 Transformer 出现的背景——它们通过更好的预训练任务设计(如语言模型)和更通用的架构(Transformer),突破了视觉预训练的任务相似性限制。


四、预训练怎么用?

4.1 代码层面

原视频提到使用 transformers 库加载预训练好的 BERT 模型:

from transformers import BertModel, BertTokenizer  # 补充:标准用法

【补充】 当前主流做法是使用 Hugging Face 的 transformers 库,其提供了大量预训练模型(如 BERT、GPT、T 5 等),只需几行代码即可加载并微调:

from transformers import AutoModelForSequenceClassification, AutoTokenizer
model = AutoModelForSequenceClassification.from_pretrained("bert-base-chinese")
tokenizer = AutoTokenizer.from_pretrained("bert-base-chinese")

4.2 应用场景

预训练模型可广泛应用于: - 文本分类 - 命名实体识别 - 问答系统 - 机器翻译 - 文本生成


五、总结

原视频原话:"预训练是什么?就是任务 A 和任务 B 极其相似,通过大数据训练出模型 A,得到模型 B,有两种方式:一是微调,二是冻结。"

【补充】 从更宏观的视角看,预训练范式的出现标志着深度学习从"从零训练(Train from Scratch)"走向"预训练 + 微调"的新范式。这一范式大幅降低了下游任务的数据需求和训练成本,是现代 NLP(乃至整个深度学习)最重要的突破之一。


六、面试题

基础概念题

  1. 请用自己的话解释什么是预训练?为什么需要预训练?
  2. 预训练和迁移学习是什么关系?
  3. 深度学习与传统机器学习在数据需求上有什么区别?

技术原理题

  1. 为什么 CNN 的浅层参数可以跨任务迁移?请从特征抽象层次解释。
  2. 请解释"冻结"和"微调"的区别,什么时候该用哪种方式?
  3. 预训练存在哪些局限性?如何克服?

深入理解题

  1. 为什么说预训练思想最早来源于计算机视觉而非 NLP?
  2. 预训练模型在 NLP 的突破(如 BERT)相比 CV 领域的预训练有哪些不同?为什么?
  3. 如果目标任务数据非常少(如只有 10 条),你如何设计预训练策略?

开放思考题

  1. 预训练技术还有哪些潜在的应用场景?它还能解决什么问题?
  2. 你认为未来预训练技术可能往哪些方向发展?