写这篇博客前,我又重新阅读了之前的博客( 利用突触智能实现连续学习|从原理到代码解析(人生好难呀!))的内容,以及文后的那段笔(tu)记(cao)。一直没有放弃关注增量式学习的近况,比如:最近ICLR2021的大会论文公布,我迫不及待的在主页搜索栏中键入incremental learning(检索结果为0篇),continual learning(检索结果为9篇)。文献不算多,准备都粗略过一下,然后挑一些自己感觉不错的精读。但是,这篇博客暂且不涉及ICLR2021,而是关于CVPR2019的一篇论文《Task-Free Continual Learning》。《Task-Free Continual Learning》作为ICLR2021中一篇名为《Graph-Based Continual Learning》的论文的参考文献,并且名字中带有《Graph-Based Continual Learning》中大篇幅表述的task-free。此处的task-free正好回应了我在博客( 利用突触智能实现连续学习|从原理到代码解析(人生好难呀!))未尾的那段文字。仔细比对,《Task-Free Continual Learning》比我写( 利用突触智能实现连续学习|从原理到代码解析(人生好难呀!))的时间要早,所以啊,尴尬的还是我自己,阅读的文献还不够多、不够全面。如果,早点看到《Task-Free Continual Learning》,或许不会有当时那种义愤,而是可以用一种更加心平气和的语气道出来。以后,我要时刻对科研怀着敬仰的态度!

本篇博客将要介绍的论文《Task-Free Continual Learning》由来自比利时鲁汶大学的Rahaf Aljundi等人发表于NeurIPS2019。另外,在之后两篇博客里会对Rahaf Aljundi等人在同一看发表的关于continual learning的论文进行阅读,三篇论文列出如下:

  • Task-Free Continual Learning [CVPR2019]
  • Online continual learning with maximal interfered retrieval [NeurIPS2019]
  • Gradient based sample selection for online continual learning [NeurIPS2019]

一、论文背景

首先,可以阅读博客:深度学习之灾难性遗忘问题概览深度学习应用在持续学习任务时表现出来的灾难性遗忘问题。

其次,可以阅读博客:PRN(20200908):Frosting Weights for Better Continual Training概览当前解决深度学习灾难性遗忘的三种主要途径,分别为:1)参数正则化;2)模型集成;3)Memory Consolidation。

下面引一下本人在博客( 利用突触智能实现连续学习|从原理到代码解析(人生好难呀!))未尾的那段文字:

下面是《Task-Free Continual Learning》中摘要前面部分,几句话就把我对当前continual learning的自嗨状态给描绘的生动又形象:当前的continual learning常假设,一次一个任务,任务与任务之间有一个硬边界,也即假定学习每个任务前,已经获取到了该任务完备的数据集,每次利用与某一任务相关的完备数据集训练该任务,训练完成后继续训练下一个任务,对于每个任务的训练并不是在线的,而是离线的。实际应用很少是像这种task-based continual learning的设定。

如果觉得不好理解,可以想一下我们人类自身,我们学习骑车,又要学习英语,没有谁规定你一定得先学会骑车,然后才能去学习英语,我们一般一天会花一点时间学习骑车,同时也会花一时间学习英语,并且是利用相当长的时间,边(骑/用)边熟练。

我原本以为continual learning就是代表这类学习,现在看到许多发表的论文,目标却不是这个,现在只能通过加定语task-free或task-based来区别了(无奈)。就像人工神经网络的初衷是为了模拟或揭示人脑神经网络的工作原理一样,解决深度学习灾难性遗忘的初衷是希望深度学习能够赋予智能体像人类一样终生学习的能力。大家有空去optimass/continual_learning_papers阅读那几篇经典的文献。有一大批科学家或科研人员致力于研究出像人类一样学习能力的系统。除了被用烂了的可持续学习,还有已经被用旧了的增量式学习。我仍然坚信开拓者是视野开阔的,只是后来者人数众多,势头过大,才让其失了本意,逼迫它加上一些累赘的定语(例如,task-free,online)。可是,它原本就是它自己呀!

