本文同样以MAML为基础,与MAML不同的是,MAML在每个新任务上会更新所有的参数,而CAML将模型的参数分成了两部分,一部分是context parameters,作为模型的额外输入使其适应于单独的任务;另一部分是shared parameters,在任务间共享并通过元学习训练过程优化。CAML在每个新任务上只更新模型的context部分的参数,这样可以在使用更大的网络情况下避免在单一任务上过拟合,并且可以节省内存。
- 为了使模型在新任务上快速学习,通常只进行几步梯度下降,这时候MAML内循环实际上变成了一个任务识别问题,而不是学习如何去解决整个任务。因此,如果模型中跨任务变化的部分是模型的额外输入,并且独立于其他输入,那么就足够解决问题了。
- 模型的额外输入,也就是context parameters ϕ \phi ϕ,可以被看做是调整模型行为的task embedding或者是condition。 ϕ \phi ϕ在元学习过程的内循环中更新,其余的参数 θ \theta θ在外循环中更新,这可以使CAML优化过程更加明确,在任务间优化任务独立参数 θ \theta θ,同时保证任务特异的参数 ϕ \phi ϕ可以快速地适应新任务。
- task solver和task embedding分离有几个优点:
- 这两部分的大小可以根据任务进行合适的调整,使得在使用更深的网络进行训练时能够在内循环不会对某个任务过拟合(MAML在使用更深的网络时会过拟合)
- 模型设计和结构选择也从这种分离中受益,因为对于许多实际问题,我们事先知道任务之间在哪些方面不同,因此也知道 ϕ \phi ϕ的容量
- 由于只对 ϕ \phi ϕ求高阶导,避免了在神经网络对weights和biases的操作
- 由于不用像MAML一样在内层循环时复制参数,减少了写内存的次数,加快了训练过程
模型
监督学习
在任务的每一个batch T的每一个元学习iteration中,使用每个task T i ∈ T \mathcal{T}_i\in T Ti∈T训练集 D i t r a i n D_i^{train} Ditrain进行训练。从初值 ϕ 0 \phi_0 ϕ0开始(可以是常值或者在学习过程中更新,通常取0),通过一部梯度更新学习任务特异参数 ϕ i \phi_i ϕi,
ϕ i = ϕ 0 − α ∇ ϕ 1 M i t r a i n ∑ ( x , y ) ∈ D i t r a i n L T i ( f ϕ 0 , θ ( x ) , y ) \phi_i = \phi_0 - \alpha\nabla_\phi\frac{1}{M_i^{train}}\sum_{(x,y)\in D_i^{train}}\mathcal{L}_{\mathcal{T}_i}(f_{\phi_0,\theta}(x),y) ϕi=ϕ0−α∇ϕMitrain1