多任务学习和迁移学习虽然经常被分别表述,但其实二者的思想和任务都是一直的:利用其他数据的知识来提升任务目标的性能。在大多数多任务学习中,可以随着主任务学习进度的变化,选择、控制不同辅助任务的使用频率,通过这样的方法可以随着主任务的变化,给与最适合的辅助样本来提高性能。Curriculum Learning 是一个非常有意思的方法,他的思想是通过对数据集中所选择的任务进行难度排序,让网络模型先学习比较简单的任务,之后再学习比较复杂的任务,这样可以使模型训练的更快、更好。
多任务学习的四个问题:
本文的目标意在解决不同分任务在整体训练过程中有多少占比,换句话说是不同辅助任务对主任务的重要程度。
本文将一个具有N个任务的课程看作一个N-臂赌博机问题,在每一轮t中任务选择方法可以选择一个任务进行运行,同时得到运行过后的结果,这个任务选择方法的目的是让每一次选择都可以的到尽可能好的问题。那么本文的最终目的就是自动的找到一个最合适的任务选择方法。
最基本的任务原则机制有两种,一种是使用随机选择的方式,还有一种比较简单的选择方式是以数据集大小为准则,分配选择机理。
随机选择:
π t R A N D O M ( k ) = 1 N \pi_{t}^{\mathrm{RANDOM}}(k)=\frac{1}{N} πtRANDOM(k)=N1
按样本数量选择:
π t TASK S I Z E ( k ) = ∣ D k ∣ ∑ j = 1 N ∣ D j ∣ \pi_{t}^{\operatorname{TASK} \mathrm{SIZE}}(k)=\frac{\left|D^{k}\right|}{\sum_{j=1}^{N}\left|D^{j}\right|} πtTASKSIZE(k)=∑j=1N∣Dj∣∣Dk∣
在[1]中作者有一个假设:任务选择方法会产生一个大纲(大的选择方向,syllabus ):把注意力集中在难度递增的任务上。这使得作者们设计并评估了几种不同的编码方法来衡量训练过程进展到一个样本水平奖励函数的速度。他们发现训练的过程中prediction gain基本上可以指出最优的任务选择方法应当是什么样的。这就意味这通过这个原理,我们不用一步步的训练任务选择方法,而是可以通过前期的几个任务选择方法直接预测出后面的最优的选择方法。(这就像我们训练一个深度神经网络,本来是通过训练集的数据一次一次的调整网络参数,让网络中的参数一步一步的达到最优值(虽然大多数情况都是局部最优),但现在有了一个映射关系,或者说是一个先验知识,那我们就不需要一步一步的把训练集的数据都跑一下,就可以直接得出网络的最终参数。)
prediction gain的定义是:样本训练前后的变化
L k ( x , θ π E X P 3. S ) − L k ( x , θ π E x P 3. S ′ ) L_{k}\left(\mathbf{x}, \theta_{\pi^{\mathrm{EXP} 3 . \mathrm{S}}}\right)-L_{k}\left(\mathbf{x}, \theta_{\pi \mathrm{ExP} 3 . S}^{\prime}\right) Lk(x,θπEXP3.S)−Lk(x,θπExP3.S′)
所以counterfactual estimation的目的就是使用旧的任务选择方法数据来改进该策略,而不需要与环境进行进一步的交互。
那么到这里就可以将我们要解决的问题分为两个步骤
在多臂赌博机的训练过程中,依据任务选择机制π选择任务,之后将数据 X t \mathbf{X}_{t} Xt送入模型进行进行训练,从而得到这次训练的反馈 r t ( x t ) r_{t}\left(\mathbf{x}_{t}\right) rt(xt)。每一个x被选择的概率是 P ( x ∣ π ) P(\mathbf{x} | \pi) P(x∣π),这里的π是使用这种任务选择机制后的期望收益。
V ( π ) = E x ∼ P ( x ∣ π ) [ r ( x ) ] = ∑ x P ( x ∣ π ) r ( x ) V(\pi)=\underset{\mathbf{x} \sim P(\mathbf{x} | \pi)}{\mathbb{E}}[r(\mathbf{x})]=\sum_{\mathbf{x}} P(\mathbf{x} | \pi) r(\mathbf{x}) V(π)=x∼P(x∣π)E[r(x)]=∑xP(x∣π)r(x)
可以从 P ( x ∣ π ) P(\mathbf{x} | \pi) P(x∣π)的采样轨迹中估计出 V ( π ) V(\pi) V(π)
V ^ ( π ) = 1 T ∑ t = 1 T r t ( x t ) \hat{V}(\pi)=\frac{1}{T} \sum_{t=1}^{T} r_{t}\left(\mathbf{x}_{t}\right) V^(π)=T1∑t=1Trt(xt)
在反事实估计中,任务是通过来自π的一系列信息来估计出一个万物按不同的任务选择方式的评价 V ( π C ) V\left(\pi^{\mathrm{C}}\right) V(πC),我们无法通过 π C \pi^{\mathrm{C}} πC来进行训练来得到结果,只能通过间接的方法估计出 V ( π C ) V\left(\pi^{\mathrm{C}}\right) V(πC)
V ( π C ) = ∑ X P ( x ∣ π C ) r ( x ) = ∑ X P ( x ∣ π C ) P ( x ∣ π ) P ( x ∣ π ) r ( x ) = ∑ X P ( x ∣ π ) P ( x ∣ π C ) P ( x ∣ π ) r ( x ) = E x ∼ P ( x ∣ π ) [ P ( x ∣ π C ) P ( x ∣ π ) r ( x ) ] \begin{aligned} V\left(\pi^{\mathrm{C}}\right) &=\sum_{\mathbf{X}} P\left(\mathbf{x} | \pi^{\mathrm{C}}\right) r(\mathbf{x}) \\ &=\sum_{\mathbf{X}} P\left(\mathbf{x} | \pi^{\mathrm{C}}\right) \frac{P(\mathbf{x} | \pi)}{P(\mathbf{x} | \pi)} r(\mathbf{x}) \\ &=\sum_{\mathbf{X}} P(\mathbf{x} | \pi) \frac{P\left(\mathbf{x} | \pi^{\mathrm{C}}\right)}{P(\mathbf{x} | \pi)} r(\mathbf{x}) \\ &=\mathbb{E}_{\mathbf{x} \sim P(\mathbf{x} | \pi)}\left[\frac{P\left(\mathbf{x} | \pi^{\mathrm{C}}\right)}{P(\mathbf{x} | \pi)} r(\mathbf{x})\right] \end{aligned} V(πC)=X∑P(x∣πC)r(x)=X∑P(x∣πC)P(x∣π)P(x∣π)r(x)=X∑P(x∣π)P(x∣π)P(x∣πC)r(x)=Ex∼P(x∣π)[P(x∣π)P(x∣πC)r(x)]
我们可以通过使用Monte Carlo(蒙特·卡罗方法(Monte Carlo method),是指使用随机数(或更常见的伪随机数)来解决很多计算问题的方法)来近似 V ( π C ) V\left(\pi^{\mathrm{C}}\right) V(πC),让其只依赖于从 P ( x ∣ π ) P(\mathbf{x} | \pi) P(x∣π)中取得的样本。
V ^ I S ( π C ) = 1 T ∑ t = 1 T P ( x t ∣ π C ) P ( x t ∣ π ) r t ( x t ) \hat{V}_{\mathrm{IS}}\left(\pi^{\mathrm{C}}\right)=\frac{1}{T} \sum_{t=1}^{T} \frac{P\left(\mathbf{x}_{t} | \pi^{\mathrm{C}}\right)}{P\left(\mathbf{x}_{t} | \pi\right)} r_{t}\left(\mathbf{x}_{t}\right) V^IS(πC)=T1∑t=1TP(xt∣π)P(xt∣πC)rt(xt)
在 P ( x ∣ π C ) > 0 ⟹ P ( x ∣ π ) > 0 P\left(\mathbf{x} | \pi^{\mathrm{C}}\right)>0 \quad \Longrightarrow \quad P(\mathbf{x} | \pi)>0 P(x∣πC)>0⟹P(x∣π)>0约束下这种估计是无偏的。但是这种估计方式是有缺陷的,当在 P ( x t ∣ π ) P\left(\mathbf{x}_{t} | \pi\right) P(xt∣π)非常小的时候,估计出的重要性参量 P ( x t ∣ π C ) P ( x t ∣ π ) \frac{P\left(\mathbf{x}_{t} | \pi^{\mathrm{C}}\right)}{P\left(\mathbf{x}_{t} | \pi\right)} P(xt∣π)P(xt∣πC)将会非常的大,这个缺陷会导致在实际估计时,对于发生概率小的样本和发生概率大的样本之间有个非常大的差异,从而导致整体效果变差。在这篇文章中,作者选择了一个改进过的方法,weighted importance
sampling estimator,具体公式如下。
Z = 1 T ∑ t = 1 T P ( x t ∣ π C ) P ( x t ∣ π ) Z=\frac{1}{T} \sum_{t=1}^{T} \frac{P\left(\mathbf{x}_{t} | \pi^{\mathrm{C}}\right)}{P\left(\mathbf{x}_{t} | \pi\right)} Z=T1∑t=1TP(xt∣π)P(xt∣πC)
V ^ W I S ( π C ) = V ^ I S ( π C ) Z \hat{V}_{\mathrm{WIS}}\left(\pi^{\mathrm{C}}\right)=\frac{\hat{V}_{\mathrm{IS}}\left(\pi^{\mathrm{C}}\right)}{Z} V^WIS(πC)=ZV^IS(πC)
这里其实相当于对所有计算出的评价值经行了一个归一化,这是一个非常经典的思想。
在有了一个可以评价任务选择机制的方法之后,我们的目标是在这个评价方法之上找到一个良好的任务选择方法,类比到深度学习中,就像我们现在已经确定了一个损失函数,现在需要确定我们的模型是什么样子,之后将模型公式带入损失损失函数中,将整个问题归结到一个最优化问题上,之后用计算机进行优化计算。
在本文中作者选择的任务选择方法的表达形式为:
π ω , t C ( k ) = e ω k ∑ j = 1 N e ω j \pi_{\omega, t}^{\mathrm{C}}(k)=\frac{e^{\omega_{k}}}{\sum_{j=1}^{N} e^{\omega_{j}}} πω,tC(k)=∑j=1Neωjeωk
其实可以看出这个公式和softmax的公式非常像,在这里不介绍softmax分类器的优点了,有需要的同学可以看相关的论文。
max ω V ^ W I S ( π ω , t C ) \max _{\omega} \hat{V}_{\mathrm{WIS}}\left(\pi_{\omega, t}^{\mathrm{C}}\right) maxωV^WIS(πω,tC)
所以我们整个寻找最好的任务选择方法的过程可以归一化到求如下公式的最大值的问题当中:
max ω [ V ^ W I S ( π ω , t C ) + λ H ( π ω , t C ) ] \max _{\omega}\left[\hat{V}_{\mathrm{WIS}}\left(\pi_{\omega, t}^{\mathrm{C}}\right)+\lambda \mathrm{H}\left(\pi_{\omega, t}^{\mathrm{C}}\right)\right] maxω[V^WIS(πω,tC)+λH(πω,tC)]
和深度学习问题一样,在这种训练方法中,一些反馈最好的点并不一定是我们想要的实验结果,这有些类似于过拟合,所以在上面公式的基础上,作者加入了正则化的方法来提高模型的效果。
在课程学习的任务中,需要定义一个reward来经行训练,一遍情况下一个最大化希望值r的选择机制在任务训练结束同样将会最小化平均任务损失(这相当于最小化损失函数同样会最大化模型准确率)
max π E x ∼ P ( x ∣ π ) [ r ( x ) ] ≈ min π L ( θ π ) \max _{\pi} \underset{\mathbf{x} \sim P(\mathbf{x} | \pi)}{\mathbb{E}}[r(\mathbf{x})] \approx \min _{\pi} \mathcal{L}\left(\theta_{\pi}\right) maxπx∼P(x∣π)E[r(x)]≈minπL(θπ)
但在作者的实验当中,发现用这种Reward并不能很好的得到结果,所以作者选择使用了如下的reward:
Δ L = L k ( x t , θ t ) − L k ( x t − δ k , θ t − δ k ) r t = { 1.0 − e − L k ( x t , θ t ) if Δ L < 0 0 otherwise \begin{aligned} \Delta_{L} &=L_{k}\left(\mathbf{x}_{t}, \theta_{t}\right)-L_{k}\left(\mathbf{x}_{t-\delta_{k}}, \theta_{t-\delta_{k}}\right) \\ r_{t} &=\left\{\begin{array}{ll}{1.0-e^{-L_{k}\left(\mathbf{x}_{t}, \theta_{t}\right)}} & {\text { if } \Delta_{L}<0} \\ {0} & {\text { otherwise }}\end{array}\right.\end{aligned} ΔLrt=Lk(xt,θt)−Lk(xt−δk,θt−δk)={1.0−e−Lk(xt,θt)0 if ΔL<0 otherwise
在训练一个模型(或者在这里是一个任务选择机制)的过程中,我们可以有两种方法,一种是基于数据的方法,在海量的数据中通过最优化方法让模型学习到相应的知识。另外一种方法是在训练过程设计中,引入更多的先验知识,这样可以减少数据的依赖量,同样可以减少模型的训练难度。在传统的模式识别过程中,往往使用人工设计特征描述子的方法来提取特征,之后将特征送入支撑向量机之类的分类器中,这一类方法往往只需要很少的数据量。在这个工作当中,使用了反事实估计(counterfactual estimation )的方法,和课程学习的思想,这些工作其实都是将先验信息加入整个模型训练过程,这种方法可以让模型的训练速度更快,效果更好。
作者在文中还做了一些实验,效果都非常好,如果有需要的可以去看一下原文。
[1]Alex Graves, Marc G Bellemare, and Jacob Menick.2017. Automated Curriculum Learning for Neural Networks.