Incremental Learning Through Deep Adaptation论文阅读+代码解析

本篇论文来自2020年PAMI,具体地址点这里

一. 介绍

但通常情况下,仍然需要为每个新任务训练一个单独的模型。考虑到两个形式或性质完全不同的任务,例如预测一系列单词中的下一个单词和预测图像中对象的类别,很显然,每个任务都需要不同的架构或计算。一个更受限制的场景,学习一种在几个相关领域都能很好工作的表示,这种情况称为多域学习(MDL),以将其与多任务学习(在同一域上执行不同的任务)区别开来。一个标准的MDL需要满足以下几点:

  1. 使用相同的计算通道
  2. 需要为不同的域增加参数
  3. 避免灾难性遗忘
  4. 逐步学习

本文为每个任务增加了新的模型参数,并且每个任务的都具有自己独特的任务参数。

二. 方法

我们让 T T T表示为需要学习的一些任务。具体来说,一个深度的卷积神经网络(DCNN)的目的是学习并且解决 T T T。大部分的DCNN都遵循着下面的结构:对于每一个输入 x x x,DCNN将会通过 l l l ϕ i , i ∈ 1 ⋯ l \phi_i, i\in1 \cdots l ϕi,i1l。较低的层为计算层(例如resnet中的resblock)。使用 Φ F N = σ ( ϕ l ) ∘ … σ ( ϕ 2 ) ∘ σ ( ϕ 1 ) \Phi_{F_N}=\sigma\left(\phi_l\right) \circ \ldots \sigma\left(\phi_2\right) \circ \sigma\left(\phi_1\right) ΦFN=σ(ϕl)σ(ϕ2)σ(ϕ1)表示整个网络 N N N中的卷积层,同样,定义 Φ C N = f c ∘ … σ ( f 2 ) ∘ σ ( f 1 ) \Phi_{C_N}=f_c \circ \ldots \sigma\left(f_2\right) \circ \sigma\left(f_1\right) ΦCN=fcσ(f2)σ(f1)表示网络中分类部分,由一系列的全连接构成。

2.1 Adapting Representations

