SIATL模型
SiATL是一个标准的基于预训练模型,并把它的权重迁移到一个分类器并增加了一个任务特定层。
下面是它的一个图例:
ULMFiT & SiATL
ULMFiT (Universal Language Model Fine-tuning) 使用和ELMo类似的流程:
-
使用通用数据预训练LM,模型使用了3层的AWD-LSTM。
-
在特定任务数据上精调LM,其中使用到差异精调和倾斜三角lr两个策略。
-
以LM作为初始值,精调特定任务分类模型,其中使用到逐层解冻、差异精调和倾斜三角lr三个策略。经过AWD-LSTM之后,输出给分类器的向量为三个向量的拼接:
-
最后一层最后一个词对应的向量;
-
最后一层每个词向量做max pooling;
-
最后一层每个词向量做mean pooling。
论文中提出了几个优化策略,能够提升精调后模型的最终效果。
论文中的实验主要针对各种分类任务,相比于之前最好的结果,ULMFiT把分类错误率降低了18-24%。
论文中也设计了实验来说明流程中第二步(在特定任务数据上精调LM)的作用。结果表明第二步的加入,能够让第三步的分类任务在很少的数据量下获得好的结果。只要使用 1%~10%
的标注数据,就能达到不加第二步时的模型效果。
作者也设计了去除实验验证论文中提出的三个策略的效果:差异精调(discr)、倾斜三角lr(stlr)、逐层解冻(Freez)。结果表明相比于其他人提出的策略,这几个策略能获得更好的结果。而且,相比于不使用discr和stlr机制的精调策略(Full),ULMFiT模型更稳定,没出现灾难性遗忘。
之后的另一篇论文 An Embarrassingly Simple Approach for Transfer Learning from Pretrained Language Models 建议了一些新的策略,解决精调时的灾难性遗忘问题。模型称为 SiATL (Single-step Auxiliary loss Transfer Learning)。SiATL只包含两个步骤:无监督数据预训练LM、精调分类模型。但在精调分类模型时,SiATL把LM作为辅助目标加入到优化目标函数当中。SiATL的第二步相当于把ULMFiT的第二步和第三步一起做了。所以它们的流程其实是一样的。
预训练模型使用的是两层LSTM+Linear,而分类模型在预训练模型的上面增加了一层带self-attention的LSTM和输出层。SiATL建议的几个策略:
论文发现辅助LM目标对于小数据集更有用,可能是辅助LM减轻了小数据集上的过拟合问题。其中的系数 ,论文实验发现初始取值为 0.2
,然后指数下降到 0.1
效果最好。 的取值需要考虑到 和 的取值范围。这个结论和ULMFiT中验证第二步流程作用的实验结果相同,也侧面说明了它们本质上差不多。
另一个发现是如果预训练用的无监督数据和任务数据所在领域不同,序贯解冻带来的效果更明显。这也是合理的,领域不同说明灾难性遗忘问题会更严重,所以迁移知识时要更加慎重,迁移过程要更慢。序贯解冻主要就是用途就是减轻灾难性遗忘问题。
论文还发现,和ULMFiT相比,SiATL在大数据集上效果差不多,但在小数据集要好很多。
总结下 ULMFiT 和 SiATL:
-
ULMFiT使用序贯训练的方式组合特定任务LM和任务目标函数,而SiATL使用同时训练的方式,也即加入辅助LM目标函数。
-
它们建议的策略都是在解决灾难性遗忘问题,也都解决的不错。可以考虑组合使用这些策略。
-
它们在小数据集上都提升明显,只要使用 1%~10% 的标注数据,就能达到之前的效果。
-
虽然它们只在分类任务上验证了各自的效果,但这些策略应该可以推广到其他任务上。