GPT 模型
GPT 模型
GPT 模型的预训练
在讲解 ELMo 的时候,我们说到 ELMo 这一类预训练的方法被称为 “Feature-based Pre-Training”。并且如果把 ELMo 这种预训练方法和图像领域的预训练方法对比,发现两者模式看上去还是有很大差异的。
除了以 ELMo 为代表的这种基于特征融合的预训练方法外,NLP 里还有一种典型做法,这种做法和图像领域的方式就是看上去一致的了,一般将这种方法称为 “基于Fine-tuning的模式”,而 GPT 就是这一模式的典型开创者,下面先让我们看看 GPT 的网络结构。
GPT 是 “Generative Pre-Training” 的简称,从名字看其含义是指的生成式的预训练。
GPT也采用两阶段过程:
第一个阶段:利用语言模型进行预训练;
第二个阶段:通过 Fine-tuning 的模式解决下游任务。
上图展示了 GPT 的预训练过程,其实和 ELMo 是类似的,主要不同在于两点:
首先,特征抽取器用的不是 RNN,而是用的 Transformer,它的特征抽取能力要强于RNN,这个选择很明显是很明智的;
其次,
GPT 的预训练虽然仍然是以语言模型作为目标任务,但是采用的是单向的语言模型,所谓 “单向” 的含义是指:语言模型训练的任务目标是根据 wiwi 单词的上下文去正确预测单词 wiwi , wiwi 之前的单词序列Context-before称为上文,之后的单词序列Context-after称为下文。
ELMo 在做语言模型预训练的时候,预测单词 wiwi 同时使用了上文和下文,而 GPT 则只采用 Context-before 这个单词的上文来进行预测,而抛开了下文。
GPT 这个选择现在看不是个太好的选择,原因很简单,它没有把单词的下文融合进来,这限制了其在更多应用场景的效果,比如阅读理解这种任务,在做任务的时候是可以允许同时看到上文和下文一起做决策的。如果预训练时候不把单词的下文嵌入到 Word Embedding 中,是很吃亏的,白白丢掉了很多信息。
GPT 模型的 Fine-tuning
上面讲的是 GPT 如何进行第一阶段的预训练,那么假设预训练好了网络模型,后面下游任务怎么用?它有自己的个性,和 ELMO 的方式大有不同。
上图展示了 GPT 在第二阶段如何使用:
首先,对于不同的下游任务来说,本来你可以任意设计自己的网络结构,现在不行了,你要向 GPT 的网络结构看齐,把任务的网络结构改造成和 GPT 一样的网络结构。
然后,在做下游任务的时候,利用第一步预训练好的参数初始化 GPT 的网络结构,这样通过预训练学到的语言学知识就被引入到你手头的任务里来了。
再次,你可以用手头的任务去训练这个网络,对网络参数进行 Fine-tuning,使得这个网络更适合解决手头的问题。就是这样。
这有没有让你想起最开始提到的图像领域如何做预训练的过程,对,这跟那个预训练的模式是一模一样的。