什么是预训练:
AI 中的预训练是指使用一个任务训练模型,以帮助它形成可用于其他任务的参数,从而节约大量的时间和资源。(站在巨人的肩膀上解决问题)
训练前的概念受到人类的启发。由于天生的能力,我们不必从零开始学习所有东西。相反,我们转移和重用我们过去学到的旧知识,以了解新知识并处理各种新任务。在人工智能中,训练前模仿人类处理新知识的方式。即:使用以前学习过的任务的模型参数初始化新任务的模型参数。这样,旧知识可帮助新模型从旧经验而不是从零开始成功执行新任务.
nlp中的预训练发展过程:
在nlp预训练的发展道路上主要出现了五种比较流行的模型,他们各自的特点以及优化,不断的进步。
- Word2vec:谷歌开发的一个工具,可以静态嵌入向量。
- ELMO: 是一种 AI 技术,用于使用 LSTM 进行动态单词嵌入。
- GPT:GPT 是一种基于Transfromer的自回归语言模型。
- BERT:BERT 是基于Transfromer的自动编码器语言模型。
- XLNET:XLNet 是一种集成 GPT 和 BERT 的 AI 技术。
各模型的介绍:
本文主要通过简单描述,从而了解各模型的优点和特点,以及相互之间的优缺点,篇幅有限不对模型结构进行过多的介绍。
word2vec
2013年,Google公开为单词嵌入提供了一个著名的工具word2vec,它可以有效地训练数百万个单词。
word2vec的主要思想在于对中央单词编码与周围单词编码进行比对,而后进行训练从而得出词语的嵌入向量。
常见的word2vec有CBOW和n-grams,前面我已经介绍了相关知识:链接。
ELMO
要理解ELMo,我们必须考虑从Word2Vec中学习的嵌入词是静态的:无论上下文如何,它都不会改变。这导致 word2vec 的单词嵌入不能处理多语言单词的情况。
但是我们可以根据上下文调整嵌入这个词,赋予它一个更语义的含义——这就是ELMo发挥作用的地方。它是根据当前上下文动态调整单词嵌入的想法。
原理:
ELMo 的网络架构在 word2vec 学习的单词嵌入层顶部使用两层双向 LSTM。众所周知,LSTM被称为长短期记忆单元,通过Lstm与RNN的对比便可发现LSTM的优点在于让序列可以长时间的记住前序列的特征,ELMo便是运用到了这一个优势,从而实现了动态的上下文嵌入。
ELMo 的预训练过程不仅学习单词嵌入,还学习两层、双向 LSTM 网络结构,在面对新任务时,两者都有自己的角色。
GPT
要了解GPT必须先从Transfromer聊起,Transfromer以它独特的self-attention以及抛弃了RNN结构,解决了RNN中长期依赖问题开启了跨时代的进步,也够后面又一个跨时代的产物bert打下了良好的基础。
在前文中我以及具体解读了Transfromer相关论文:链接,也可以参考其论文:链接,这篇论文值得大家去分析。
在GPT出现之后,通用的预训练方式是预训练整个网络然后通过微调(fine-tune)去改进具体的任务。
原理:
如图所示,GPT就是图片中左部分的结构,也就是12个Transfromer中Encoder的结构。通过Encoder我们可以提前将大量的数据进行训练,提前获得数据的信息,在之后解决其他问题时,可以在以获得的信息的基础上开始(相当于在考试开始时老师已经划了重点,那么复习起来便容易的多)
GPT所能处理的是序列式任务,即输入是一个词语序列。然后GPT的输出是一个值。虽然很多任务的输入输出并不符合这个格式,但是可以通过微调来得到最后的输出,这也就是GPT为什么被称为预训练模型的原因
区别:
与 ELMo 不同 ,ELMo 以输入表示形式连接到其他模型图层 - 不需要为任务重新构建新的模型结构。相反,它直接将最后一个图层连接到 softmax 作为任务输出层,然后微调整个模型。
GPT2.0
gpt2.0并没有做出什么模型上的具体改动,而是提高了数据集的量,这样训练出来的语言模型优势很明显,比使用专有数据集来的通用性更强,更能理解语言和知识逻辑,可以用于任意领域的下游任务。
Bert
了解了前面的基础,相对来说Bert就很好学习了。
从创新的角度来看,bert其实并没有过多的结构方面的创新点,其和GPT一样均是采用的transformer的结构,相对于GPT来说,其是双向结构的,而GPT是单向的
原理:
Bert给出来两种训练方式:
- 主要采用了Masked Language Model的模型方法,训练前先Mask一些词,然后通过训练预测这些词,这样便可以从两个方向来预测词语,从而解决了GPT和ELMo的不足。
- 为了让模型捕捉两个句子的联系,这里增加了Next Sentence Prediction的预训练方法,即给出两个句子A和B,B有一半的可能性是A的下一句话,训练模型来预测B是不是A的下一句话
Xlnet
Xlnet的出现主要为了解决Bert在Mast上的不足,bert使用Mask的方法解决了Gpt中只能单向传播的问题,但同时带来了新的问题:被mask的词可能具有很高的含义,而mask后便使它没有了意义。
如图所示,Xlnet主要思想在于将预测3时,将1,2,3,4数字进行组合,这样预测3时便利用到了4.
Xlnet对于bert来说主要主要运用到了双向流attention和隐藏mask机制。(具体看论文),从而解决bert对于序列生成方面的不足。