每周论文22

本周论文:

  1. Boosting Neural Machine Translation
  2. Curriculum Learning by Transfer Learning: Theory and Experiments with Deep Networks
  3. On The Power of Curriculum Learning in Training Deep Networks
  4. XLNet: Generalized Autoregressive Pretraining for Language Understanding
  5. An Empirical Exploration of Curriculum Learning for Neural Machine Translation

[Boosting Neural Machine Translation]

通过将机器学习中的boosting引入NMT,对翻译效果有一定提升。同时还提出了另外几种方法,对输入数据pipeline进行了修改,发现都有一定的提升。本文的中心思想就是focus on difficult examples,作者认为更多关注于difficult example,能够对模型有提升的作用。

几种policy

original:就是将所有的数据都过一遍
boost:将最难的10%重复一遍
reduce:将最简单的20%去掉。具体操作是,每个epoch重新衡量一次,每三个epoch作为一个训练,也即三个epoch内部分别使用100% 80% 64%的数据
bootstrap:每个epoch都re-sample一遍,也即允许重复以及部分句子消失。

难度是通过perplexity来衡量的,因为每个epoch在训练时就已经计算过perplexity了,因此没有引入额外的计算复杂度。

实验结果

论文的实验采用的是双向LSTM作为翻译的模块。

几个实验结论:
boosting能够加速拟合,并且结果更好;
reduce用更少的数据,达到最好的效果。这点令人印象深刻
boostrap,稍微好一些,且训练更稳定。

为什么要focus on difficult example?

We emulate a human spending additional energy on learning complex concepts
To force the system to pay much attention on them can adjust it towards “mastering” more information for these sentences.

几个想法

这篇文章是一篇短文,很明显很多实验没做,估计是到deadline了就提交了,比如分析不同比例的结果,以及一些消融实验也没做。

为什么boostrap能够有提升并且有更稳定的训练?这种resample的方式能够带来一定的uncertainty,可能会有一定的帮助,虽然帮助不大,论文里面也仅仅提到了uncertainty,显然应该做进一步的分析。

这篇论文提供的insight我认为还是有一定启发的,首先这并不是curriculum-learning,也即没有从简单到难,而是正常的训练,只不过通过增加更多的difficult example,同时去掉了部分太简单的sample,说明仅仅是修改数据分布而不是修改数据的输入顺序(本质上也是修改数据分布),也能够带来提升效果;第二,通过减少简单数据,是否意味着,每个模型都有一个下限(特别是对于神经网络这种能力很强的模型),低过这个下限的数据对模型的训练是没有帮助的,反而可能会使模型overfit到某个简单的pattern(这和learning to execute的结论似乎有些类似);同时,增加更多的difficult sample,使得模型的上限被提高了;以及,是否可以将curriculum learning与该思路结合起来,达到更好的结果,一方面由易到难,另一方面修改数据分布,使得模型更多关注难的数据。


[Curriculum Learning by Transfer Learning: Theory and Experiments with Deep Networks]

ICML18的文章,极其硬核,根本看不懂理论的部分。

先贴出ICML oral的三张PPT:

从理论上证明了:

①the rate of convergence of an ideal curriculum learning method is monotonically increasing with the difficulty of the examples

②convergence is faster when using points which incur higher loss with respect to the current hypothesis.
当difficulty score是固定的,对于current hypothesis而言,高的loss能够比低的loss拟合速度更快。该结论非常直观。也就是说,难的example更有益是针对当前而言(current hypothesis)而简单的example更有益是针对final hypothesis而言的。

③使用pretrain好的模型来作为difficulty的估计,a significant boost in convergence speed at the beginning of training

④使用curriculum learning能够显著加速拟合;当任务难度(这和模型本身的容量也有关,模型越弱相对的任务难度也就越大,同时也和regularization相关,越强代表模型的自由度越弱)越大时,使用CL的效果就越明显。

几个结果:

思考:
文中的结论还是可以参考参考的,但theoretical的结论毕竟是在凸函数上得到的,似乎说服力不大。文中的思路是从理论上证明凸函数的结论;然后通过实验在非凸函数上从实践证明相似结论。其主要的贡献在于一些CL相关的结论和引入transfer learning作为difficulty score。


