深度语言模型-GPT

简介

OpenAI在2018提出了GPT(Generative Pre-Training)模型,模型采用了Pre-training + Fine-tuning的训练模式,可用于分类、推理、问答、相似度等任务。


image.png

不同点

GPT就是是在transformer的基础上提出的,但是又稍有不同:

  • 预训练时的不同
    不同点1: 只用Transformer的Encoder进行训练。
    不同点2: 将Transformer中Encoder的Self-Attention, 改为Masked-Attention。 什么意思呢?
    即不同于Self-Attention,一句话中的各种词之间相互attention。 而这里是 单向的Transformer,即句子中的每个词,都只能对包括自己在内的前面所有词进行Attention,后面的词被MASK调

    为什么使用单向Transformer?

    因为使用了Masked Self-Attention,则每个位置的词都不会“看见”后面的词,也就是预测的时候是看不见“答案”的,保证了模型的合理性,这也是为什么OpenAI采用了单向Transformer的原因。

  • fun-tuning时的不同
    在接specific-task进行fun-tuning时,其损失为两个损失的和。如下图所示:

    image.png

    其中 L2(C) 为fun-tuing的具体有标注的任务的损失。
    L1(C) 为预训练任务的损失。具体表现在fun-tuing时将GPT最后一层Encoder输出按照预训练当时的方式计算损失。

特点

  • Pre-Training的方式
  • 单向Transformer模型
  • Fine-Tuning与不同输入数据结构的变化, 因具体任务不同,fun-tuning结构不同,比如问答、相似度计算、分类、推理等,不同的任务不同的fun-tuning的输出层设计

算法流程

预训练

输入

一句话中每个词的Embeding向量

image.png

其中We为字典单词的Embedding向量,Wp为位置编码矩阵,U可视为独热矩阵。

中间计算过程

就是一个单项Transformer,最后一层的输出为 hl

image.png

损失计算

根据最后一层输出,接一个矩阵W,因生成1维,然后算softmax,得到每个词概率,概率最大化。得到损失L1(C) 。 此处注P(u)计算时,使用了字典单词的Embedding向量We,这也是语言模型中常用的技巧。

image.png

给出Text1SEPText2,正常走transformer 仅保留masked self attention的decoder, 这样最后一层每个位置就能输出一个概率; 然后分别和对应的下一个词算损失。

Fun-tuning

运用少量的带标签数据对模型参数进行微调。

输入

将上一步中最后一个词的输出hl,作为下游监督学习的输入。

损失计算

按照有监督的标签,进行损失计算得到L2(C) 。

image.png

将 L2(C)和 L2(C)求和,即为做后的损失,如下图所示:

image.png

优点

  • 有效的利用无监督数据对模型进行充分的训练,模型有很强的文本理解和分析能力,
  • 迁移学习,在第二阶段目标任务上添加简单的输出层,就能达到很高的准确度。

缺点

单向Transformer,不能利用当前词后面词的语义。但是好像翻译场景不能利用,就是不知道后面词是什么?真的这样吗??

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容