元学习—基于元学习的上下文快速适应(Fast Context Adaptation via Meta-Learning)

元学习—基于元学习的上下文快速适应(Fast Context Adaptation via Meta-Learning)

1 介绍

机器学习中的快速适应指的是使用少量的数据在之前未见的任务上进行快速的学习。原则上,可以利用之前的一些相关的任务所获取的一些知识来完成这个挑战。然而,如何选择一个最好的方式,目前仍然是一个没有被解决的问题。我们对于利用元学习来解决快速适应的问题十分的感兴趣,即通过少量的样本在未见的任务上进行学习。

一个快速适应的方法是使用基于梯度的方法,在测试的时候,定义一个具体的与任务相关的损失函数,仅仅执行一次获取少量的梯度下降的步骤来解决新的任务。模型未知学习(MAML)是一个常见的,并且有力的基于梯度的元学习方法。其学习一个模型的初始化参数,以此来允许在测试的时候能够快速适应。给定的MAML是不可知模型的,即其可以被应用到任何一个利用梯度下降的具体算法之上,并且已经有大量的方法建立在这个基础之上。

MAML通过一个交错的方式来进行训练,包括了内层循环和外层循环,每一次迭代针对的是一个batch的数据。在内层循环中,MAML通过在具体任务的损失函数上执行一个梯度下降的步骤来学习具体任务网络的参数。然后,在外层的循环中,模型的参数初始化参数利用之前内层循环中的已经更新好的,各个任务的参数,以及各个任务的测试集在内层任务上产生的损失的梯度结果来进行更新,最终完成对于模型初始化参数的更新。因此,MAML模型可以在测试的时候,仅仅利用少量的梯度更新就可以学习模型参数。(注:这一段描述有些抽象,建议阅读我之前的博客,了解更多细节)。MAML的一个缺陷是在测试的时候,只使用少量的数据进行更新,因此整个网络在测试的时候也是依赖少量的数据来进行更新的,这容易造成过拟合的问题。

在本篇文献中,我们提出了一种MAML的替代算法,其能够更具有可解释性,并且能够减少过拟合的现象。在没有降低性能的情况下,我们的CAVIA模型通过梯度下降的方法学习到一个能够使用新任务的模型,并且仅仅更新了一组输入时的参数,而非整个网络的参数。这些输入参数,我们称之为上下文参数 φ φ φ,可以被解释为一个任务的编码,用于调整模型的变化。我们依靠经验确认了学习到的上下文参数确实能够匹配到隐藏的任务结构。与MAML类似的是,我们的模型也是一个模型未知的方法,其能够应用到任意一个通过梯度下降训练的算法之上。

CAVIA的训练方式与MAML交错的训练方式类似,在内层循环中,上下文参数 φ φ φ被更新。并且在外层循环中更新剩余的模型参数,即参数 θ θ θ被更新。这允许了CAVIA能够明确地的独立于具体任务的参数 θ θ θ,以此在具体任务上取得更好的效果。同时确定了具体任务参数 φ φ φ能够快速被应用到新的任务上。

这种任务具体参数和任务独立的参数有以下几个优势:

  1. 两个部分的参数规模可以有更好的选择性,能够更好的适应任务。网络的参数θ在不过拟合一个内层具体任务的前提下,能够有很好的表现,而MAML更倾向于过拟合。进一步,对于许多实际问题,我们已经知道哪些方面随任务而变化,因此应该具有多少容量φ。
  2. 与MAML相比,CAVIA模型是非常容易实现并行的。学习一个batch任务的上下文参数φ时,可以在内层循环中使用并行学习的机制。其他的优势在于参数复制是非必要的,这节省了很多内存写入。我们不需要在网络权重和偏执上执行手动调节的操作。并且CAVIA有利于并行的机器学习系统,即相同的模型被部署到不同的机器之上。

CAVIA与基于编码的快速适应方法有着一定的相关性,比如条件神经过程(CNPS)和潜在嵌入优化的元学习(LEO)。这些方法共享任务上的低维向量表示所带来的优势。与MAML相比,其拥有更好的可解释性。与现存的方法相比,CAVIA使用相同的网络来学习编码,并且执行预测操作。因此,CAVIA在训练过程中使用了更少的参数,但是需要在学习的过程中计算高阶的梯度。

2 背景

首先,我们的目标是学习一个能够利用少量数据快速适应新任务的模型。因此,通过元学习在其他相关任务上进行学习是在新任务学习之前的。

2.1 问题设置

