深度语言模型-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时的不同
image.png
在接specific-task进行fun-tuning时,其损失为两个损失的和。如下图所示:
其中 L2(C) 为fun-tuing的具体有标注的任务的损失。
L1(C) 为预训练任务的损失。具体表现在fun-tuing时将GPT最后一层Encoder输出按照预训练当时的方式计算损失。
特点
- Pre-Training的方式
- 单向Transformer模型
- Fine-Tuning与不同输入数据结构的变化, 因具体任务不同,fun-tuning结构不同,比如问答、相似度计算、分类、推理等,不同的任务不同的fun-tuning的输出层设计
算法流程
预训练
输入
一句话中每个词的Embeding向量
其中We为字典单词的Embedding向量,Wp为位置编码矩阵,U可视为独热矩阵。
中间计算过程
就是一个单项Transformer,最后一层的输出为 hl
损失计算
根据最后一层输出,接一个矩阵W,因生成1维,然后算softmax,得到每个词概率,概率最大化。得到损失L1(C) 。 此处注P(u)计算时,使用了字典单词的Embedding向量We,这也是语言模型中常用的技巧。
给出Text1SEPText2,正常走transformer 仅保留masked self attention的decoder, 这样最后一层每个位置就能输出一个概率; 然后分别和对应的下一个词算损失。
Fun-tuning
运用少量的带标签数据对模型参数进行微调。
输入
将上一步中最后一个词的输出hl,作为下游监督学习的输入。
损失计算
按照有监督的标签,进行损失计算得到L2(C) 。
image.png将 L2(C)和 L2(C)求和,即为做后的损失,如下图所示:
优点
- 有效的利用无监督数据对模型进行充分的训练,模型有很强的文本理解和分析能力,
- 迁移学习,在第二阶段目标任务上添加简单的输出层,就能达到很高的准确度。
缺点
单向Transformer,不能利用当前词后面词的语义。但是好像翻译场景不能利用,就是不知道后面词是什么?真的这样吗??