基于GPT的隐变量表征解码结构
Posted 3A是个坏同志
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了基于GPT的隐变量表征解码结构相关的知识,希望对你有一定的参考价值。
有时候我们想要用GPT(的一部分)作为预训练的隐变量解码器,应该怎么办呢?最近看论文,总结了三种隐变量注入(code injection)的方式。
1. Cheng X , Xu W , Wang T , et al. Variational Semi-Supervised Aspect-Term Sentiment Analysis via Transformer[C]// Proceedings of the 23rd Conference on Computational Natural Language Learning (CoNLL). 2019.
这篇文章用的方法是将隐变量添加到每个输入token中。原文是将每个token表示为隐变量和原嵌入的和,然后使用reconstruction任务微调解码器。
2. Ziegler Z M , Melas-Kyriazi L , Gehrmann S , et al. Encoder-Agnostic Adaptation for Conditional Language Generation[J]. 2019.
这篇文章探索了使自然语言预训练语言模型适应任意条件输入的方法。作者观察到,预训练transformer模型对微调过程中的大参数变化非常敏感。因此提出了一种直接将任意条件(arbitrary conditioning)注入self-attention的适应方法,并称之为pseudo self-attention(伪自注意)。主要思路是在每层基础上注入隐变量。其与其它几种注入结构区别简图如下:
a训练了一个新的transformer解码器;b训练了一个新的context attention layer;伪自注意只修改了self-attention层的一部分(图中绿色表示只使用预训练权重初始化,灰色表示从头训练,红色向量表示每一层的target activation,蓝色向量表示编码器输出的源特征)
具体来讲,作者通过一个线性层将隐变量投影到,这样就可以将其拆分成L个向量。其中被送入第个自注意力block。如下图所示:
浅红色为隐变量的键和值
伪自注意可以通过以下方式将隐变量吸收到预训练的GPT2自注意力结构中,对于每个自注意层,有:
为了表示方便,这里的z指的是(行向量)。其中为原始的输入嵌入。和为具有被投影的隐变量和(来自z(即)填充的第一行?)的增广的键和值。表示按行连接。
3. Wang T , Wan X . T-CVAE: Transformer-Based Conditioned Variational Autoencoder for Story Completion[C]// Twenty-Eighth International Joint Conference on Artificial Intelligence (IJCAI-19). 2019.
该文章使用的方法在最后一层注入,文章的模型结构如下图:
在原始GPT2中,来自最后一个注意力层的嵌入向量通过线性头投影到pre-softmax logit向量(V是词表大小)。想在这个时候注入隐变量,需要学习一个新的共享线性头,以便将投影到。最终把送入softmax。原文中的具体过程为:
其中D为解码器输出,为参数矩阵,为合并z与解码器状态的组合层在时间步t上的输出。并进一步馈送到线性头和softmax获得概率分布。
扩展阅读:基于预训练语言模型的文本生成研究综述_zenRRan的博客-CSDN博客 第五节,使用预训练语言模型进行文本生成的常用微调策略_3A的奇奇怪怪圣地-CSDN博客
以上是关于基于GPT的隐变量表征解码结构的主要内容,如果未能解决你的问题,请参考以下文章