在小样本学习的问题中,我们给定了一个训练时的任务分布概率 p t r a i n ( T ) p_{train}(T) ptrain(T),和一个测试时的任务分布概率 p t e s t ( T ) p_{test}(T) ptest(T)。训练任务可以被学习如何通过少量的样本来快速的适应任意一个样本,并且之后使用测试任务进行评估。除了上面的描述,这里我们假设 p t r a i n = p t e s t p_{train}=p_{test} ptrain=ptest,并且均用p来进行表示。概率均为p的任务中,一般共享一些结构信息,因此在不同任务上可以被迁移的知识能够被快速的学习。在每一个元学习的迭代中,一个batch的为N的任务集合 T = { T i } i = 1 N T=\{T_i\}_{i=1}^N T={Ti}i=1N被通过概率p来进行采样。

监督学习: 监督学习能够学习到一个模型,即 f : x − > y ∗ f:x->y^* fx>y,即将拥有真实标签 y ∈ Y y∈Y yY的数据点 x ∈ X x∈X xX映射,来预测出 y ∗ ∈ Y y^*∈Y yY。其中X表示的是输入空间,Y表示的是标签空间。定义 L ( y , y ∗ ) L(y,y^*) L(y,y)是一个根据具体任务定义的损失函数。并且 q ( x , y ) q(x,y) q(x,y)表示的已标记的样本的点的分布概率。我们假设监督学习中的所有的样本的分布都服从q。根据上述的描述,我们可以给监督学习任务一个数学形式的定义为: T i ( X , Y , L , q ) T_i(X,Y,L,q) Ti(X,Y,L,q)(注意:q是一种隐式分布概率,非明确给出的)。最终,我们可以通过改变 T i T_i Ti中的任意一项来创建不同的任务。

在元学习的迭代上训练有监督的元学习过程,其中对于任意一个任务 T i ∈ T T_i∈T TiT,我们通过概率 q T i q_{T_i} qTi进行采用来生成一个训练集 D i t r a i n D_i^{train} Ditrain和一个测试集 D i t e s t D_i^{test} Ditest。其形式化的描述为:
D i t r a i n = { ( x , y ) i , m } m = 1 M i t r a i n , D i t e s t = { ( x , y ) i , m } m = 1 M i t e s t D_i^{train}=\{(x,y)^{i,m}\}_{m=1}^{M_i^{train}},D_i^{test}=\{(x,y)^{i,m}\}_{m=1}^{M_i^{test}} Ditrain={(x,y)i,m}m=1Mitrain,Ditest={(x,y)i,m}m=1Mitest
其中 ( x , y ) (x,y) (x,y)服从概率 q T i q_{T_i} qTi的分布, M i t r a i n M_i^{train} Mitrain M i t e s t M_i^{test} Mitest表示的是训练集和测试集的样本数量。训练数据被用于更新模型 f f f,并且测试集被用于评估模型的更新效果。并且相应的调整 f f f的更新规则。

强化学习: 强化学习(RL)的目标是学习到一个策略(π),将状态 s ∈ S s∈S sS映射到动作 a ∈ A a∈A aA。每一个任务对应着一个马尔科夫决策链(MDP),用一个元组 T i = ( S , A , r , q , q 0 ) T_i=(S,A,r,q,q_0) Ti=(S,A,r,q,q0)来进行描述,其中S表示的是状态的集合, r ( s t , a t , s t + 1 ) r(s_t,a_t,s_{t+1}) r(st,at,st+1)表示的是回馈函数, q ( s t + 1 ∣ s t ) q(s_{t+1}|s_t) q(st+1st)表示的是状态的转移概率。 q 0 ( s 0 ) q_0(s_0) q0(s0)表示的是初始的状态分布。而强化学习的最终目标是在策略π下最大会回报,即:
J ( π ) = E q 0 , q , π [ ∑ t = 0 H − 1 γ t r ( s t , a t , s t + 1 ) ] J(π)=E_{q_0,q,π}[∑_{t=0}^{H-1}γ^tr(s_t,a_t,s_{t+1})] J(π)=Eq0,q,π[t=0H1γtr(st,at,st+1)],其中H∈N,表示的是决策的步数,γ∈[0,1],表示的是折扣因子。在每一个元学习的迭代中,对于每一个任务 T i ∈ T T_i∈T TiT,我们使用收集其转移的轨迹:
τ i t r a i n = s 0 , a 0 , r 0 , s 1 , a 1 , r 1 , . . . , s M i t r a i n − 1 , a M i t r a i n − 1 , r M i t r a i n − 1 , s M i t r a i n τ_i^{train}={s_0,a_0,r_0,s_1,a_1,r_1,...,s_{M_i^{train-1}},a_{M_i^{train-1}},r_{M_i^{train-1}},s_{M_i^{train}}} τitrain=s0,a0,r0,s1,a1,r1,...,sMitrain1,aMitrain1,rMitrain1,sMitrain
其中初始的状态 q 0 q_0 q0通过根据分布概率 q 0 q_0 q0来进行采样。下面采取的行为通过策略π来进行确定。状态根据转移概率q来来进行转移。 M i t r a i n M_i^{train} Mitrain表示当前转移的数量。如果在轨迹之内已经到达了H。环境就会通过状态的初始分布 q 0 q_0 q0进行重置。一旦这个轨迹是正确的,这份数据就会被用来更新策略π。另外的关于任务i的测试集在 M i t e s t M_i^{test} Mitest的轨迹 τ i t e s t τ_i^{test} τitest通过更新之后的策略进行收集。测试集的轨迹将会被用于评估当前策略的有效性。相应的对策略进行调整。

