问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

GPT-1原理:开创性的"预训练+微调"范式

创作时间:
作者:
@小白创作中心

GPT-1原理:开创性的"预训练+微调"范式

引用
CSDN
1.
https://blog.csdn.net/weixin_41885239/article/details/137119048

GPT-1作为OpenAI提出的开创性模型,首次将"预训练+微调"的训练范式与Transformer架构相结合,为自然语言处理领域带来了革命性的突破。本文将深入解析GPT-1的模型结构、训练方法及其创新之处,帮助读者全面理解这一里程碑式的工作。

前言

GPT-1(Generative Pre-trained Transformer 1)是OpenAI在2018年提出的重要模型,虽然其发布时间比Google的BERT早几个月,但真正开启了基于Transformer的预训练+微调范式。这种范式不仅被广泛应用于各种自然语言处理任务,还为后续的GPT-2、GPT-3等模型奠定了基础。

提出动机

在自然语言理解(NLU)任务中,如文本蕴含、问题回答、语义相似度评估和文档分类等,传统的AI算法通常采用有监督学习的方式。具体步骤包括:

  1. 构建标注数据集
  2. 构建深度学习或机器学习模型
  3. 训练模型

然而,这种传统方法存在以下局限:

  1. 需要大量人工标注数据
  2. 模型只能完成单一任务
  3. 需要满足数据独立同分布的假设

为了解决这些问题,研究者们开始探索能够在少样本情况下表现良好的模型。

模型猜想

研究者提出了一个创新性的假设:

  1. 在大量未标注且跨领域的数据上预训练一个模型,使其学习到通用知识和基础能力(如词嵌入表示)
  2. 在预训练模型的基础上,使用少量特定领域的标注数据进行微调,以完成特定任务

这种假设得到了词向量表示(如Word2Vec)的验证:

  1. Word2Vec通过无监督学习获得词嵌入表示
  2. 这些词嵌入可以作为其他模型(如RNN、LSTM)的输入特征

基于这些观察,研究者提出了基于Transformer的两阶段训练范式:预训练+微调。

模型提出

研究者选择了Transformer的解码器架构作为GPT-1的基础模型,主要基于以下考虑:

  1. LSTM在处理长文本时存在局限性
  2. Transformer的并行计算能力更强

模型结构

GPT-1的结构基于Transformer的解码器,包含12个解码器层。与标准的Transformer相比,GPT-1在以下几个方面进行了优化:

  1. 位置编码:使用可学习的位置嵌入,而不是固定的正弦和余弦函数
  2. LayerNorm:将LayerNorm操作提前到多头注意力机制之前
  3. 注意力机制:只保留Masked Multi-Head Attention,去除普通的Multi-Head Attention
  4. 激活函数:使用GELU(高斯误差线性单元)代替ReLU

模型参数

模块
参数
解码器块
12层
多头注意力
12头
词嵌入维度
768维
前馈神经网络隐藏层维度
3072维

模型预训练

训练目标

在预训练阶段,模型的目标是学习词的通用表示。具体来说,模型需要预测下一个词的概率,即:

特征(feature)
标签(label)
你是
你是一
你是一个
你是一个打
你是一个打不
...
...

训练方式

模型采用以下策略处理输入数据:

  1. 文本编码:按词级进行编码
  2. 最长文本输入:限制为512个token
  3. batch大小:64个文本序列
  4. 优化器:Adam
  5. 学习率:初始为2.5x10^-4,前2000步保持不变,之后使用余弦退火策略逐渐减小至0
  6. Dropout:丢弃概率为0.1
  7. 训练轮数:100个epoch
  8. 正则化:使用L2正则化

预训练数据集

预训练使用了两个数据集:

  1. BooksCorpus:包含大量书籍数据
  2. 1B Word Benchmark:包含连续文本内容

模型微调

在微调阶段,模型需要在少量特定任务的标注数据上进行训练,以完成具体的自然语言理解任务。为了统一处理不同类型的NLI任务,GPT-1定义了统一的输入范式:

  1. 单文本输入:以开头,结尾
  2. 多文本输入:使用$符号分隔多个文本片段

模型输入范式

模型训练

针对不同类型的NLI任务,微调过程有所不同:

  1. 单句子分类任务(如情感分类)
  • 数据准备:在句子前后添加
  • 模型修改:添加二分类头
  • 训练:计算loss并反向传播更新参数
  1. 多句子分类任务(如文本蕴含)
  • 数据准备:使用$分隔多个文本片段
  • 模型修改:添加二分类头
  • 训练:计算loss并反向传播更新参数
  1. 相似度计算任务
  • 数据准备:使用$分隔两个文本片段
  • 模型修改:添加二分类头
  • 训练:计算loss并反向传播更新参数
  • 特殊处理:将两个文本片段分别放在前面进行两次预测,然后将结果相加
  1. 多项选择任务
  • 数据准备:将问题和每个选项组合成多组数据
  • 模型修改:添加二分类头
  • 训练:计算loss并反向传播更新参数
  • 特殊处理:使用softmax对多个二分类结果进行归一化

微调建议

官方论文给出了以下微调参数建议:

  1. 学习率:6.25 x 10^-5
  2. batch大小:32
  3. 训练轮数:3个epoch

微调疑问点

在微调阶段,损失函数(loss)的计算方式存在一些争议:

  1. 总损失L3 = L2(任务特定损失)+ L1(特殊符号的生成损失)
  2. L1只计算、$、等特殊符号的损失

这种设计的目的是保持模型对特殊符号的敏感性,但实际应用中通常只使用L2进行训练。

实验结果分析

实验结果表明:

  1. 增加Transformer解码器的层数可以提升NLI任务的表现
  2. 预训练模型本身就具有一定的零样本能力,可以在不进行微调的情况下解决某些NLI任务

这些发现对后续的GPT-2和GPT-3的发展产生了重要影响。

GPT-1缺陷

尽管GPT-1取得了重要突破,但仍存在一些局限:

  1. 微调阶段需要根据不同任务添加特定的输出层,这与OpenAI追求的"无需改变模型结构就能解决多种任务"的目标有所偏离
  2. 采用词级输入方式,对于未见过的单词处理能力较弱
  3. 后续的minGPT实现采用了字符级输入,虽然解决了词级输入的问题,但计算量显著增加

这些局限性推动了后续模型(如GPT-2、GPT-3)在模型结构和训练策略上的进一步优化。

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号