二、本文如何做到Task-free可持续学习

2.1 什么是task-free可持续学习

任务的增量(依次到来)不重要,重要的是样本的增量。属于于各任务的数据不被人为设定的任务硬边界隔断,在邻近的几个学习周期,样本可能来自任意任务。不假定数据是独立同分布的,可以是不断变化的分布。

以论文4.3. Monocular Collision Avoidance部分的实验场景为例:

上图显示的是四个走廊场景,从左到右分别标记为ABCD。它们之间以不同的纹理、形状、障碍物以及转弯相区别。

机器人依次在ABCD场景中以传统规划方法自监督产生样本学习通道行驶行为,数据是行驶时产生的,也就是说数据是在线获取的。当然,机器人也可以在A里学一会,然后跑到D里学一会,接着又到C里学,每个场景学的时间,学的时长都不一定相同。机器人必须利用最近获得的样本在线学习,不能存储所有的历史样本,不然就退化成了传统的深度学习,也就不是一个增量式学习任务,所以也就不存在灾难性遗忘的问题(深度学习的灾难性遗忘问题,都是在深度学习应用于增量式学习任务产生的)。

这样的一个设定,与task-based continual learning的区别立马显现。我们称这样的学习模式为task-free continual learning。

note: 最终实验为了说明算法解决灾难性遗忘的效果,让机器人按顺序依次学习ABCD,也即先在A中边行驶边学习,然后到B中,接着依次是C和D。然后,回过头来看,最终的模型对A、B、C、D的效果。评价的方式与task-based continual learning没有区别。重点是,这样设定更加符合实际应用场景中的学习系统

2.2 如何做到task-free可持续学习

对同作者论文|Memory Aware Synapses进行改进,并增加以下功能:

  • 什么时候更新参数的重要性权重
  • 利用什么样的数据更新该重要性权重
  • 怎样在每一学习步累积重要性权重

《Task-Free Continual Learning》、《Memory Aware Synapses: Learning what (not) to forget》和之前博客(利用突触智能实现连续学习|从原理到代码解析(人生好难呀!))中介绍的论文《Continual Learning Through Synaptic Intelligence》的关系如下:

2.2.1《Continual Learning Through Synaptic Intelligence》|ICML2017

《Continual Learning Through Synaptic Intelligence》|ICML2017提出突触智能的概念,并利用损失函数的梯度度量突触的重要性,按应用分属于task-based continual learning。

2.2.2《Memory Aware Synapses: Learning what (not) to forget》|ECCV2018

《Memory Aware Synapses: Learning what (not) to forget》|ECCV2018与突触智能方法非常相似,也是利用损失函数的梯度度量神经元的重要性,只是计算重要性的式子有些许区别,该论文将突触智能方法同样具备,但是没说明的好处放在了Contributions提了出来:可以利用无监督的数据来评价神经元的重要性,另外探讨了方法与Hebbian theory的关联。《Task-Free Continual Learning》|CVPR2019(个人观点:Rahaf Aljundi此时刚进入continual learning这个领域,因此,这篇论文参照别人方法属性较大,自己核心的观点相对较少

在文中有如下脚注:在卷积层,参数被多个神经元共享。不失一般性,本文方法只作用全连接层。

2.2.3《Task-Free Continual Learning》|CVPR2019

《Task-Free Continual Learning》|CVPR2019继续在突触智能方法的基础上改进,具体地,将原本task-based的突触智能方法拓展到task-free continual learning,同时维护一个固定大小的replay memory存储重要(hard learn)的历史样本;1)replay memory与新样本混合一起训练,让网络不断回忆历史知识;2)改进的突触权重避免与历史知识相关的重要神经元的参数被修改(太多)。

三、方法介绍(三个问题的答案)

3.1 什么时候更新重要性权重

下图显示了一个普通的训练过程中记录的每步损失。文中给出:

