【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)

本文主要用于记录发表于2018年的一篇论文。该论文首次提出了将迁移学习应用在NLP领域。本笔记主要为方便初学者快速入门,以及自我回顾。

论文链接:https://arxiv.org/pdf/1801.06146.pdf
开源地址:http://nlp.fast.ai/ulmfit

基本目录如下:

  1. 摘要
  2. 核心思想
  3. 总结

——————第一菇 – 摘要——————

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)
核心思想就是在微调的时候,作者认为对所有的层都设置相同的学习率是不合理的,因为每一层都在学习词汇不同层面的表达特征,因此在新的数据集上,每一层需要学习的程度也是不一样的。因此作者提出的解决办法就是为每一层都设置不同的学习率,因此反向传播的公式就可以表达为,

《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》

其中,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是每一层的学习率。作者实验发现,当最后的一层的学习率设置为《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》的时候,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》,时候效果最好。

2)斜三角学习率(Slanted triangular learning rates)
作者同时还认为,在对任务语料微调训练的时候,模型应该在一开始就快速收敛,然后再慢慢精修。因此,作者提出了一种新的学习率设置机制,在一开始训练的时候增加学习率,然后在线性衰减学习率,公式如下,

《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》 STLR.png

其中,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是训练的迭代次数,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是学习率上升的迭代次数比率,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是学习率开始衰减时候的迭代次数,《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是学习率的衰减比例(最小/最大),《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》就是某次迭代的学习率。然后作者实验发现,短时间的增加学习率,长时间的衰减,模型的拟合能力是最棒的~

第三步 – 目标任务的分类模型微调
我们最终还是要来微调最后产生结果的分类模型。首先作者为了增强语言模型的表达能力,额外多加了两个线性组合层。因此,最终输出到分类器层,不仅仅来自语言模型的最后一层输出,还包括了最大池化层,平均池化层,

《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》

在最终微调分类器的时候,作者又提出了一种新的训练技巧,逐层解冻(Gradual unfreezing)。简单来说,就是作者任务最后一层会包括最通用的特征,因此,在训练时候,我们先训练最后一层(冻住其他层),而不是所有层一起来训练。然后在第二个EPOCH的时候,再解冻倒数第二层来训练,然后以此类推。

至此,整个流程已经介绍完了,贴一张原论文的图来帮大家梳理逻辑。

《【论文笔记】Universal Language Model Fine-tuning for Text Classification(ULMFiT 理解)》 三阶段.png

随后在论文的实验部分,作者也通过实验设定来证实自己提出的几种微调模型的有效性。这里就不具体展开,有兴趣的朋友可以自己去查阅原始论文。

2.3 论文模型实践

这里先留个坑,以后有时间,把ULMFiT的调参实践也摆上来。

——————第三菇 – 总结——————

3.1 总结

到这里,整篇论文的核心思想及其创新点已经说清楚了。本论文主要集中在于阐述ULMFiT运用于NLP迁移学习的步骤及其预训练和调参的思想,并且用具体的NLP实验证明了使用这一套架构的原理,并证实了其可行性。

简单总结一下本文就是先罗列了一下该论文的摘要,再具体介绍了一下ULMFiT流程和调参技巧。总的来说,这篇论文提出的很多小技巧值得大家学习。希望大家读完本文后能进一步加深对该论文的理解。有说的不对的地方也请大家指出,多多交流,大家一起进步~😁

    原文作者:蘑菇轰炸机
    原文地址: https://www.jianshu.com/p/7b597742c39c#comments
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