GPT-1:与BERT对比简单看GPT-1

个人主页:https://bento.me/zhengyanghou

Github:https://github.com/Jenqyang

GPT-1发表于2018年6月,比BERT早几个月。GPT-1使用的是Transformer decoder(解码器),而BERT使用的是Transformer encoder(编码器)。

![Transformer 结构:左边为encoder,右边为decoder](https://upload-images.jianshu.io/upload_images/29245273-21d13a1aa753aa7d.png =60%x)

解码器和编码器最大的区别是解码器加入了掩码机制(Mask),这就导致在实际问题中,BERT是在做完型填空(没有Mask就意味着同时知道历史和未来的数据,要做的是根据历史和未来预测当前,这当然简单得多),而GPT-1是在续写作文(加入Mask就意味着只知道当前和历史数据,要做的是根据历史预测未来,这就比BERT要难)。

这也是为什么BERT前几年在NLP界的影响力也远高于GPT。

GPT-1的构造分为两个阶段:Unsupervised pre-training和Supervised fine-tuning。GPT-1在预训练阶段(pre-training)使用无标注的数据进行无监督训练,在微调(fine-tuning)阶段使用有标注的数据进行监督训练。

Unsupervised pre-training

预训练阶段器目标函数为:
L_1(U)=\sum_i logP(u_i|u_{i-k},\cdots,u_{i-1};\Theta)
其中\Theta就是GPT-1模型,通过u_i之前的数据计算得到u_i的概率。

Supervised fine-tuning

GPT-1的微调相当于一个分类任务,给定输入序列(x^1,\cdots,x^m)都有标签y(其实就是标号),将序列(x^1,\cdots,x^m)放入训练好的模型中的得到Transformer块最后一层的输出h^m_l,接着和一个输出层W_y相乘,最后经过一层softmax就得到目标y的预测概率:
P(y|x^1,\cdots,x^m) = softmax(h_l^m W_y)
得到目标函数:
L_2(C) = \sum_{(x,y)}logP(y|x1,\cdots,x^m)
但实际上微调的目标函数是:
L_3(C) = L_2(C) + \lambda\ast L_1(C)
这是因为同时预测序列的下一个词和预测序列的标签效果最好,因此也加入了无监督训练时的目标函数。

这点与BERT就不太一样了,BERT微调时只使用了下游任务的目标函数。

GPT-1的下游任务

上图展示了几类常见的下游任务都能够转换成序列-标签的形式。原理就是将所有序列进行拼接,对每个组合情况都进行标号。在不同下游任务中Transformer的模型保持不变。这样,不同的子任务都能转成相同的下游任务格式,GPT-1也能以这样的形式进行微调。

GPT-1使用spaCy分词器(tokenizer),在包含7000本未发表书籍的BooksCorpus数据集上进行预训练,最终得到SOTA效果。

个人主页:https://bento.me/zhengyanghou

Github:https://github.com/Jenqyang

本文由mdnice多平台发布

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容