对于监督学习和强化学习问题的评估在其他未见上的任务上进行,未见的任务也符合任务分布概率 p p p,对于每一个这样的任务,模型使用 L L L或者 J J J来进行更新,并且仅仅使用少量的数据点 D t r a i n D^{train} Dtrain, τ t r a i n τ^{train} τtrain。整个模型的参数θ的更新通过测试集进行更新。

2.2 不可知模型学习

一种小样本的学习方式是不可知元学习MAML,MAML为模型 f θ f_{θ} fθ学习到一个参数 θ θ θ。给定一个新的任务,一个好的模型仅需要少量的梯度下降步骤和少量的数据就可以被学习。在内层循环中,MAML通过一个梯度更新步骤计算新的,根据任务定义的参数 θ i θ_i θi。即
θ i = θ − α ▽ θ 1 M t r a i n i ∑ ( x , y ) ∈ D i t r a i n L T i ( f θ ( x ) , y ) θ_i=θ-α▽_θ\frac{1}{M_{train}^i}∑_{(x,y)∈D_i^{train}}L_{T_i}(f_θ(x),y) θi=θαθMtraini1(x,y)DitrainLTi(fθ(x),y)
在外层循环中,我们又对模型的初始化参数进行更新:
θ < − θ − β ▽ θ 1 N ∑ T i ∈ T 1 M t e s t i ∑ ( x , y ) ∈ D i t e s t L T i ( f θ i ( x ) , y ) θ<-θ-β▽_θ\frac{1}{N}∑_{T_i∈T}\frac{1}{M_{test}^i}∑_{(x,y)∈D_i^{test}}L_{T_i}(f_{θ_i}(x),y) θ<θβθN1TiTMtesti1(x,y)DitestLTi(fθi(x),y)
模型训练的最终结果是初始化参数θ可以被应用到其他的服从分布概率p的新任务上。

3 CAVIA

我们提出基于元学习的快速上下文适应方法(CAVIA),其中,模型的参数被分成两个部分:上下文参数φ,该参数在内层循环中被更新。并且还有模型的参数θ,在外层中被更新,并且被多个任务所共享。

3.1 监督学习

在每一次元学习训练迭代中,对于当前的一个batch的任务T。我们在使用每一个任务 T i T_i Ti训练数据集 D i t r a i n D_i^{train} Ditrain训练时,首先从一个固定的参数 φ 0 φ_0 φ0开始,我们一般选择 φ 0 = 0 φ_0=0 φ0=0,我们通过梯度更新来学习具体的任务的参数 φ i φ_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 ) φ_i=φ_0-α▽_φ\frac{1}{M_i^{train}}∑_{(x,y)∈D_i^{train}}L_{T_i}(f_{φ_0,θ(x)},y) φi=φ0αφMitrain1(x,y)DitrainLTi(fφ0,θ(x),y)
这里我们仅仅使用到了参数φ的梯度,更新之后产生的参数 φ i φ_i φi作为总的参数θ的一个函数。进一步,我们使用下面的公式来更新参数θ:
θ < − θ − β ▽ θ 1 N ∑ T i ∈ T 1 M i t e s t ∑ ( x , y ) ∈ D i t e s t L T i ( f φ i , θ ( x ) , y ) θ<-θ-β▽_θ\frac{1}{N}∑_{T_i∈T}\frac{1}{M_i^{test}}∑_{(x,y)∈D_i^{test}}L_{T_i}(f_{φ_i,θ}(x),y) θ<θβθN1TiTMitest1(x,y)DitestLTi(fφi,θ(x),y)
根据公式,我们可以看出这个更新过程包括了在θ中的高阶梯度。在测试的时候,仅仅上下文的参数通过更新公式进行更新,而θ参数此时是固定的。

