王博士,我想问一下,fine-tuning的边界一般在哪里。要让gpt学习行业知识,用fine-tunning是否够
当语言模型训练结束后,就可以将其迁移到具体的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(y∣x1,…,xm)=softmax(hlmWy)
其中,WyW_{y}Wy为新引入的全连接层的参数矩阵。因此,可以得到在分类任务中的目标函数:
L2(C)=∑(x,y)logP(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(y∣x1,…,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该如何进行微改呢?针对这几种情况,作者提出了以下的修改方法:
具体的方法可以查看下图,可以发现,对这些任务的微改主要是新增线性层的参数以及起始符、结束符和分隔符三种特殊符号的向量参数。