机器学习(李宏毅)——Life-Long Learning

一、前言

本文章作为学习2023年《李宏毅机器学习课程》的笔记,感谢台湾大学李宏毅教授的课程,respect!!!

二、大纲

  1. 什么是Life-Long Learning?
  2. Catastrophic Forgetting(灾难性遗忘)
  3. Research Directions(研究方向)

三、Life-Long Learning?

何为Life-Long Learning?

Life-Long Learning 字面意思就是终身学习,AI也是需要终身学习,在环境中收集资料,重新再训练模型,让自己变得更加强大。举例如下:

说明:

Model根据Old task收集到Labelled Data,进行训练并部署在线上,经过一段时间使用收集到Feedback(如丰富了样本集),再次进行模型训练优化的过程,可以看做是Life-Long Learning。

区分:咋一听有点像迁移学习,但其实是有区别的,迁移学习我们其实关心的是目标任务的精度,不太关心迁移前原始任务的精度,而终身学习关注的则是both。

个人理解:

Life-Long Learning 适用在同一类任务下,如图像识别、QA问答,如果想让模型既做图像识别,又做QA问答,那就是多任务的问题了。而Life-Long Learning的目标是想让模型适应新的环境变化时候,还不能"忘本"。

举个例子

1、手写数字辨识

说明:

  1. 数据情况:有两堆数字 0 的图片,左边比较模糊(Task1),右边比较清晰(Task2);
  2. 模型:自搭一个深度3层,每层50个神经元的全连接神经网络;
  3. 训练Task1,分别测试在Task1和Task2上,Task1有90%准确率,Task2有96%准确率,这结果也是合理的,毕竟左模糊右清楚,右边高点正常。
  4. 拿步骤3的模型,再训练Task2,接着分别测试在Task1和Task2上,发现Task1的准确率下降了10%,Task2刚训练完,准确率高点是合理的。

那为啥会下降呢?模型难道它忘了它是学过Task1的?带着这个疑问继续往下看。

进一步试试把Task1和Task2的数据倒一块进行学习:

这么做确实可以让Task1和Task2都变好,但是以后难道每次遇到新情况都得把所有数据倒在一块重新跑过一次模型,那数据量只会越来越多,显然不是一个好的办法。

2、QA问题

同样的问题在QA任务上也是存在的,这里就不赘述。

以上的问题就叫做Catastrophic Forgetting(灾难性遗忘)。

四、Catastrophic Forgetting(灾难性遗忘)

上述第三章已引出什么是Catastrophic Forgetting,那有没有解决的办法呢?

  • 方法一:所有数据倒一块,重新训练一次?不妥,数据量只会越来越大,当然也是非常消耗计算资源。

  • 方法二:每种情况训练一种模型来应对?不妥,把所有模型存下来非常耗费存储空间,不同模型的经验难以互通有无。

那没有办法了吗?

有,那就是现在对于这个灾难性遗忘问题的解决方向。

五、Research Directions(研究方向)

课程中介绍了三种方法,比较完善的方法在于第一种:

  • Selective Synaptic Plasticity(选择性突触可塑性)
  • Additional Neural Resource Allocation(额外的神经资源分配)
  • Memory Reply(记忆回放)

在讲这三种解决方法时候,先说明下为什么会出现Catastrophic Forgetting

Why Catastrophic Forgetting?

举个例子说明:

说明:假设还是上面那个手写数字辨识的例子,简化一下假如模型就只有两个维度的参数 θ 1 \theta_1 θ1和 θ 2 \theta_2 θ2,上图是error face,颜色越深loss越小。

  • Task1训练: θ 0 \theta^0 θ0根据梯度下降算法往loss低的方向走,最终更新得到 θ b \theta^b θb;
  • Task2训练:拿着Task1的模型和训练好的参数进行Task2训练,同样进行gradient decent, θ b \theta^b θb最终跑到了 θ ∗ \theta^* θ∗,但是 θ ∗ \theta^* θ∗在Task1中的loss是高的,因此,这种情况下就会在Task1中表现不好。