3.2 强化学习

在每一次的迭代中,对于当前的MDP过程, T = { T i } i = 1 N T=\{T_i\}_{i=1}^N T={Ti}i=1N,我们执行如下的操作:给定 φ 0 φ_0 φ0,我们通过策略 π φ 0 , θ π_{φ_0,θ} πφ0,θ来推导出一个轨迹 τ i t r a i n τ_i^{train} τitrain,然后我们根据具体的任务来进行计算更新:
φ i = φ 0 + α ▽ φ J T i ( τ i t r a i n , π φ 0 , θ ) φ_i=φ_0+α▽_φJ_{T_i}(τ_i^{train},π_{φ_0,θ}) φi=φ0+αφJTi(τitrain,πφ0,θ)
其中 J T i ( τ i t r a i n , π φ 0 , θ ) J_{T_i}(τ_i^{train},π_{φ_0,θ}) JTi(τitrain,πφ0,θ)表示的是对于任何使用通过策略π来生成的轨迹的强化学习方法目标函数。在更新完策略π之后,行为可以通过更新之后的 π φ i , θ π_{φ_i,θ} πφi,θ来进行选择。

在对T中的所有任务 T i T_i Ti处理完之后,通过元学习的步骤来更新参数 θ θ θ,以此来获取在所有任务上的最优表现。更新公式如下:
θ < − θ + β ▽ θ 1 N ∑ M D P i ∈ T J T i ( τ i t e s t , π φ i , θ ) θ<-θ+β▽_θ\frac{1}{N}∑_{MDP_i∈T}J_{T_i}(τ_i^{test},π_{φ_i,θ}) θ<θ+βθN1MDPiTJTi(τitest,πφi,θ)

3.3 调节上下文参数

因为φ作为网络的一个独立的输入,我们需要确定在哪个位置,如何在它之上来调节网络。对于一个全连接输出层的节点 h i ( l ) h_i^{(l)} hi(l),我们可以很容易将参数φ与高层的输入进行拼接,即如下定义:
在这里插入图片描述
其中g是激活函数,b表示的是偏执项, θ j , i ( l , h ) θ_{j,i}^{(l,h)} θj,i(l,h)表示的的具体层 h j ( l − 1 ) h_j^{(l-1)} hj(l1)的权重, θ j , i ( l , φ ) θ_{j,i}^{(l,φ)} θj,i(l,φ)是输入 φ 0 , k φ_{0,k} φ0,k的权重,整个的计算过程可以通过下图了来展示:
在这里插入图片描述

在我们的实验中,对于全连接网络,我们在第一层选择与输入进行拼接。

3.4 上下文参数初始化

当学习一个新的任务的时候,φ用一个固定的初始值 φ 0 φ_0 φ0,我们认为在元学习的过程中,固定参数φ的初始值就足够了,如果权重 θ j , i ( l , φ ) θ_{j,i}^{(l,φ)} θj,i(l,φ) φ 0 φ_0 φ0是通过元学习的来获取的,学习到的参数φ能被划分到偏执项b中,并且 φ 0 φ_0 φ0可以被设置成固定的值。因此,我们对于的上下文参数的初始值设置,没有必要通过元学习来完成。并且参数复制不需要进行额外的训练。根据我们的实验,我们将上下文参数的初始值设置为0。

进一步,在外层循环中,不去更新上下文的参数,赋予了内层循环中的梯度变换更具有灵活性。结果,CAVIA对于内层循环的学习率 α α α更加的健壮。在进行更新之前,模型中与φ相关的部分没有影响到输出。在内层更新的时候,仅仅φ改变,并且能够影响到网络中的输出。尽管这种更新的规模很大,将φ链接到模型剩余部分的权重 θ j , i ( l , φ ) θ_{j,i}^{(l,φ)} θj,i(l,φ)将在外层循环的时候,自动的进行缩放。换句话说, θ j , i ( l , φ ) θ_{j,i}^{(l,φ)} θj,i(l,φ)将在外循环中对φ的任何过大的内循环更新进行补偿。然而,大规模的梯度更新也可能会导致散度和数值溢出,我们从实验上证明,与学习上下文参数的初始化相比,φ和θ的解耦确实可以使CAVIA对初始学习速率更健壮。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值