[On The Power of Curriculum Learning in Training Deep Networks]

ICML19一篇很硬核的文章,说实话里面的证明以及部分实验设计我还是没怎么搞懂。但是一些结论值得注意。这属于有启发的一类论文。

通过transfer-learning和self-taught的方法获得新的curriculum-learning算法,同时通过理论证明获得了一些有启发性的结论。

curriculum learning有两个挑战: 如何定义数据的难度;以及数据喂给模型的速度,太快会让模型更confused,太慢导致学习太慢

本文对这两个挑战都有一定的解决方案:分别定义了scoring function 和 pacing function

scoring function有两种:transfer learning和self-tutoring,一个就是pretrained model,另一个是使用训练好的未采用curriculum learning的模型。

pacing function:①Fixed exponential pacing没固定次数的step就提升一下 ②Varied exponential pacing 提升的step可以是变化的 ③Single-step pacing 简化版的①

关于current hypothesis与target hypothesis:

有些方法中(self-paced learning hard example mining 或 active learning)更倾向于hard example。实际上和CL不同,是因为focus on hard example是基于当前模型的状态去定义难度的(current hypothesis),CL则是基于最终的状态(target hypothesis)。实际上这两种并不矛盾,有研究表明模型可以同时受益于这两种。这篇文章也从理论角度去证明了这一结论。

实验

关于curriculum by transfer的结论:
Curriculum learning is clearly and significantly beneficial - learning starts faster, and converges to a better solution.
the observed advantage of CL is more significant when the task is more difficult(很直观,因为越难的任务越需要CL)

其中anti-curriculum指的是按照难度从高到低排;random则是对难度随机排:

其他结论:

使用不同的transfer function都指向了相似的gradient方向;与使用所有数据相比,transfer function则指向了不同的方向;同时使用所有数据的gradient和使用random scoring function的gradient相似,说明random能够较为合理的去estimate真正的empirical gradient。如图:

理论

略过大量公式。直接谈结论:

①通过CL修改后的optimization landscape拥有和原来一样的optimization function;并且修改后的global maximum 比原先的更明显(pronounced)

②如果数据分布p和最优的utility $U_{\tilde{\vartheta}}(X)$ 是正相关的,且比其他的$U_{\vartheta}(X)$更正相关,那么往optimal parameter $\tilde{\vartheta}$ 总体上会更加steeper(陡峭)。

③the optimization landscape is modified to amplify the difference between the optimal parameters vector and all other parameter values whose covariance with the optimal solution (the covariance is measured between the induced prior vectors) is small, and specifically smaller than the variance of the optimum.

结论与思考

就我的理解而言,本文的最大贡献就是:统一了原先的从简单到难(curriculum learning或self-paced learning)和focus on difficulty examples(boosting或hard data mining),只要修改后的数据分布与optimal utility是正相关的,那么就可以提升表现,因此两种strategy都是有效的。 It may even be possible to find a curriculum which is directly correlated with the optimal utility, and that outperforms both methods

不过这篇文章有些奇怪,empirical和theoretical的部分完全割裂的感觉。


[XLNet: Generalized Autoregressive Pretraining for Language Understanding]

最近比较火的文章,对Bert的全面超越。将bert的双向和context以及language model的long range dependency巧妙结合,获得新的pretrain model。

背景

预训练语言模型可以分为两种 autoregressive(AR)语言模型和 autoencoding(AE)。AR就是传统的语言模型,从前到后或从后到前预测,典型的就是GPT;AE则是通过受破坏的数据还原出原始数据,Bert就是其中一员。

但这两种方法各有缺点:

bert的AE方法假设了所有被预测的token是独立的(也即mask掉的词相互之间是独立的,也即上一个mask的词并不能对预测下一个mask的词有帮助),但自然语言中这种依赖关系应该是存在的;同时[Mask]在真实数据中并不存在,也即存在input noise,导致pretrain-finetune discrepancy。

而AR的问题主要在没有充分利用前后的上下文,只使用了部分。

本文通过permutation来达到规避这两个缺点的目的,也即 既利用了前后上下文,又没有input noise,同时还没有independence assumption。

