gpt预训练边界在哪里

王博士,我想问一下,fine-tuning的边界一般在哪里。要让gpt学习行业知识,用fine-tunning是否够

  • 这篇博客: GPT原理介绍中的 2.2 fine-tuning(有监督) 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
  • 当语言模型训练结束后,就可以将其迁移到具体的NLP任务中,假设将其迁移到一个文本分类任务中,记此时的数据集为C\mathcal{C}C,对于每一个样本,其输入为x1,…,xmx^{1}, \ldots, x^{m}x1,,xm,输出为yyy。对于每一个输入,经过预训练后的语言模型后,可以直接选取最后一层Transformer最后一个时间步的输出向量hlmh_{l}^{m}hlm,然后在其后面接一层全连接层,即可得到最后的预测标签概率:
    P(y∣x1,…,xm)=softmax⁡(hlmWy) P\left(y | x^{1}, \ldots, x^{m}\right)=\operatorname{softmax}\left(h_{l}^{m} W_{y}\right) P(yx1,,xm)=softmax(hlmWy)
    其中,WyW_{y}Wy为新引入的全连接层的参数矩阵。因此,可以得到在分类任务中的目标函数:
    L2(C)=∑(x,y)log⁡P(y∣x1,…,xm) L_{2}(\mathcal{C})=\sum_{(x, y)} \log P\left(y | x^{1}, \ldots, x^{m}\right) L2(C)=(x,y)logP(yx1,,xm)
    在具体的NLP任务中,作者在fine-tuning时也把语言模型的目标引入到目标函数中,作为辅助函数,作者发现这样操作可以提高模型的通用能力,并且加速模型收敛,其形式如下:
    L3(C)=L2(C)+λ∗L1(C) L_{3}(\mathcal{C})=L_{2}(\mathcal{C})+\lambda * L_{1}(\mathcal{C}) L3(C)=L2(C)+λL1(C) 其中,λ\lambdaλ一般取0.5。

    可以发现,在fine-tuning阶段,此时新增的参数只有最后一层全连接层的参数WyW_{y}Wy,这比ELMo算法要容易得多。

    不过,上面这个例子只是对于文本分类任务,如果是对于其他任务,比如文本蕴涵、问答、文本相似度等,那么GPT该如何进行微改呢?针对这几种情况,作者提出了以下的修改方法:

    • 文本蕴涵:对于文本蕴涵任务,作者用一个“$”符号将文本和假设进行拼接,并在拼接后的文本前后加入开始符“start”和结束符“end”,然后将拼接后的文本直接传入预训练的语言模型,在模型再接一层线性变换和softmax即可。
    • 文本相似度:对于文本相似度任务,由于相似度不需要考虑两个句子的顺序关系,因此,为了反映这一点,作者将两个句子分别与另一个句子进行拼接,中间用“$”进行隔开,并且前后还是加上起始和结束符,然后分别将拼接后的两个长句子传入Transformer,最后分别得到两个句子的向量表示hlmh_{l}^{m}hlm,将这两个向量进行元素相加,然后再接如线性层和softmax层。
    • 问答和常识推理:对于问答和常识推理任务,首先将背景信息与问题进行拼接,然后再将拼接后的文本依次与每个答案进行拼接,最后依次传入Transformer模型,最后接一层线性层得多每个输入的预测值。

    具体的方法可以查看下图,可以发现,对这些任务的微改主要是新增线性层的参数以及起始符、结束符和分隔符三种特殊符号的向量参数。
    在这里插入图片描述