E2-AEN: End-to-End Incremental Learning with Adaptively Expandable Network
前段时间忙着本科毕业工作还有投稿的工作耽搁了,现在开始恢复更新啦~
今天看的一篇是基于动态架构的持续学习论文,论文地址点这里。
一. 介绍
持续学习致力于以增量方式学习新的数据或任务,并且不会出现灾难性遗忘。最早的方法考虑了机遇正则化的策略(如EWC),其通过考虑网络中的重要权重来保存旧知识,但这种方法会使得这些权重无法处理好新的任务。第二种方法是基于记忆重放(GEM),通过保存一部分旧的样再之后配合新样本一起训练,然而如果后续任务的不相关,则模型会陷入stability-plasticity(稳定性-可塑性)问题。最近,参数隔离(如FedWEIT使用了掩码来隔离参数)成为增量学习的新趋势,因为不同的任务可能需要不同的参数或网络结构,从而避免任务之间的干扰。然而,如果要处理大量任务,主干模型的容量往往会饱和,从而限制了增量框架的丰富组合性。
还有一种持续学习的方法称为动态的模型架构,其通过为新任务增加新的分支来进行扩展。早期的动态架构采取固定(线性)增加方式,但这样会增加内存和计算的压力,如下图的(a)。为了改善这样的情况,会对动态的模型进行修剪,如图(b)所示,但这也就导致了其他的问题,例如为了寻找到更好的结构却增大了搜索空间。此外,它们都将学习过程分为多个阶段:首先定义每一个任务的网络进行训练。然后,重新训练策略严重依赖于额外的超参数,导致过多的计算成本。这些方法很难应用于资源受限的场景,如移动设备或视频监控摄像机。
因此一个好的动态架构满足三点:(1) stability-plasticity(稳定性-可塑性)(2) 轻量级的参数规模 (3)较少的额外成本。针对于此本文提出了一种端到端可训练的自适应可扩展网络(E2-AEN),以实现全局优化,如图©。该方法由一系列AES(自适应扩展架构)组成,简单来说就是每个AES能够跟新任务生成新的架构去应对,并且采用高效的方式去实现这个架构。
二.方法
2.1 问题表述
在持续学习中,一系列任务{task1,...,taskN}\{task_1,...,task_N\}{task1,...,taskN}逐渐到来。对于每一个任务,数据集可以表示为Di={xj,yj}j=1NiD_i=\{x_j,y_j\}^{N_i}_{j=1}Di={xj,yj}j=1Ni,xjx_jxj表示为原始的数据特征,yjy_jyj表示每一个数据特征对应的标签,NiN_iNi表示在第iii个任务上的数据规模。为了能够不断地学习这些任务,我们的目标可以定义为:yi=Φ(xi;Θs,Θit)y_i=\Phi(x_i;\Theta^s,\Theta^t_i)yi=Φ(xi;Θs,Θit),其中Θs\Theta^sΘs表示为任务共享参数,Θit\Theta^t_iΘit表示为特定任务参数。因此目标函数可以表示为:
L=∑i=1NLi(Θit;Θs,Di)(1)\mathcal{L}=\sum^N_{i=1}\mathcal{L}_i(\Theta^t_i;\Theta^s,D_i) \tag{1}L=i=1∑NLi(Θit;Θs,Di)(1)
其中Li\mathcal{L}_iLi表示为第iii个任务的损失函数。
2.2 自适应扩展机制
本文提出的端到端可训练自适应扩展网络(E2-AEN)可以取代基于基本自适应扩展机制的阶段式优化。它是通过一系列称为自适应可扩展结构(AES)的轻量级模块与基础网络一起实现的,对应于下图所示的每个特定任务。AES有两种可能的状态,活动和非活动。当状态处于活动状态时,功能适配器将冻结主干,以适应新任务,否则将跳过特征适配器,从而节省一些不必要的计算和参数,这是自适应和高效的。
因此给定第jjj个卷积模块HjH_jHj,那么在第iii个任务上的第jjj个使用AES的卷积模块的前向传播可以表示为:
Fi,j=Hj+Ai,j(Hj)(2)F_{i,j}=H_j+\mathcal{A}_{i,j}(H_j) \tag{2}Fi,j=Hj+Ai,j(Hj)(2)
其中Ai,j\mathcal{A}_{i,j}Ai,j是一个可微分的AES模块。
提出的AES有两个关键组件:设计的特征适配器和基于自适应的剪枝策略,如下图所示。功能强大的特征适配器,其操作表示为D(⋅)\mathcal{D}(·)D(⋅),负责将先前学习的表示扩展到新概念空间,并有效避免任务干扰。它使得主干参数被冻结,因此在之前的任务中不会出现遗忘现象。基于自适应门的修剪策略(gate-based)致力于减少特征适配器带来的冗余参数,使框架更高效,其操作表示为G(⋅)\mathcal{G}(·)G(⋅)。得益于基于门的修剪策略(gate-based),AES能够确定是否需要在某个卷积层中执行功能适配器,还是可以跳过它,因此(2)可以变为:
Fi,j=Hj+Gi,j(Di,j(Hj))⋅Di,j(Hj)(2)F_{i,j}=H_j+\mathcal{G}_{i,j}(\mathcal{D}_{i,j}(H_j))\cdot\mathcal{D}_{i,j}(H_j) \tag{2}Fi,j=Hj+Gi,j(Di,j(Hj))⋅Di,j(Hj)(2)
其中G(⋅)∈{0,1}\mathcal{G}(·) \in\{0,1\}G(⋅)∈{0,1}。
- (1) 特征适配器: 如上面所述,特征适配器将原始的输出扩展到新的输出空间,表示为:
Ei,j=Hj+Di,j(Hj)=Hj+σ(Θi,jt,3⊗σ(Θi,jt,2⊗σ(Θi,jt,1⊗Hj)))(3)\begin{aligned} E_{i,j} &=H_j+\mathcal{D}_{i,j}(H_j) \\ &=H_j + \sigma(\Theta^{t,3}_{i,j}\ \otimes\ \sigma(\Theta^{t,2}_{i,j}\ \otimes\ \sigma(\Theta^{t,1}_{i,j}\ \otimes\ H_j))) \end{aligned} \tag{3} Ei,j=Hj+Di,j(Hj)=Hj+σ(Θi,jt,3 ⊗ σ(Θi,jt,2 ⊗ σ(Θi,jt,1 ⊗ Hj)))(3)
如果HjH_jHj的通道大小表示为ccc,则Θi,jt,1∈Rc∗c3\Theta^{t,1}_{i,j} \in \R^{c*\frac{c}{3}}Θi,jt,1∈Rc∗3c,Θi,jt,2∈Rc3∗c6\Theta^{t,2}_{i,j} \in \R^{\frac{c}{3}*\frac{c}{6}}Θi,jt,2∈R3c∗6c,Θi,jt,3∈Rc6∗c\Theta^{t,3}_{i,j} \in \R^{\frac{c}{6}*c}Θi,jt,3∈R6c∗c。σ\sigmaσ表示为RELU函数,⊗\otimes⊗表示为卷积操作。Θi,jt,1\Theta^{t,1}_{i,j}Θi,jt,1和Θi,jt,3\Theta^{t,3}_{i,j}Θi,jt,3的kernel大小都为1x1,Θi,jt,2\Theta^{t,2}_{i,j}Θi,jt,2为3x3。注意,每次卷积之后都需要进行BathNormalization。 - (2) 自适应的基于门的修剪策略: 在前向传播过程中,基于门的修剪策略通过全局平均池学习理解特征适配器的特征,以捕获卷积特征中的丰富信息,同时保持计算效率。之后连接上两个带RELU激活函数的全连接层。为了能够控制每一个AES块的选取,采用了二进制的方式进行判断。然而这就导致了函数存在不可微分的现象,因此使用Gumbel-softmax进行处理。具体来说,Gumbel-Max 将我们的概率分布vi,jv_{i,j}vi,j转换为如下:
zi,j=arg maxk∈{0,1}[logvi,j(k)+gi,j](4)z_{i,j}=\argmax_{k\in\{0,1\}}[log\ v_{i,j}(k)\ +\ g_{i,j}] \tag{4}zi,j=k∈{0,1}argmax[log vi,j(k) + gi,j](4)
其中kkk表示门的选择,0表示不激活1表示激活。vi,j(k)v_{i,j}(k)vi,j(k)表示激活的概率组合,也就是[αi,j,1−αi,j][\alpha_{i,j},1-\alpha_{i,j}][αi,j,1−αi,j],gi,jg_{i,j}gi,j表示为一个Gumbel分布。(这里其实大致意思还是softmax,只是为了避免不可微分的情况,在softmax上增加了一个特殊的分布,具体可以搜索一下不是很复杂,就不解释了)。 - (3)稀疏-激活 正则化:为了能使得整个网络在端到端都能适应,本文在损失函数上进行了优化。
稀疏约束: 为了减少AES中的冗余参数,设定了一个目标函数:
Lsparse=∑j=1L∑k=1∣Ωj∣(θj,k)2(5)\mathcal{L}_{sparse}=\sum_{j=1}^L \sqrt{\sum_{k=1}^{|\Omega_j|}(\theta_{j,k})^2} \tag{5}Lsparse=j=1∑Lk=1∑∣Ωj∣(θj,k)2(5)
其中LLL表示在第iii个任务的特征适配器的个数,Ωj={Θi,jt,1,Θi,jt,2,Θi,jt,3}\Omega_j=\{\Theta^{t,1}_{i,j},\Theta^{t,2}_{i,j},\Theta^{t,3}_{i,j}\}Ωj={Θi,jt,1,Θi,jt,2,Θi,jt,3}。
激活约束: 基于门的剪枝策略根据新的自适应特征的复杂性来确定每个特征适配器对某一层是否是必需的,即当其对应的特征适配器的稀疏度很小时,自适应特征就会很简单,因此对该特征适配器的剪枝实际上不会带来很大的性能下降。换句话说,当特性适配器非常稀疏时,(3)中的门Gi,j\mathcal{G}_{i,j}Gi,j应该被禁用,反之亦然。因此第jjj层的稀疏性定义为有效权重的比例:
Rjs=P[∣θj,k∣≥σ],k∈1,2,...,∣Ωj∣(6)\mathcal{R}_j^s=\mathbb{P}[|\theta_{j,k}|\geq \sigma],k\in 1,2,...,|\Omega_j| \tag{6}Rjs=P[∣θj,k∣≥σ],k∈1,2,...,∣Ωj∣(6)
其中P[.]\mathbb{P}[.]P[.]表示为在Ωj\Omega_jΩj中权值大于σ\sigmaσ的比例。接下来,我们需要定义另一个损失块称为激活占比:
Rja=∑k=1∣B∣Gi,jk(Di,j(Hjk))∣B∣(7)\mathcal{R}^a_j=\frac{\sum_{k=1}^{|B|}\mathcal{G}_{i,j}^k(D_{i,j}(H_{j}^k))}{|B|} \tag{7}Rja=∣B∣∑k=1∣B∣Gi,jk(Di,j(Hjk))(7)
其中∣B∣|B|∣B∣表示一个batch的数目。因此,激活正则化约束可以表示为:
Lactive=1L∑j=1L∣∣Rjs−Rja∣∣22(8)\mathcal{L}_{active}=\frac{1}{L}\sum_{j=1}^L||\mathcal{R}_j^s-\mathcal{R}_j^a||^2_2 \tag{8}Lactive=L1j=1∑L∣∣Rjs−Rja∣∣22(8)
因此本文的损失函数可以描述为:
Li=Lce+λsLsparse+λaLactive(10)\mathcal{L}_i=\mathcal{L}_{ce}+\lambda_s \mathcal{L}_{sparse}+\lambda_a\mathcal{L}_{active} \tag{10}Li=Lce+λsLsparse+λaLactive(10)
三. 方法的一些理解
在看论文中发现作者对很多地方都添加了东西,为了方便理解我这里简单的说明一下。首先本文是基于动态架构的持续学习,因此每一个任务到来时都会有生成新的空间给他训练,在训练过程中作者设计了一个门的结构,也就是不是每次都添加所有的层(这里所有的层指的是所有的CNN)。因此现在就有两个问题:一是如何添加层,二是如何控制每个任务选择不同的层。首先第一个问题,作者在每一个CNN上连接了一个特殊的卷积块,基本的卷积块加上这一部分形成了新的空间——该任务的特征空间;第二问题则是会对添加的这一部分转换成一个0或1的值,经过转换后来确定是否进行激活。上述两个问题分别对应于特质适配器和自适应门修剪。为了进一步缩小使用量,作者在损失函数上添加了其余的东西。首先作者说明可以对特征适配器上的参数进行修剪,这里就是尽量使得整个参数稀疏,因此损失定义如(5)所示。紧接着,既然每一个任务适配器的参数稀疏度都不一样,那么就可以根据稀疏度来决定是否激活(也就是越稀疏越不希望被激活),因此设定了第二个损失函数,可以发现它包括两部分:一个是判断这个参数的稀疏度,另一个是在使用自适应门修剪时具体数据的激活情况,尽量让其相等。举个例子:总共5张图片,假如在某一个块中我们的稀疏度为0.4的话,而在这个快却有4张照片被激活,激活概率为4/5=0.8,表明此时我们的稀疏度特别高,不应该能激活那么多,所以尽量使其两个值相等。作者最后还说了一些具体训练推理的东西,由于没有找到源码就不进行说明了,等我找到了我就配合源代码进行解析。
E2-AEN: End-to-End Incremental Learning with Adaptively Expandable Network相关推荐
- 论文浅尝 | Dynamic Weighted Majority for Incremental Learning
Yang Lu , Yiu-ming Cheung , Yuan Yan Tang. Dynamic Weighted Majority for Incremental Learning ofImba ...
- [论文阅读] Large Scale Incremental Learning
论文地址:https://openaccess.thecvf.com/content_CVPR_2019/html/Wu_Large_Scale_Incremental_Learning_CVPR_2 ...
- 机器学习分支:active learning、incremental learning、online machine learning
0. incremental learning 既有训练好的模型可能在新生成的数据上产生预测的偏差,可能是由于数据分布发生变化,这即为 concept drift,此时需要在这批新数据集上继续训练模型 ...
- 【论文总结】Incremental Learning of Object Detectors without Catastrophic Forgetting(附翻译)
Incremental Learning of Object Detectors without Catastrophic Forgetting 无灾难性遗忘的增量学习目标检测器 论文地址:https ...
- Incremental Learning of Object Detectors without Catastrophic Forgetting详解
Incremental Learning of Object Detectors without Catastrophic Forgetting详解 最近由于项目的需要在研究incremental l ...
- 增量学习 (Incremental Learning)
语义分割中的增量学习 语义分割中的增量学习设置为:在第t个step,学习新的类别ct,ct的label仅包含当前学习的ct类别,所以在学习时要保证既学习到当前类别知识,又不能灾难性遗忘之前的类别知识. ...
- incremental learning(增量学习是什么意思)
有时候真的从ai的理解反复横跳,从一个不明觉厉ai的概念的小白到初识neural network的科研菜鸡.概念上跟着吴恩达大佬刷新了一下,其实只是看上去nn和大脑神经相似而已,本质上就是让机器给我们 ...
- 增量学习/Incremental learning
文章目录 简介 其他值得一看的论文 小样本类增量学习 开源代码与资料 简介 类别增量学习(Class-Incremental Learning)的前世今生.开源工具包 下图展示了一个形象的例子, 训练 ...
- Cognitively-Inspired Model for Incremental Learning Using a Few Examples(附翻译)
Cognitively-Inspired Model for Incremental Learning Using a Few Examples 2021年1月27日,来自留校儿童的心酸科研,冲鸭 文 ...
- 什么是终身学习(Life Long Learning / Continuous Learning / Never Ending Learning / Incremental Learning)
文章目录 1. 概念区分 1.1 Life Long v.s. Multi task 1.2 Life Long v.s. Transfer 2. 终身学习 2.1 Selective Synapti ...
最新文章
- Oracle 数据库整理表碎片
- python dlib opencv人脸识别准确度_Python用opencv+dlib实现人脸识别
- centos 设置双网卡,双网关
- Spark 编程模型(上)
- RabbitMQ Fanout
- 玩转JavaScript正则表达式
- Setting property 'source' to 'org.eclipse.jst.jee.server
- spark:SparkUI界面
- pacs系统服务器配置,pacs系统服务器配置
- SQL注入学习part04:(结合sqli-libs学习:31-40关)
- Linux 内核参数:meminfo
- pdf怎么压缩文件到最小?pdf文件怎么变小内存?
- 日常一记(3)--禁止excel自动运行宏
- 团队作业-Beta冲刺(3)
- Android EventBus的实现原理
- 波特兰 计算机专业,波特兰州立大学工程学院和计算机科学专业水平考试流程2012017.pdf...
- Python3.7中,Django配置MySql数据库
- java街边熟食店卤菜网上商城系统springboot+vue
- 景点门票销售管理系统 基于 python实现gui界面 之 笔记
- 基于正点原子探索者使用STM32CubeMX+FreeRTOS+LWIP