4. OpenAI GPT算法原理解析

1. 语言模型

2. Attention Is All You Need(Transformer)算法原理解析

3. ELMo算法原理解析

4. OpenAI GPT算法原理解析

5. BERT算法原理解析

6. 从Encoder-Decoder(Seq2Seq)理解Attention的本质

7. Transformer-XL原理介绍

1. 前言

本文对2018年OpenAi提出的论文《Improving Language Understanding
by Generative Pre-Training》作一个解析。html

一个对文本有效的抽象方法能够减轻NLP对监督学习的依赖。大多数深度学习方法大量的人工标注信息,这限制了在不少领域的应用。在这些状况下,能够利用来未标记数据的语言信息的模型来产生更多的注释,这可能既耗时又昂贵。此外,即便在可得到至关大的监督的状况下,以无人监督的方式学习良好的表示也能够提供显着的性能提高。到目前为止,最引人注目的证据是普遍使用预训练词嵌入来提升一系列NLP任务的性能。算法

2. OpenAI GPT原理

本文提出一种半监督的方式来处理语言理解的任务。使用非监督的预训练和监督方式的微调。咱们的目标是学习一个通用的语言标示,能够通过很小的调整就应用在各类任务中。这个模型的设置不须要目标任务和非标注的数据集在同一个领域。模型有两个过程。网络

  1. 使用语言模型学习一个深度模型
  2. 随后,使用相应的监督目标将这些参数调整到目标任务

3. OpenAI GPT模型结构

3.1 非监督预训练

处理非监督文本\((x_1,x_2,...,x_m)\)的普通方法是用语言模型去最大化语言模型的极大似然。框架

\[ L_1(X)=\sum_ilogP(x_i|x_{i-k},...,x_{i-1}:\theta) \]函数

文章中使用的是多层Transformer的decoder的语言模型。这个多层的结构应用multi-headed self-attention在处理输入的文本加上位置信息的前馈网络,输出是词的概念分布。
\[ h_0=UW_e+W_p \]
\[ h_l=transformer\_block(h_{l-1}) \]
\[ P(u)=softmax(h_nW^T_e) \]性能

3.2 监督微调fine-tuning

这个阶段要对前一个阶段模型的参数,根据监督任务进行调整。咱们假设有标签数据集\(C\),里面的结构是\((x_1,x_2,...,x_m,y)\)。输入\((x_1,x_2,...,x_m)\)通过咱们预训练的模型得到输出向量\(h_l^m\),而后通过线性层和softmax来预测标签。
\[ P(y|x_1,x_2,...,x_m)=softmax(h_l^m{W_y}) \]
\[ L_2(C)=\sum_{x,y}logP(y|x_1,...,x_m) \]学习

咱们增长了语言模型去辅助微调,提升了监督模型的结果。最后的损失函数能够标示为
\[ L_3(C)=L_2(C)+\lambda{L_1(C)} \]spa

模型结构以下:3d

image

3.3 特殊任务的输入变换

对于有些任务,像文本分类,咱们可以直接用上文的模型进行微调。另外的任务,问答系统,须要构造输入的句子对,或者三个文档。因为咱们的预训练模型须要连续的文本序列,咱们须要改变这种多句文本的输入。code

  • 文本含义:用$连接先后两个文本
  • 类似度:对于类似度的问题,因为没有文本内部的前后顺序。咱们能够有两个输入\(Text1\$Text2\)\(Text2\$Text1\),输出的表示向量在加起来。
  • 问答系统:有\(Context\)\(Answer_1,...,Answer_N\),咱们能够组合成\(N\)\(Context\$Answer_i\)输入,得到N个输出,在经过linear后softmax出几率分布。

4. 总结

论文中介绍了一经过预训练学习和有针对性的微调的个强有力的框架。经过预训练是不一样的长文本连续的数据集,模型可以有能力去处理长而广的依赖关系,这个是解决问答系统、语义类似度、文本分类中的关键点。