1) 损失减少,意味着模型学到了新知识;
2) 损失平稳时,学习趋于平稳;
3) 损失增加,说明系统遇到包含新知识的样本。

其中,损失平稳期间是更新神经元重要性权重的时机,使得系统一旦遇到新的需要学习的知识,模型会被鼓励保存这些已经学到的知识。

文中利用滑动窗口探测平坦区间,也即当窗口内的损失值的均值与方差都低于阈值时,触发重要性权重的更新;当窗口损失值均值高于前一个平坦窗口损失值的85%时(公式表示为:μ(Lwin)>μLold+σLold\mu(L_{win})>\mu^{old}_{L}+\sigma^{old}_{L}μ(Lwin​)>μLold​+σLold​),说明检测峰,也即说明遇到新的需要被学习的知识。

3.2 怎么选择重要(hard learn)的样本

文中设置少量重要(hard learn)样本的缓冲区主要有三个目的:

1)平均历史重要样本与当前样本的损失,使损失更加准确的反应知识的学习过程信息;
2)难样本中有一些重要的历史样本,使网络不断回忆历史知识,减轻灾难性遗忘问题;
3)难样本具有较大的损失值,保留它等于给未收敛的样本更多的训练机会,提升学习性能

文中方法比对当前缓冲区的难样本与新样本的损失,并留下它们中损失最大的前N个作为新的难样本集。

作者在 Online continual learning with maximal interfered retrieval [NeurIPS2019]与Gradient based sample selection for online continual learning [NeurIPS2019]中介绍了更加具体的方法。

3.3 如何在每一学习步累积重要性权重

单纯的累加会导致梯度爆炸。文中利用累积平均的方式来避免该问题(Ωnew=(Ωold+Ωcurrent)/2\Omega_{new}=(\Omega_{old}+\Omega_{current})/2Ωnew​=(Ωold​+Ωcurrent​)/2),此外,也可在历史权重上添加一个衰减因子(Ωnew=(αΩold+Ωcurrent)/2\Omega_{new}=(\alpha\Omega_{old}+\Omega_{current})/2Ωnew​=(αΩold​+Ωcurrent​)/2, α∈[0,1]\alpha\in [0, 1]α∈[0,1]),使的较老的知识得以被新知识替换。

四、实验

4.1 单目避障实验

机器人依次在下图所示的四个环境中自监督的学习通道行驶行为,自监督信号由传统规划方法得到,场景学习顺序从左至右:

说实话,没太看明白实验数据,没有看到懂蓝线与橙线走势怎么和灾难性遗忘相关了,再说两条线走势好像,没有很大区别呀!

4.2 回形真实世界实验

第二个实验算是清楚很多了,实验环境为作者在她实验室搭建的一个简单的圆形场地(呈回字形)。这个任务为单任务上的持续学习,非常的不要紧。下面右图显示,文中方法比naive的在线学习方法更快的收敛。

五、总结

这篇论文根据损失函数的波动信息来确定模型的状态,从而打破任务之间的硬分界,实现task-free continual learning。真的很惊讶作者是怎么想到的。除了惊讶外,我也对深度神经网络,机器学习有新的认识。以后,也会有意去发现,如何利用训练过程的副信息来提升学习,来帮助学习,来解决学习时出现的各种问题。

作者在 Online continual learning with maximal interfered retrieval [NeurIPS2019]与Gradient based sample selection for online continual learning [NeurIPS2019]中介绍了更其它两个选择重要(hard learn)样本的方法,分别是利用未来参数改变后的样本的损失值大小以及各样本损失梯度的余弦值。个人觉得也是很有意思的解决灾难性遗忘问题的工作,之后的博客会介绍。


by windSeS 2021.4.22

致谢论文阅读:Task-Free Continual Learning,让我对论文的重点有个大概的了解。