模型

定义一个factorization orders(注意是虚拟的顺序,原始顺序还是会保留的),将原始的顺序打乱。使得一个词的预测可以由两侧的词来帮助。

如图,输入的原始顺序还是不变,但通过 mask attention来达到不同的factorization order的目的,在不同order下预测同一个$x_3$,由于factorization order的顺序不同,在3之前的词发挥了作用,而在他之后的词就没有参与预测。

形式化则有:

其中$z$是permutation/factorization order。

显然这个模型如果只使用原来的transformer结构是有问题的,也即target position unaware。假设今天有两种factorization order,在t之前的内容都是一致的,在t上则有不同的词,那么他们预测的分布都会是一样的,但按理说不应该一样,因为target不一样。所以需要让target发挥作用。

因此在这里修改了一下transformer架构,引入Two-Stream Self-Attention for Target-Aware Representations。

可以看到,现在兵分两路,每一层都得到两个表示。其中$h$和原来transformer一样,而$g$则是新引进的,也即在Q中只使用position而没有content。

形式化有:

所以,进行预测词操作的时候只使用$g$去预测相应位置上的内容即可。

一些细节:
① 为了让训练更容易,只预测最后的几个tokens(factorization order的最后几个);
②将transformer-xl引入,也即相对位置和历史信息的idea
③引入相对位置的segment encoding,使得更灵活,因为这样就可以encode超过两个输入的segment了,使用absolute segment则不行.

思考

相对bert而言,有更多的上下文信号,因为bert使用了mask,使得mask之间不能相互帮助。同时也有原先language model的特点,也即顺序预测的特点,这样就可以直接用于一些有该特点的下游任务。作者整个思路行云流水,并且对模型的本质看得很透。

但这种方法因为要保存两份hidden state,会需要更多的内存和计算资源。

这篇文章的结果很强,且模型也有说服力。但训练使用了512张TPU,以及用了超过Bert的数据量(数据量是否对超过Bert有很大的帮助?)。不得不说这类文章普通人只能看看,NLP已经进入了军备竞赛了。


[An Empirical Exploration of Curriculum Learning for Neural Machine Translation]

讨论了一些关于在NMT上使用CL的策略(相比原本的CL更加灵活),并做了一系列实验得到一些结论。

策略创新


首先是将sample distribution的概念扩展到shard的层面而不是单一的example。也即:

将example结成group。将相似difficulty的放在同一个shard里面。

具体应如何做?有三种方案:
①设定一个难度score的阈值,显然这个方法不好弄,因为不好手动设阈值。
②直接等大小分,每个shard的个数一样,但这样可能会带来shard内部的难度score的波动。 ③本文采用的是Jenks Natural Breaks classification algorithm,也即shard内部的variance尽量小,shard之间的variance尽量大


第二是sample difficulty criteria:
采用了两种方法:一个是训练辅助(小的)模型来做判断;另一个是采用linguistic的feature

第一种也即Model-based Difficulty Criteria,给定source sentence,获得target的概率。
第二种是Linguistic Difficulty Criteria,也即word frequency,然后将句子按照least frequent word来排序(这实际上和逐步添加词表大小,然后训练所有词都在该词表的句子是等价的)


第三是schedule:

每一行代表一个阶段(phase)。

注意到default是有shuffle的(shard之间的shuffle);而noshuffle是shard内部有shuffle,但之间没有shuffle。

实验结论

似乎严格按照顺序来做(noshuffle)并没有帮助(相对default而言);
对learning rate敏感;
CL确实有帮助,difficulty criteria是关键,词表频率和使用小模型来做标准都有用,但在这里句子长度没用。

几个思考

实验做得有点奇怪;论文中的phase似乎是每次数据过一遍就到下一个phase了,然而shard分得也太少了,那其实前几个epoch就把CL的phase全部走完了;
为什么noshuffle没有帮助,是否意味着在一个phase内部严格按照从易到难是没有帮助的,而模型更需要的是那些对它当前最难的那一批,而在这个phase内是先出现还是后出现都没有关系?这样是否可以在phase内部使用boosting?或者干脆删掉不重要的例子。