一. 介绍
在持续学习中,通过逐步适应一个模型来学习顺序观察到的任务。其有两个主要的目标:保持长期的记忆和不断学习新的知识。而这也就是稳定-可塑性的困境,而持续学习也就是想方设法再这两个之间寻求一种平衡。
传统的CL方法要么最小化灾难性遗忘,要么提高快速泛化,而并没有进行同时的考虑。常见的可以分为三类:(1)动态的网络结构,(2)正则化方式,(3)记忆重放即情景再现方式。而解决泛化问题的有包括表示学习的方式(例如元学习)。
这些传统的CL方式仅仅只是最小化了一个损失函数,但没有明确地考虑他们再优化设置中的权衡。第一个将这个工作进行考虑的为meta-experience replay(MER)算法中,其中遗忘-泛化被提出作为一种梯度对齐的方式。但是在MER中,遗忘泛化的平衡是通过几个超参数来实现的。因此,出现了两个挑战,一是缺泛理论工具来研究一个平衡点的存在性和稳定性。二是缺泛系统的方法来取得这个平衡点。因此本篇论文就是针对此进行改进。
作者描述了一个框架,在这个框架中,首先将CL问题定义为一个顺序决策问题,并寻求最小化整个模型生命周期的成本函数总和。在任何时候,如果未来的任务不可用,成本函数的计算就变的非常棘手。为了解决这一问题,利用Bellman的最优性原则,对CL问题进行重新建模,以模拟之前任务的灾难性遗忘代价和新任务的泛化代价。之后根据此进行改善,提出了平衡持续学习算法(BCL)。
二. 问题定义
在本文中
R
,
N
\mathbb{R,N}
R,N表示实数域和正整数域。
∥
.
∥
\parallel . \parallel
∥.∥表示矩阵的泛数。总共有
[
0
,
K
]
,
K
∈
N
[0,K],K\in \mathbb{N}
[0,K],K∈N个任务。模型为
g
(
.
)
g(.)
g(.),接受
θ
k
\theta_k
θk参数对数据进行预测。一个任务(假设为第k个任务),表示为
Q
k
=
{
X
k
,
l
k
}
\mathcal{Q}_k = \{\mathcal{X_k,l_k}\}
Qk={Xk,lk},其中l为对应的损失。参数序列的表示为
u
k
:
K
=
{
θ
τ
∈
Ω
θ
,
k
≤
τ
≤
K
}
u_{k:K}=\{\theta_{\tau}\in\Omega_{\theta},k\le\tau\le K\}
uk:K={θτ∈Ωθ,k≤τ≤K},其中,
Ω
θ
\Omega_\theta
Ωθ表示紧凑的集。*表示为最优值(例如
θ
∗
\theta^*
θ∗)。
这里作者给了个图去描述持续学习:
为了使持续学习具体化,这里定义了一个消耗(cost):由灾难性遗忘的cost和泛化的组合。这个cost在每一个任务k上都存在:
J
k
(
θ
k
)
=
γ
k
ℓ
k
+
∑
τ
=
0
k
−
1
γ
τ
ℓ
τ
J_k(\theta_k) = \gamma_k\ell_k+\sum^{k-1}_{\tau=0}\gamma_\tau \ell_\tau
Jk(θk)=γkℓk+∑τ=0k−1γτℓτ。这里的
ℓ
τ
\ell_\tau
ℓτ被计算在在任务
Q
τ
\mathcal{Q}\tau
Qτ,描述这个任务对该总和的贡献。为了去解决在第k个任务上此时的问题,我们需要去寻找
θ
k
\theta_k
θk使得
J
k
(
θ
k
)
J_k(\theta_k)
Jk(θk)最小。那么对于整个任务序列来说,我们需要使其最小。因此整个持续学习的优化问题就是累积cost:
V
k
(
u
k
:
K
)
=
∑
τ
=
k
K
β
τ
J
τ
(
θ
τ
)
V_k(u_{k:K})=\sum^K_{\tau=k}\beta_\tau J_\tau(\theta_\tau)
Vk(uk:K)=∑τ=kKβτJτ(θτ),使得其最小:
V
k
(
∗
)
=
min
u
k
:
K
V
k
(
u
k
:
K
)
(1)
V^{(*)}_k=\min _{u_{k:K}}V_k(u_{k:K}) \tag{1}
Vk(∗)=uk:KminVk(uk:K)(1)
在这个公式中,有两个参数决定任务的贡献:
γ
τ
\gamma_\tau
γτ,过去没想任务的贡献。
β
τ
\beta_\tau
βτ,未来任务的贡献。为了解决这个问题,(1)必须是连续可微的。然后作者通过证明证明出无法保证无限任务的场景下是可微的,同时也说一个具有无限内存的CL问题是np问题,CL不能在大量任务上提供完美的性能,而且任务必须有优先级。因此只是天真的减小这个损失是错误的,而且由于之前的数据不可见,无法评估之前处理过的任务。
三. 动态规划的持续学习
首先引入动态规划的表示(也就最优成本对于k的表现):
∇
k
(
V
k
(
∗
)
)
=
−
min
θ
k
∈
Ω
θ
[
β
k
J
k
(
θ
k
)
+
(
<
∇
θ
k
V
k
(
∗
)
,
Δ
θ
k
>
+
<
∇
x
k
V
k
(
∗
)
,
Δ
x
k
>
)
]
(2)
\nabla_k(V_k^{(*)})=-\min_{\theta_{k}\in\Omega_\theta}[\beta_k J_k(\theta_k)+(<\nabla_{\theta_k}V_k^{(*)},\Delta\theta_k>+<\nabla_{x_k}V_k^{(*)},\Delta x_k>)] \tag{2}
∇k(Vk(∗))=−θk∈Ωθmin[βkJk(θk)+(<∇θkVk(∗),Δθk>+<∇xkVk(∗),Δxk>)](2)
(2)的推导过程这里省略,有兴趣的可以去看原文。公式中
∇
k
(
V
k
(
∗
)
)
\nabla_k(V_k^{(*)})
∇k(Vk(∗))表示
V
k
(
∗
)
V_k^{(*)}
Vk(∗)中所有的扰动。也就是说,当其等于0说明新任务k不会去影响我们当前的解决方式,换句话说,就是对之前任务的最优解对新任务也是最优解。因此扰动越小,模型对所有任务的性能就越好,从而目标变为:最小化所有扰动。在(2)中,这个扰动有三部分构成:成本的分布对于之前的任务加上任务k:
J
k
(
θ
k
)
J_k(\theta_k)
Jk(θk),参数的变化
<
∇
θ
k
V
k
(
∗
)
,
Δ
θ
k
>
<\nabla_{\theta_k}V_k^{(*)},\Delta\theta_k>
<∇θkVk(∗),Δθk>,以及新任务引入(数据集)而导致最优成本的变化
<
∇
x
k
V
k
(
∗
)
,
Δ
x
k
>
<\nabla_{x_k}V_k^{(*)},\Delta x_k>
<∇xkVk(∗),Δxk>。
优化(2)可以任务是找到持续学习的解。我们用
H
(
Δ
x
k
,
θ
k
)
=
β
k
J
k
(
θ
k
)
+
(
<
∇
θ
k
V
k
(
∗
)
,
Δ
θ
k
>
+
<
∇
x
k
V
k
(
∗
)
,
Δ
x
k
>
)
H(\Delta x_k,\theta_k) = \beta_k J_k(\theta_k)+(<\nabla_{\theta_k}V_k^{(*)},\Delta\theta_k>+<\nabla_{x_k}V_k^{(*)},\Delta x_k>)
H(Δxk,θk)=βkJk(θk)+(<∇θkVk(∗),Δθk>+<∇xkVk(∗),Δxk>)。也就是优化
H
(
Δ
x
k
,
θ
k
)
H(\Delta x_k,\theta_k)
H(Δxk,θk)指的是尽量减少新任务带来的干扰。
接下来,我们必须去平衡泛化和遗忘对于每一个任务k。当模型成功适应新任务时,它表现出泛化。泛化的程度取决于先前任务和新任务之间的差异。两个后续任务之间的差异越大,模型就必须越一般化。因此,最坏情况差异提示最大泛化。然而,较大的差异会增加遗忘,最坏情况下的差异会产生最大的遗忘。同时使(2)中的第三项值最大,可以得到最大的泛化性,因此
Δ
x
k
\Delta x_k
Δxk量化了后续任务中的变化。然而
Δ
x
k
=
x
k
+
1
−
x
k
\Delta x_k=x_{k+1}-x_k
Δxk=xk+1−xk,我们不知道
x
k
+
1
x_{k+1}
xk+1当在第k个任务时。因此使用更新
Δ
x
k
\Delta x_k
Δxk梯度上升来估计最坏情况下的差异。接下来,通过使用梯度下降迭代更新
θ
k
\theta_k
θk来最小化最大泛化的遗忘。
接下来,去描述上面所说的问题。其中上标i表示第k个任务的迭代第i轮。
在(3)中,尝试去寻找一组
(
Δ
x
k
(
∗
)
,
θ
k
(
∗
)
)
(\Delta x_k^{(*)},\theta_k^{(*)})
(Δxk(∗),θk(∗)),其中
Δ
x
k
(
∗
)
\Delta x_k^{(*)}
Δxk(∗)使H最大化,而
θ
k
(
∗
)
\theta_k^{(*)}
θk(∗)使H最小化(这就是上文作者说的,两个player,寻找平衡点)。
(
Δ
x
k
(
∗
)
,
θ
k
(
∗
)
)
(\Delta x_k^{(*)},\theta_k^{(*)})
(Δxk(∗),θk(∗))为我们的解,要满足下面这个条件:
H
(
Δ
x
k
(
∗
)
,
θ
k
(
i
)
)
≥
H
(
Δ
x
k
(
∗
)
,
θ
k
(
∗
)
)
≥
H
(
Δ
x
k
(
i
)
,
θ
k
(
∗
)
)
(4)
H(\Delta x_k^{(*)},\theta_k^{(i)})\ge H(\Delta x_k^{(*)},\theta_k^{(*)}) \ge H(\Delta x_k^{(i)},\theta_k^{(*)}) \tag{4}
H(Δxk(∗),θk(i))≥H(Δxk(∗),θk(∗))≥H(Δxk(i),θk(∗))(4)
3.1 理论分析
现在目标是要怎么样去找到我们所要的点,来使得达到平衡。
上述这图简要描述了作者的思路。首先一开始固定住
θ
\theta
θ,构造出一个邻域
M
k
=
θ
k
(
.
)
∈
Ω
x
}
\mathcal{M}_k = \theta_k^{(.)}\in\Omega_x\}
Mk=θk(.)∈Ωx},之后对
Δ
x
k
(
i
)
\Delta x_k^{(i)}
Δxk(i),在这个区间里用梯度上升找到一个局部的最大值。接下来,锁定我们找到的
Δ
x
k
(
.
)
\Delta x_k^{(.)}
Δxk(.)。根据梯度下降去更新。这里作者证明了在
N
k
=
{
Ω
θ
,
Δ
x
k
(
.
)
}
\mathcal{N}_k=\{\Omega_\theta,\Delta x_k^{(.)}\}
Nk={Ωθ,Δxk(.)}这个区域内,H为最小值,同时此时收敛到了这个区域。最后在上述两个区域内,这里至少存在一个平衡点。
3.2 平衡的持续学习(BCN)
基于此,我们改
H
(
Δ
x
k
(
i
)
,
θ
k
(
i
)
)
≈
β
k
J
k
(
θ
k
(
i
)
)
+
(
J
k
(
θ
k
(
i
+
ζ
)
)
−
J
k
(
θ
k
(
i
)
)
)
+
(
J
k
+
ζ
(
θ
k
(
i
)
)
−
J
k
(
θ
k
(
i
)
)
)
H(\Delta x_k^{(i)},\theta^{(i)}_k)\approx \beta_k J_k(\theta_k^{(i)})+(J_k(\theta_k^{(i+\zeta)}) - J_k(\theta_k^{(i)}) )+(J_{k+\zeta}(\theta_k^{(i)}) -J_k(\theta_{k}^{(i)}) )
H(Δxk(i),θk(i))≈βkJk(θk(i))+(Jk(θk(i+ζ))−Jk(θk(i)))+(Jk+ζ(θk(i))−Jk(θk(i)))。其中
J
k
+
ζ
J_{k+\zeta}
Jk+ζ就是更新 player 1,
θ
k
(
i
+
ζ
)
\theta_k^{(i+\zeta)}
θk(i+ζ)则是更新player2.
其中两个player用上述5进行选择和更新。具体的算法如下图所示:
其中
D
N
(
k
)
\mathcal{D}_N(k)
DN(k)表示是一个新的任务,
D
P
(
k
)
\mathcal{D}_P(k)
DP(k)表示是从过去的任务进行采样的。对于每一个batch
b
N
∈
D
N
(
k
)
b_N\in \mathcal{D}_N(k)
bN∈DN(k),我们同时采样
b
P
∈
D
P
(
k
)
b_P \in \mathcal{D}_P(k)
bP∈DP(k)。将他们联合起来构成
b
P
N
(
k
)
b_{PN}(k)
bPN(k)。之后按照上述的思想进行更新即可。
四. 代码详解
这次代码作者没有给出自己的代码(或者我没有找到),我打算自己复现一下,具体的代码可能在明天更新。