那该怎么办?我们期望Task2更新参数时候能够考虑下Task1的梯度下降方向,使得 θ b \theta^b θb在Task2中进行参数更新能有个折中的方向。

1、Selective Synaptic Plasticity(选择性突触可塑性)

基本思想:还是以上述两个Task为例,Task1训练得到的模型里面肯定有一些参数是重要,还有一些参数是不重要的,Selective Synaptic Plasticity的思想就是要把重要的每个参数守卫住,别让它变化太多,这个守卫就是 b i b_i bi 。

说明:上图是直接解释每一项是什么,不再赘述。

那为什么公式是写成这样呢?

个人理解:整体结构写成 新损失函数 = 原损失函数 + 惩罚项,这种结构应该好理解,重点看这惩罚项,假设两种情况:

1、守卫 b i b_i bi很小,甚至可以是0。这种情况说明 θ i \theta_i θi不重要呀,你都没派重兵把守, θ i \theta_i θi爱咋滴咋滴,因为守卫 b i b_i bi已经把大格局定了,也就是不怎么会影响到新的loss函数,那 θ i \theta_i θi自由度高呀。

2、守卫 b i b_i bi很大,甚至可以是无穷。那要使新的损失函数较小,那 θ i \theta_i θi要和 θ i b \theta^b_i θib越接近越小,意思就是 θ i \theta_i θi你可别乱动,要是乱动的话loss肯定要变大的哦。

至于 b i b_i bi怎么设置,那就是需要手动来做调整,试出来。

其实,我们所做的就是在看上一个Task的梯度下降方向和当前Task的梯度下降方向会不会冲突!

有一个方法就是Gradient Episodic Memory (GEM),弊端就是需要记录上一个Task的梯度下降方向,需要额外耗费内存。

2、Additional Neural Resource Allocation(额外的神经资源分配)

  • Progressive Neural Networks
    基本思想:PNN 通过冻结旧任务的网络,并为新任务添加新网络模块,避免遗忘并提升新任务的学习效果。
  • PackNet
    和PNN有点反过来,开一个大网络,每一次激活一部分神经元。

3、Memory Reply(记忆回放)

通过存储和回放旧任务的数据,让模型在学习新任务时仍然能保持对旧任务的记忆。

后面两种方法,后面有碰到再深入研究吧~

相关推荐
没事学点编程小知识20 分钟前
Notion的AI布局:Notion Mail即将上线
人工智能·notion
zhz521426 分钟前
深入剖析Notion:在众多知识库软件中的独特优势与局限
人工智能·ai·知识图谱·ai写作·程序员创富
胖头鱼不吃鱼-27 分钟前
AI与.NET技术实操系列
人工智能·.net
MF_AI29 分钟前
颈椎X光数据集(cervical spine X-ray dataset)
图像处理·人工智能·深度学习·yolo·计算机视觉·spine
叶子20242237 分钟前
点云滤波方法:特点、作用及使用场景
人工智能·计算机视觉
☞黑心萝卜三条杠☜43 分钟前
CrossKD: Cross-Head Knowledge Distillation for Object Detection
人工智能·目标检测·目标跟踪
CS创新实验室1 小时前
《机器学习数学基础》补充资料:连续正态分布随机变量的熵
人工智能·机器学习·概率论·机器学习数学基础
幻想趾于现实1 小时前
VisionPro、VisionMaster 多模板匹配分类(大球刀、小球刀、尖刀、三角刀)
开发语言·图像处理·机器学习·visionmaster·visionpro
tzc_fly1 小时前
scBaseCamp:一个AI代理的可持续扩充的单细胞数据存储库
人工智能
江苏学蠡信息科技有限公司2 小时前
基于RKNN的嵌入式深度学习开发(2)
人工智能·深度学习