自然语言处理NLP是当代人工智能的关键领域,包含文本识别、智能问答等多个方向任务,通过监督学习方式一般需要大量带标签数据,而对某些特定任务,获取带标签数据成本非常高。GPT通过大量的未标记文本数据来学习一个通用预训练(generative pre-training)的语言模型,并通过语言模型可以学习到内在语义信息,之后针对特定任务只需要用少量的标签数据进行fine-tuning,而不需要对模型结构进行较大改变。其通过一系列实验表明,通用预训练(generative pre-training)的语言模型确实可以学习到潜在语义信息,并在多个不同NLP任务中都取得非常好的效果。
半监督的学习方法在NLP领域并不少见,早期通过无监督word2vec学习词的embedding向量,然后输入给特定任务的模型进行监督训练,但都必须要求足够的标签数据。GPT想要通过通用预训练(generative pre-training)的语言模型来学习到更为深层次的语义信息,为达成目标,这里包含了两个问题:如何去学习更为深层次的语义信息表达?所学习的语义信息能否有效的帮助目标任务?
GPT采用了两阶段的训练方式:通过大量未标记的文本数据进行非监督学习,再用结合特定任务用少量标记数据进行fine-tuning。
1. 训练目标
A. 非监督的预训练
通用预训练(generative pre-training)语言模型的目标是预测下一文本的概率,假设存在一段训练文本{u1,u2,...,un},其中u表示文本序列中的词元,预训练的损失函数为:
B. 监督的fune-tuning过程
监督的fune-tuning主要是针对于特定任务,假设对于分类任务,一段训练文本{u1,u2,...,un}的label为y,此时存在分类任务的准确性loss:
此外还有类似于预训练过程中预测下一文本准确性的辅助训练目标Auxiliary training objectives,这一训练目标一方面是为了帮忙模型学习到特定任务中本身的语义内容,另一方面帮忙收敛。其在之后实验中也表明当特定任务中包含了大量文本时,辅助训练明显提升效果,因此监督的fune-tuning过程的整体LOSS可以表示为,其是一个可调整的超参数。
2. 模型结构
GPT-1的模型结构非常简明,其采用的12层Transformer decoder作为语言模型,之所以选择Transformer,因为其内部采用了self-attention来作为特征提取器,其计算量相比于fc等网络更少,同时可以支持并行计算,并能获取长范围词间信息。为什么只采用decoder层,是因为GPT-1是一个自生成的网络,换而言之,GPT-1输入是文本序列,其输出是下一词,而encoder-decoder一般用于类似于翻译,encoder和decoder分别用于提取不同输入和目标的不同信息。因为没有encoder层,因此在decoder层中移除了同encoder层输出交互的多头模块。
此外对于Transformer中的激活函数采用的是Gaussian Error Linear Unit (GELU),其相对于Relu,要更为平滑,而且是处处可导的。
GPT-1另一个调整是position向量是可学习的,而针对于特定任务的监督的fune-tuning过程中,只需要原来的transformer之后额外添加一个线性层。
因此针对于输入序列U,预测文本的整体通路可以用如下公式表示:
- 式1表示输入序列U在经过文本embedding以及叠加位置embedding,这里W表示embedding矩阵,都是可以学习的参数。
- 式2表示经过隐层经过多层Transformer的过程
- 式3表示最后Transformer层输出经过文本embedding还原为文本的过程
对于特定任务,会在最后Transformer层输出再通过一个线性层得到。此外通过上面模型图中可以看出,虽然GPT本身是生成式模型,但将所有的NLP任务都转换为判别式模型。
3. 训练细节
A. 数据
GPT-1的训练数据是BooksCorpus,内部包含了7,000本小说内容,这些小说内容为很多长段连续的文本,可以帮助模型学习长范围的信息,其通过实验分析,其相比于其他单句且前后不连贯的数据集要好很多。
另一个是bytepair encoding (BPE)的字符压缩方法,传统的NLP都是根据词来划分词典,但当针对于多语言模型时,这个词典将非常大,会极大增加模型的训练负担,而GPT采用的是从字符上去压缩,最终的词典大概在40000左右。
B. 训练
训练过程采用的Adam优化,但在学习率设置,一方面在前2000轮,学习率是从0开始线性提升的,其之后是通过AdamWR方式训练的,AdamWR相比于标准的Adam,一方面引入weight decay来增加L2正则约束,另一方面是引入warm restart,该方法会周期性调整学习率,从而避免学习率在一直减少中陷入了局部最优。