本文主要用于记录发表于2018年的一篇论文。该论文首次提出了将迁移学习应用在NLP领域。本笔记主要为方便初学者快速入门,以及自我回顾。
论文链接:https://arxiv.org/pdf/1801.06146.pdf
开源地址:http://nlp.fast.ai/ulmfit
基本目录如下:
- 摘要
- 核心思想
- 总结
------------------第一菇 - 摘要------------------
1.1 论文摘要
迁移学习的成功已经在计算机视觉领域取得了巨大的成功,但是在NLP领域还是不能够很好的运用。本文作者提出了一种针对NLP领域的迁移学习方法,ULMFiT,主要是介绍了很多在微调模型时候的小技巧。作者的这种方法在六大文本分类任务上都取得了成功,并且在大部分数据集上将误差减少了18-24%。此外,还有一个比较夸张的点,仅仅用了100个标注数据,就取得了等同于用100倍数据量训练出来的结果。
------------------第二菇 - 核心思想------------------
2.1 论文背景介绍
其实论文本身没有提出什么特别的模型结构,主要的重点就是放在介绍其实践迁移学习的方法。在开篇介绍部分作者也解释说了,现阶段的NLP的深度学习模型在有大量数据训练的基础上,确是能取得不错的效果,但是大数据集常常很难获取,而现阶段在NLP领域做的比较好的,也就是word embeddings那一层可以实现。然后作者也解释了一下原因,他们认为其实不能做迁移学习本身并不是语言模型(LM)不够强大,而是我们在做预训练的时候,或者在迁移本身的训练上有很多的小技巧我们没有很好的掌握,所以,作者才会提出一种全新的模式ULMFiT(Universal Language Model Fine-tuning),来实践NLP领域的迁移学习方法。
2.2 论文模型实践方法
作者提出的实践方法,第一个词就是“universal”,显示了其通用性,作者对其的理解有如下几个层面:
1)适用于任意的文本大小,数据类型,标签类型
2)单一的模型架构和训练过程
3)不需要额外的特征过程与预训练
4)不需要额外领域专一的文本和标签
看这描述是,如果能做到,那绝对是NLP领域的里程碑!接下来,我们仔细看一下,作者实践的步骤。
第一步 - 通用领域语言模型的预训练
类似ImageNet在CV的地位一样,NLP领域应该也需要这样的通用数据集,作者目前是用Wikitext-103来做预训练的,这一步其实是最耗费时间的(贵),但是只需要做一次,就会为后续的下游NLP模型打好基础。
第二步 - 目标任务的语言模型微调
目标任务的数据分布肯定是与我们的预训练数据分布不一样的,因此,我们需要用目标任务的数据来对我们的语言模型进行微调训练。因为有提前的预训练,因此这一步的微调需要一点小技巧,作者提出了2种设置学习率的小技巧,
1)分层学习率微调(Discriminative fine-tuning)
核心思想就是在微调的时候,作者认为对所有的层都设置相同的学习率是不合理的,因为每一层都在学习词汇不同层面的表达特征,因此在新的数据集上,每一层需要学习的程度也是不一样的。因此作者提出的解决办法就是为每一层都设置不同的学习率,因此反向传播的公式就可以表达为,
其中,就是每一层的学习率。作者实验发现,当最后的一层的学习率设置为的时候,,时候效果最好。
2)斜三角学习率(Slanted triangular learning rates)
作者同时还认为,在对任务语料微调训练的时候,模型应该在一开始就快速收敛,然后再慢慢精修。因此,作者提出了一种新的学习率设置机制,在一开始训练的时候增加学习率,然后在线性衰减学习率,公式如下,
其中,就是训练的迭代次数,就是学习率上升的迭代次数比率,就是学习率开始衰减时候的迭代次数,就是学习率的衰减比例(最小/最大),就是某次迭代的学习率。然后作者实验发现,短时间的增加学习率,长时间的衰减,模型的拟合能力是最棒的~
第三步 - 目标任务的分类模型微调
我们最终还是要来微调最后产生结果的分类模型。首先作者为了增强语言模型的表达能力,额外多加了两个线性组合层。因此,最终输出到分类器层,不仅仅来自语言模型的最后一层输出,还包括了最大池化层,平均池化层,
在最终微调分类器的时候,作者又提出了一种新的训练技巧,逐层解冻(Gradual unfreezing)。简单来说,就是作者任务最后一层会包括最通用的特征,因此,在训练时候,我们先训练最后一层(冻住其他层),而不是所有层一起来训练。然后在第二个EPOCH的时候,再解冻倒数第二层来训练,然后以此类推。
至此,整个流程已经介绍完了,贴一张原论文的图来帮大家梳理逻辑。
随后在论文的实验部分,作者也通过实验设定来证实自己提出的几种微调模型的有效性。这里就不具体展开,有兴趣的朋友可以自己去查阅原始论文。
2.3 论文模型实践
这里先留个坑,以后有时间,把ULMFiT的调参实践也摆上来。
------------------第三菇 - 总结------------------
3.1 总结
到这里,整篇论文的核心思想及其创新点已经说清楚了。本论文主要集中在于阐述ULMFiT运用于NLP迁移学习的步骤及其预训练和调参的思想,并且用具体的NLP实验证明了使用这一套架构的原理,并证实了其可行性。
简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下ULMFiT流程和调参技巧。总的来说,这篇论文提出的很多小技巧值得大家学习。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