资料来源:OpenAI
(文章内容整理自网络)
人们在计算机视觉( CV )领域中使用迁移学习(Transfer Learning)已经有相当长的时间了,并且在这几年中也产生了显著的效果。在一些任务中的准确性,甚至能够超过人类水平。如今,Deep learning中广泛使用预处理权重来提升模型的效果。事实上,当我们真正想到使用pre-trained的方法时,我们第一反应想到的是,我们正在使用迁移学习来对权重进行某种初始化或fine-tuning。迁移学习在计算机视觉领域产生了巨大的影响,并对这一领域的进步做出了巨大的贡献。
到目前为止,迁移学习在某种程度上还是局限于计算机视觉,但是最近的研究工作表明,Transfer Learning的方法几乎可以扩展到任何地方,包括自然语言处理( NLP )、强化学习( RL )。最近,有几篇论文已经发表,表明在NLP中迁移学习和fine-tuning的工作也获得了巨大的成功。
最近,OpenAI还举办了一场很有意思的retro context,参与者被要求创建不依赖于环境,智能使用迁移学习来训练agent来play game,如下图所示。那么今天,我们就深入探索迁移学习潜在潜力。
资料来源: OpenAI复古大赛
图1. 利用过去的经验学习新事物( RL环境中的新环境)
以前的研究涉及计算机视觉中的增量学习(incremental learning),将泛化(generalization)引入模型中,因为这是使神经网络的学习过程变得更加鲁棒的重要过程之一。同样,NLP领域,论文《 Universal Language Model Fine-tuning for Text Classification》也深入探讨了这个问题。
文本分类是NLP中的一个重要任务,涉及现实生活中的很多场景,如机器人、私人助理、反欺诈或垃圾邮件检测、文档分类等。它可以扩展到几乎任何任务,因为我们几乎所有地方都需要处理语言模型。论文中作者一直致力于研究文本分类,到目前为止,许多NLP的研究仍然依赖于word2vec和GloVe这样的模型来训练embedding。
Embedding的局限性
Word embedding是word一种连续稠密的表示。embedding是实际值构成tensor,这些tensor被输入到模型中,通过训练得到的。在这个模型中需要维护一个特定的序列(有状态的,stateful),这样这个模型就可以学习word和上下文之间的句法和语义关系。
图2 不同类型数据的可视化
通过可视化,语义更接近的词之间的embedding会更相似,空间上离得更近,使得每个词都有不同的向量表示。
词表中很少出现的word
在处理数据集时,我们通常会遇到词表中不存在(UNK)的word,因为词表的大小是有限制的。
图3 Tokenization 这些word存在于词表中,是常见的word,但是像< unk >这样的out-of-vocabulary(OOV)的token,embedding无法有效处理。
对于任何只出现几次的word,模型将很难计算出特定word的语义,所以创建了一个词表来解决这个问题。word 2vec无法正确处理UNK的词。当一个词未知时,就不能得到它的向量,所以它只能随机初始化。所以,Embedding通常也面临已下一些问题:
1、无法处理共享表示(Shared Representation)
Embedding来表示word的语义信息时存在的一个问题是subword之间没有共享的表示,通常是统一的含义。英语中的所有前缀(Prefixes)和后缀(Suffixes)通常都具有一个共同的含义(比如“better”和“faster”中的- er)。因为每个向量都是独立的,所以word之间的语义关系无法完全被获取。
2、同现统计(Co-occurrence statistics)
分布式词向量模型会捕捉语言中词与词之间某些方面的共现统计(Co-occurrence statistics)。在word共现统计信息来训练的embedding可以捕捉word之间的语义相似性,因此可以基于word相似度任务来对训练得到的embedding进行评估。但如果一个语言模型采用char-based input,这种pretraining带来的好处就不存在了,只能随机初始化embedding。
3、无法支持新语言
基于某个语言训练的embedding,无法用于处理新的语言。因为embedding之间不存在参数共享,对于新的语言,需要训练新的embedding,所以模型不能处理跨语言的任务(cross-lingual task)。
embedding可以concatenated(拼接)起来,但是这个模型的训练仍然必须从头开始;预处理embedding可以被视为固定的参数。这种模型在增量学习中没有用。
计算视觉中已经表明,与其他流行的训练方法相比,hypercolumns其实没有用。在CV中,pixel的hypercolumns是该像素上方所有ConvNet单元的激活矢量(vectors of activation)。
图4 ConvNets中的Hypercolumns
平均随机梯度法( ASGD )权重下降的长期短期记忆网络( AWD - LSTM )
该研究工作主要是受论文《Regularizing and Optimizing LSTM Language Models》的启发。它利用了权重下降的LSTM(weighted-dropped LSTM),该LSTM在隐含层之间采用DropConnect作为一种递归正则(recurrent regularization)。DropConnect是Hinton提出的Dropout的一种拓展,用于正则化全连接的神经网络。
当使用Dropout训练时,每层神经网络中会随机选择的一个subset的activation设置为零。DropConnect则是从网络中随机选择的权重子集(subset of wright)设置为零。因此,每个单元接收来自上一层单元的随机子集的输出作为其输入。
Dropout网络
DropConnect网络
图5. Dropout和DropConnect之间的差异
通过在LSTM的隐藏到隐藏的连接矩阵之间使用—即[ Ui、Uf、Uo、Uc]使用DropConnect,可以防止LSTM中recurrent connections导致的过拟合问题。这种正则化技术也可以帮助其他递归神经网络防止因权重的递归加权而导致的过拟合问题。
常用的一组值:
dropouts= np.array ( [ 0.4,0.5,0.05,0.3,0.1 )×0.5
0.5 multiplier(乘子)是一个超参数,尽管矩阵内部的比例很平衡,但可能也需要0.5倍的调整。
随着相同的权重在多个time-step内被重复使用,相同的单个dropped weights在整个向前计算和向后传播过程中保持下降。结果类似于variational dropout,variational dropout将相同的dropout mask应用于LSTM内的重复连接,只会对重复权重使用dropout。DropConnect也可以用在LSTM [ Wi,Wf,Wo ]的非循环权重上。
通用语言模型
一个具有tuned dropout parameter的三层LSTM ( AWD - LSTM )结构,往往优于使用其他训练方法训练出来的文本分类模型。原始的模型基于wiki - text 103数据集进行pre-trained,我们将处理的数据集是IMDb电影评论,因此在进行微调时,主要使用了三种技术来防止over-catastrophic forgetting。
倾斜三角形学习率(Slanted Triangular Learning Rate,STLR)
以前训练模型,我常用带有权重衰减的Adam优化算法。但是自适应优化算法往往具有有局限性。如果模型陷入鞍点,并且产生的梯度很小,使用自使用优化算法往往很难产生足够的梯度来走出非凸区域。
Leslie Smith在论文《Cyclical Learning Rates for Training Neural Networks》提出的周期性学习率(Cyclical learning rate,CLR)解决了这个问题。在使用了循环学习率( CLR )后,我的模型的准确率( CMC )提升了10 %。更多信息,请参见本文:训练神经网络的循环学习率。
学习率决定了当前权重可以获得多少梯度,向loss方向移动多少步长。这种方法类似于带有热重启的随机梯度(stochastic gradient with warm restarts)。Stochastic Gradient Descent with Restarts( SGDR )被用作annealing schedule。
图6. 循环学习率
简而言之,选择初始学习速率和学习速率调度器其实很困难,因为并不总是明确指导哪种方式会更好。
每个参数都有自适应学习速率。像Adam、Adagrad和RMSprop这样的优化器对每个被训练参数的学习速率都可以自动调节。
论文《Cyclical Learning Rates for Training Neural Networks》以优雅、简化的方式解决了许多常见的问题。
循环学习率( CLR )为学习率的值设置了上限和下限。它可以与自适应学习方法相结合,但类似于SGDR,计算成本也较低。
如果陷入鞍点,较高的学习速率可以将模型推出鞍点,但是如果它非常的小(在后期阶段我们将需要降低学习速率),那么传统的学习速率调度方法将永远不会产生足够的梯度,如果它陷入复杂的鞍点(非凸)。
图7. 非凸函数
周期性的较高学习速率将在surfacesh上有更平滑和更快的traversal。
最佳学习率( LR )介于最大和最小界限之间。
图8. 循环学习率产生的边界
以这种方式改变LR可确保此问题在需要时得到解决。
因此,对于迁移学习,任务是在给定由固定任务A训练的模型的情况下,提高任务B的性能。语言模型具有CV中的分类模型在NLP环境下所具有的所有能力:它了解语言,理解层次关系,可以控制long-trem的依赖关系,并且可以进行情感分析。
用于文本分类的通用语言模型的微调( ULMfit )分为三个阶段,就像CV一样。
图9. ULMFit的三个阶段
在第一阶段,LM 预训练( a ),语言模型是在一个普通数据集上训练的,主要从这个数据集上学习什么是语言的一般特征,并收集word之间语义关系的知识。像ImageNet一样,这个模型使用wikitext 103 ( 103M token)数据集训练。
在第二阶段,LM微调( b ),需要对主干(基础模型)进行微调,使用discriminative fine-tuning和倾斜三角形学习速率( STLRs )来使模型学习特定任务相关(task-specific)的特征。
在第三阶段,分类器微调( c ),使用gradual unfreezing和STLR对分类器进行修改以微调target task,从而保留初级表示(low-level representation)并适应高级表示。
简而言之,ULMfit可以被认为是一个主干和一个在顶部(头部)添加的分类器。它利用了一个在一般领域语料库上训练过的预处理模型。(通常,研究人员处理的数据集必须进行审查,以免有许多领域空白(domain gap))稍后可以使用所提到的技术对目标任务进行微调,以使文本分类达到最新性能。
ULMfit正在解决的问题
这个方法可以称为通用方法,因为它不限定于某个特定的数据集,可以跨越不同长度的文档和数据集而正常工作。它使用单一的体系结构(在本例中是AWD-LSTM,就像CV中的ResNets一样)。任何定制功能都不能被设计成与其他任务兼容。它不需要任何额外的文档就能应用于某些领域。
这个模型可以通过使用attention和添加必要的skip connections来进一步改进。
Discriminative fine-tuning
每层神经网络会捕捉不同的信息。在CV中,initial layer捕捉broad、distinctive、wide的特征。随着深度的增加,他们试会图捕捉特定于某些任务的复杂特征。使用相同的原理,这种方法建议以不同的方式微调这种语言模型的不同层。要做到这一点,每一层都必须使用不同的学习率。这样我们就可以决定如何更新每一层中的参数。
参数θ被分成一个列表,以下表示第l层的参数
当然,同样的操作也可以用学习率来完成。
然后,随机梯度下降可以通过discriminative fine-tuning来实现:
基于特定任务的分类器微调
添加了另外两个线性block。每个block使用batch normalization和较小的dropout。(BN可以起到正则化效果) 在block之间使用 ReLU )作为激活函数,然后把(似然)logits传递给softmax,转换成输出目标分类上的概率分布。这些分类器层不会受pre-training的影响,因为他们是从零开始训练的。在block层之前和最后一层隐含层之后连接了一个pooling层,并被反馈到第一个线性层。
Snippet:使用Pytorch实现的FastAI API (分类器训练)
Concat pooling
要经常注意递归模型的状态,keep有用的状态,释放那些无用的状态,因为memory中只有有限的状态可以用更新门进行更新。但是从LSTM模型生成的最后一个隐藏状态包含了大量信息,这些权重必须从隐藏状态中保存下来。为了做到这一点,我们将最后一个time-step的隐状态与之前多个time-step的隐状态的最大和平均的pooled representation连接起来,只要它可以方便地放在GPU内存中。
训练分类器(gradual unfreezing)
Fine-tuning分类器会导致过度记忆(Overcatastrophic forgetting)。微调分类器会慢慢它导致过拟合和收敛。建议不要一次微调所有的层,而是一次只微调一个层(freezing其他层)。因为最后一层拥有general的领域知识。最后一层随后unfrozen,然后我们可以在一次iteration中微调先前frozen的层。下一个被frozen的层被unfrozen,重复这个过程,直到所有的层都被微调并直到收敛。
文本分类的时间反向传播( BPTT )
Backpropagation through time ( BPTT )常用于RNN,处理序列数据。BPTT通过展开所有时间步(unrolling all time steps)来工作。每个时间步骤包含一个输入、one copy of the network和一个输出。网络产生的误差会在每个时间步计算和累积。网络被rolled back,权重通过梯度下降来更新。
图10. 时间反向传播(BPTT)
这个模型是用前一batch数据的final state来初始化的。max和mean pooling层的的隐状态也被tracked。最重要的是,反向传播法使用的是可变长度序列。以下是PyTorch 中使用的Sampler部分的代码:
因此Sampler返回一个迭代器(一个可以迭代的简单对象)。它以大约相同大小的随机排序Batch遍历数据。在第一次调用中,使用最大可能的序列,允许合适的内存分配顺序。
所涉及的技术
这个项目主要依赖英特尔的AI DevCloud来执行tokenization。spaCy 被用于这项任务(具有超线程、fast.ai support),因为它计算开销很大。以增量方式进行大量的训练,主要部分使用Intel Xeon可扩展处理器集群完成,其余部分使用NVIDIA GeForce * GTX 1080图形处理单元完成。
结果
在自然语言处理研究中,基于embedding或某种形式的迁移学习的方法比任何其他方法都更有效。在用新方法逐渐unfreezing和训练分类器后(如前所述),只需要4个epochs就可以快速达到94.4的准确度,超过了目前的其他技术水平。
表1. 使用ULMFit的文本分类的loss和准确率
图11. validation error rate
往期精品内容推荐
合成注意力推理神经网络-Christopher Manning-ICLR2018
2018/2019/校招/春招/秋招/自然语言处理/深度学习/机器学习知识要点及面试笔记
麻省理工学院-2018年最新深度学习算法及其应用入门课程资源分享
DeepLearning_NLP
深度学习与NLP
商务合作请联系微信号:lqfarmerlq
觉得还不错,记得点击下方小广告哦!!