假设我们有两个任务 T 1 T_1 T1 T 2 T_2 T2,我们需要学习一个基网络 N N N去解决任务 T 1 T_1 T1。假设在第二个任务上也依旧保持着和原网络一样的架构,只是参数不同。我们只需要增加一个控制模块来选择每个任务的网络。其中,每个控制模块使用现存的参数创建出一个新的卷积filters去处理新的任务:对于每一个卷积层 ϕ l \phi_l ϕl,我们使用 F l ∈ R C o × C i × k × k F_l \in \mathcal{R}^{C_o \times C_i \times k \times k} FlRCo×Ci×k×k表示为当前层的filters,其中 C o C_o Co表示为输出的特征大小, C i C_i Ci表示为输入的特征大小, k × k k\times k k×k表示为卷积核的大小,我们使用 b l ∈ R C b_l\in\mathcal{R}^C blRC表示为bias。定义 F l ∈ R C o × D F_l\in\mathcal{R}^{C_o \times D} FlRCo×D为filters的扁平版本(flatten),其中 D = C i ⋅ k ⋅ k D=C_i \cdot k \cdot k D=Cikk,我们使用 F l ∈ R C o × C i × k × k F_l \in \mathcal{R}^{C_o \times C_i \times k \times k} FlRCo×Ci×k×k表示 F i F_i Fi中的一个filter,如下:
f 1 = ( f 11 1 ⋯ f 1 k 1 ⋱ f k k 1 ) , ⋯   , f i = ( f 11 i ⋯ f 1 k i ⋱ f k k i ) f^1=\left(\begin{array}{ccc}f_{11}^1 & \cdots & f_{1 k}^1 \\ & \ddots & \\ & & f_{k k}^1\end{array}\right), \cdots, f^i=\left(\begin{array}{ccc}f_{11}^i & \cdots & f_{1 k}^i \\ & \ddots & \\ & & f_{k k}^i\end{array}\right) f1= f111f1k1fkk1 ,,fi= f11if1kifkki
那么flattened的版本则是:
f ~ = ( f 11 1 , ⋯   , f k k 1 , ⋯   , ⋯ f 11 i , ⋯   , f k k i ) ∈ R D \tilde{f}=\left(f_{11}^1, \cdots, f_{k k}^1, \cdots, \cdots f_{11}^i, \cdots, f_{k k}^i\right) \in \mathcal{R}^{\mathcal{D}} f~=(f111,,fkk1,,f11i,,fkki)RD
那么对于一个filters,其生成由下面构成:
F ~ l a = W l ⋅ F ~ l \tilde{F}_l^a=W_l \cdot \tilde{F}_l F~la=WlF~l
其中 W l ∈ R C o × C o W_l \in \mathcal{R}^{C_o \times C_o} WlRCo×Co表示一个权重矩阵,根据这个就可以把flattened的filters投放到另一个空间。"Unflattening"将一个向量 f ~ \tilde{f} f~转换为其对应的tensor f l ∈ R C i × k × k f_l \in \mathcal{R}^{C_i \times k \times k} flRCi×k×k,那么同样可以把 F ~ l a \tilde{F}_l^a F~la转为对应的tensor。使用 X ⊗ Y X \otimes Y XY表示下面过程:flatten Y Y Y,使用矩阵乘 X X X,再unflatten,可以写为:
F l a = W l ⊗ F l F_l^a=W_l \otimes F_l Fla=WlFl
如果卷积层中包括bias,那么我们需要重新创建一个新的向量 b l a b^a_l bla。对于第 l l l ϕ l \phi_l ϕl来说是按照下面的方法进行计算:给定一个可选择参数 α ∈ { 0 , 1 } \alpha \in \{0,1\} α{0,1},我们按照如下方式进行计算:
x l + 1 = [ α ( W l ⊗ F l ) + ( 1 − α ) F l ] ∗ x l + α b l a + ( 1 − α ) b l x_{l+1}=\left[\alpha\left(W_l \otimes F_l\right)+(1-\alpha) F_l\right] * x_l+\alpha b_l^a+(1-\alpha) b_l xl+1=[α(WlFl)+(1α)Fl]xl+αbla+(1α)bl
这样就能保证每个任务能够选择自己的网络参数。为了能够使得网络处理好多个任务,我们将 α \alpha α变成一个向量 α ∈ { 0 , 1 } n \alpha \in \{0,1\}^n α{0,1}n,其中 n n n表示为共有多少个任务,这样的话如果 α j = 1 \alpha_j=1 αj=1那么我们执行第 j j j个任务否则执行第0个任务。因此,可以将上述的写法转换为:
x l + 1 = ∑ i = 1 n α i ( F l a i ∗ x l + b l i ) x_{l+1}=\sum_{i=1}^n \alpha_i\left(F_l^{a_i} * x_l+b_l^i\right) xl+1=i=1nαi(Flaixl+bli)
下面展示了具体的过程:
在这里插入图片描述
在这里插入图片描述

三. 代码解析

论文代码点这里
在这里插入图片描述
这里是控制器对应的代码,传入conv是基网络的参数,然后根据w创建一个新的参数权重,然后我们对其进行flatten操作,之后我们创建映射变量: L L L。(注意,此处要先把conv的梯度进行冻结,防止被改变,如果是直接对conv进行训练的话,再手动打开梯度)。下面我们看看具体的前向传播代码:
在这里插入图片描述
红色框就是上述的使用 α \alpha α进行调控的任务选择模型。
本篇介绍就到此为止,其实作者对这个文章又进行了一些改进,基本思路还是利用原参数进行考虑,这里大家可以自行看一下论文,点这里

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值