{% quot 自回归模型 Autoregressive model,AR %}
本篇主要围绕GPT作为代表了解AR
2018年6月, OpenAI公司发表了论文“Improving Language Understanding by Generative Pre-training”《用生成式预训练提高模型的语言理解力》, 推出了具有1.17亿个参数的GPT(Generative Pre-training , 生成式预训练)模型
特点:decoder-only
基本原理:从左往右学习的模型,只能利用上文或者下文
AR模型通常用于生成式任务,在长文本的生成能力很强,比如NLG领域的任务:摘要、翻译、抽象问答
GPT模型架构
{% image https://blog-vanh.oss-cn-hangzhou.aliyuncs.com/image/clipboard-image-1763463941.png ratio:823/759 %}
- 从上图可以很清楚的看到GPT采用的是单向Transformer模型, 例如给定一个句子[u1, u2, ..., un], GPT在预测单词ui的时候只会利用[u1, u2, ..., u(i-1)]的信息, 而BERT会同时利用上下文的信息[u1, u2, ..., u(i-1),u(i+1), ..., un]
{% image https://blog-vanh.oss-cn-hangzhou.aliyuncs.com/image/clipboard-image-1763464083.png ratio:568/1023 %}
GPT采用了Transformer的decoder模块,但是做了修改
- GPT移除了第二个encoder-decoder attention子层,只保留Masked Multi-head Attention子层和Feed Forward子层
- 对比经典Transformer采用6层decoder,GPT采用了12层
{% image https://blog-vanh.oss-cn-hangzhou.aliyuncs.com/image/clipboard-image-1763464247.png ratio:589/1101 %}
GPT训练过程
GPT训练过程包括两个阶段:1.无监督的预训练语言模型 2.有监督的下游任务fine-tuning
无监督的预训练语言模型
给定句子U = [u1, u2, ..., un], GPT训练语言模型时的目标是最大化下面的似然函数
上述公式具体来说是要预测每个词 $u_i$,这里的k表示上文的窗口大小,理论上k取值越大,模型所能获取的信息越充足,能力越强
GPT是一个单向语言模型,模型对输入U 进行特征嵌入得到 transformer 第一层的输h0,再经过多层 transformer
特征编码,使用最后一层的输出即可得到当前预测的概率分布,计算过程如下
$W_p$可以看作是单位矩阵 → [vocabsize, embeddingdim]
得到输入张量h0后, 要将h0传入GPT的Decoder Block中, 依次得到ht
最后通过得到的ht来预测下一个单词
有监督的下游任务fine-tuning
GPT预训练后, 会针对具体的下游任务对模型进行微调. 微调采用的是有监督学习, 训练样本包括单词序列[x1, x2, ..., xn]和label y. GPT微调的目标任务是根据单词序列[x1, x2, ..., xn]预测标签y
其中Wy表示预测输出的矩阵参数, 微调任务的目标是最大化下面的函数
综合两个阶段的目标任务函数, 可知GPT的最终优化函数为:
整体训练架构图:
{% image https://blog-vanh.oss-cn-hangzhou.aliyuncs.com/image/clipboard-image-1763465461.png ratio:2047/832 %}
数据集和参数
GPT使用了BooksCorpus数据集,文本大小约5GB,包含7400w+的句子。这个数据集由7000本独立的、不同风格类型的书籍组成
| 参数 | 取值 |
|---|---|
| transformer层数 | 12 |
| 特征维度 | 768 |
| transformer head数 | 12 |
| 总参数量 | 1.17亿 |