GPT

作者: jerrychenly | 来源:发表于2019-10-08 17:25 被阅读0次

    GPT(Generative Pre-Training)出自2018年论文《Improving Language Understanding by Generative Pre-Training》。在原论文中提出了半监督学习方法,即结合了无监督的预训练和有监督的fine-tuning。第一阶段在未标记数据集上训练语言模型来学习神经网络的初始参数;第二阶段使用响应任务中的标记数据将参数微调以适应当前任务。

    下面我们先来看看GPT的语言模型的无监督预训练,其结构长这样:

    1.png

    上面我们提到,GPT在语言模型这块采用的是无监督预训练。具体的,对于无标签文本U = \{u_1, ..., u_n\},极大化下面似然函数:
    L_{1}(\mathcal{U})=\sum_{i} \log P\left(u_{i} | u_{i-k}, \ldots, u_{i-1} ; \Theta\right)
    其中k是上下文窗口的大小。

    语言模型中使用多层Transformer decoder,输入为词嵌入以及单词的位置信息,再对transformer_block的输出向量做softmax,output为词的概念分布:
    \begin{aligned} h_{0} &=U W_{e}+W_{p} \\ h_{l} &=\text { transformer }_{-} \text {block }\left(h_{l-1}\right) \forall i \in[1, n] \\ P(u) &=\operatorname{softmax}\left(h_{n} W_{e}^{T}\right) \end{aligned}
    其中U=\left(u_{-k}, \dots, u_{-1}\right)是单词的上下文向量(这里只有上文),W_e是词嵌入向量,W_p是位置编码向量。

    说完无监督预训练,我们接着说说有监督fine-tuning

    假设一个有标签的数据集,每一条数据为一个单词序列x_1,...,x_m,及相应的标签y,通过前面预训练的模型得到输出h_l^m,再经过线性输出层来预测标签yP\left(y | x^{1}, \ldots, x^{m}\right)=\operatorname{softmax}\left(h_{l}^{m} W_{y}\right)

    损失函数:L_{2}(\mathcal{C})=\sum_{(x, y)} \log P\left(y | x^{1}, \ldots, x^{m}\right)

    最后将前面两阶段的目标函数通过超参数\lambda相加训练整个模型:L_{3}(\mathcal{C})=L_{2}(\mathcal{C})+\lambda * L_{1}(\mathcal{C})

    关于如何改造下游NLP任务,原论文给了一张图:

    2.png
    • 分类:基本不用怎么变,加上一个起始符和终止符即可;

    • 句子关系判断:两个句子中间再加个分隔符即可;

    • 文本相似性判断:把两个句子顺序颠倒下做出两个输入即可,这是为了告诉模型句子顺序不重要;

    • 多项选择:做多路输入,每一路把文章和答案选项拼接作为输入即可。

    GPT的效果:

    3.png 4.png

    GPT整体效果还是不错的,在12个任务里,9个达到了最好的效果。

    前面我们介绍过ELMo,现在来看GPT其实和前者很类似。主要的不同点是:

    • 特征提取器:ELMo用的是LSTM;GPT用的是Transformer,目前时间节点最厉害的特征提取器 (有点健忘的童鞋可以看看上一篇关于Transformer的介绍);

    • 语言模型:ELMo采用双向语言模型,利用单词的上下文来预测;GPT采用单向语言模型,只用单词上文部分做预测,抛弃了下文部分。

      现在看来(参考Bert),GPT这个单向语言模型是个糟糕的选择,丢掉了很多信息。单向语言模型限制了GPT在很多任务场景的效果。比如阅读理解,需要同时根据上文和下文来做决策。

    相关文章

      网友评论

          本文标题:GPT

          本文链接:https://www.haomeiwen.com/subject/dmkkuctx.html