PRN(20210421):Task-Free Continual Learning相关推荐

  1. PRN(20200908):Frosting Weights for Better Continual Training

    Zhu, Xiaofeng, et al. "Frosting Weights for Better Continual Training." 2019 18th IEEE Int ...

  2. MIML(一):Fast Multi-Instance Multi-label learning

    MIML(一):Fast Multi-Instance Multi-label learning 2014 AAAI 有代码 MIMLfast MIML(一):Fast Multi-Instance ...

  3. PRN(20210426):GRAPH-BASED CONTINUAL LEARNING(ICLR2021)

    @article{tang2021graph-based,title={Graph-Based Continual Learning},author={Tang, Binh and Matteson, ...

  4. PRN(20210426):Online Continual Learning with Maximally Interfered Retrieval

    基于回放单元的方法被大量研究证明能够有效缓解深度学习灾难性遗忘问题.基于回放单元方法的有效性取决于选择存储的样本是否有助于帮助避免遗忘.本篇介绍一种新方法,它通过可以预见的参数更新,来判断样本损失值受 ...

  5. PRN(20201231):驾驶人驾驶决策机制遵循最小作用量原理

    王建强, 郑讯佳, 黄荷叶. 驾驶人驾驶决策机制遵循最小作用量原理[J]. 中国公路学报, 2020, v.33;No.200(04):159-172. 观点: 为提升智能汽车的自主决策能力,使其能够 ...

  6. PRN(20200816):A Hierarchical Deep Convolutional Neural Network for Incremental Learning [Tree-CNN]

    Roy D , Panda P , Roy K . Tree-CNN: A Hierarchical Deep Convolutional Neural Network for Incremental ...

  7. 读论文,第二天(2):Deep inertial poser: learning to reconstruct human pose from sparse inertial

    Deep inertial poser: learning to reconstruct human pose from sparse inertial measurements in real ti ...

  8. 360度相机(全景图片)中的卷积(二):SphereNet: Spherical Representations

    360度相机(全景图片)中的卷积(一):Equirectangular Convolutions 360度相机(全景图片)中的卷积(二):SphereNet: Spherical Representa ...

  9. 机器学习主要类型(三):半监督学习

    机器学习主要类型(三):半监督学习 Semi-Supervised Learning 让学习器不依赖外界交互.自动地利用未标记样本来提升学习性能 未标记样本虽未直接包含标记信息,但若它们与有标记样本是 ...

最新文章

  1. Java多线程练习--取钱
  2. The IEEE 802.15.4 MAC layer
  3. leetcode-71-简化路径
  4. Java语言学习概述
  5. isset、empty、var==null、is_null、var===null详细理解
  6. 如何在iPhone或Mac上自定义共享菜单?
  7. PHPeclipse操作svn
  8. 程序员高效出书避坑和实践指南
  9. 快速入门Flink (7) —— 小白都喜欢看的Flink流处理之DataSources和DataSinks
  10. 计算机内打不开小米路由器,win7系统无法访问小米路由器的解决方法
  11. 常用域名管理后台网址
  12. HTML Typo.css 中文网页重设与排版
  13. Filament介绍
  14. [Codewar练习-java]Snail Sort(蜗牛型排序)
  15. 受用一生的高效 PyCharm 使用技巧(三)
  16. 机器学习必备算法之(一)逻辑回归(logistics regression)及Python实现
  17. 在Hbulider中点击事件会出现两次
  18. 传统蒙文字体_蒙古文
  19. OSError: [WinError 126] 找不到指定的模块。
  20. Linux 虚拟机登录方法

热门文章

  1. OpenGL三维图形编程技术(转)
  2. 2020-09-13 滴滴-2021校招在线笔试-DE数据开发试卷
  3. 电脑任务栏卡死,解决办法
  4. python爬虫爬取淘宝网页
  5. Markdown合并表格单元格
  6. 五分钟GO、KEGG和COG注释和富集分析
  7. 农民伯伯android,Android3.1r1API中文文档——ImageView(cnmahj+农民伯伯).doc.doc
  8. poj 2536 Gopher II
  9. 程序员天天写代码,如何拓展社交圈?
  10. ToLua 入门05_AccessingLuaVariables