联合概率分布,熵与增量学习

最近几年,学术界开始兴起了一些持续学习,增量学习,终生学习的研究,这个概念本身也是想模仿人的学习过程,人类的学习能力是可以持续的,我们的知识也是一个逐渐积累的过程,但是反观现在的学习模型,从一个任务转移到另外一个任务的时候,新任务上会学习的很好,但是原来的任务就会忘得一干二净,这也是 AI 被人诟病的一个地方,过去是,现在也是,即使有大数据和深度学习加持,依然不能避免这些缺陷。

当我们更加深入的开始思考深度学习的本质时,发现所有的理论基础和几十年前其实是一样的,类似的增量学习的概念在很久之前,就已经提出过,那时候,还是经典的统计机器学习的时代,那时候的神经网络,几乎处在一个被遗忘的角落里,现在,我们有了更多的数据,更强大的算力,更复杂的数学模型,我们渴望着可以把很多年前未完成的梦想实现,可事实上,我们还是被困在统计学的框架里,难以突破。

无论是过去,还是现在,机器学习本质上还是做着数据拟合的事情,只是以前的数据少,现在的数据多,以前的算力弱,现在的算力强,以前都是有着完整数学解释的模型,现在我们造出了越来越多的黑箱模型,事情还是一样的事情,只是规模变了。

统计机器学习里,最重要的几个基本原理是概率分布,熵和决策,我们就用概率分布来看看目前我们研究的增量学习是想解决什么样的问题:

假设我们在数据集 D1\mathcal{D}_1D1​ 上有一个数据集合:{x,y}\{ \mathbf{x}, y \}{x,y},我们可以找到一个模型及一组参数,让其在该数据集上的联合概率分布最大:

max⁡∏i=1N1p(yi∣xi,θ)\max \prod_{i=1}^{N_1} p(y_i|\mathbf{x}_i, \theta)maxi=1∏N1​​p(yi​∣xi​,θ)

上面这个式子,就是一个常规的经典的分类问题,我们可以用很多不同的模型去拟合上面的数据分布,当然,我们现在用的最多的就是神经网络,或者说 CNN,到这一步的时候,相信大家都很熟悉解决这类问题的思路,不过,增量学习,就不是这么简单的问题,增量学习,就是在这个基础上,假设我们又有了一个新的数据集 D2\mathcal{D}_2D2​,那么我们希望模型能够同时在 D1,D2\mathcal{D}_1, \mathcal{D}_2D1​,D2​ 上都能学习的很好,也就是说,我们希望模型在 D1,D2\mathcal{D}_1, \mathcal{D}_2D1​,D2​ 上的联合概率分布能达到最大:

max⁡∏i=1N1p(yi∣xi,θ∗)∏j=1N2p(yj∣xj,θ∗)\max \prod_{i=1}^{N_1} p(y_i|\mathbf{x}_i, \theta^{*}) \prod_{j=1}^{N_2} p(y_j|\mathbf{x}_j, \theta ^{*})maxi=1∏N1​​p(yi​∣xi​,θ∗)j=1∏N2​​p(yj​∣xj​,θ∗)

一般来说,θ,θ∗\theta, \theta^{*}θ,θ∗ 应该是不同的参数了,为了能让模型同时学习 D1,D2\mathcal{D}_1, \mathcal{D}_2D1​,D2​ 的数据分布,很显然,最常规的方法就是把 D1,D2\mathcal{D}_1, \mathcal{D}_2D1​,D2​ 的数据放在一块训练,得到一组新的模型参数。

如果只是这样,那就不能称之为增量学习了,现在我们把条件换一下,假设我只能给你新增的数据 D2\mathcal{D}_2D2​,和原来的模型 θ\thetaθ,但是原来的数据 D1\mathcal{D}_1D1​ 看不到了,我们再去考虑上面的那个联合概率分布,就会发现,问题没有想得那么容易了。

这也是统计机器学习的问题所在,所见即所得,你要让模型拟合数据,那就得让模型见到数据,如果模型见到了新的数据,模型对原来数据的记忆就会被新的数据所覆盖,类似狗熊掰棒子,模型没有一个柔性的记忆功能,这就是增量学习所要探讨的问题:

  • 当数据持续出现的时候,模型是否能对过往的数据保持记忆功能,同时又能拟合新来的数据

我觉得这个问题,在现有的统计机器学习的原理上,是很难获得有效解决的,虽然我们一直想要模拟人类的智能,但是人类的智能本质上和现在的 AI 本质上是完全不同的两套东西,所以我们还是只能从数学的角度来考虑这些问题。基于此,还是有一些研究人员,提出了一些解决思路。

在介绍这些研究思路之前,我们再回顾一下这个问题,假设一开始,我们在 D1\mathcal{D}_1D1​ 上学习了一个模型,按照目前的主流方法来说,这个模型很大概率就是一个 CNN 模型,我们也假设学习了一个 CNN 模型,这个模型由模型结构 G1G_1G1​ 和模型参数 Θ1\Theta_1Θ1​ 共同表示,数据我们表示成,{x1,y1}\{ \mathbf{x}^{1}, y^{1} \}{x1,y1},上标 1 表示数据属于 D1\mathcal{D}_1D1​,后来又来了一批新的数据集 D2\mathcal{D}_2D2​, {x2,y2}\{ \mathbf{x}^{2}, y^{2} \}{x2,y2},如果我们只能见到 D2\mathcal{D}_2D2​,那我们如何得到一个新的模型 GGG 和模型参数 Θ\ThetaΘ,使得 GGG 和 Θ\ThetaΘ 对 D1,D2\mathcal{D}_1, \mathcal{D}_2D1​,D2​ 都拟合得很好呢,如果我们不管 D1\mathcal{D}_1D1​ 的数据,只是去拟合 D2\mathcal{D}_2D2​,那么毫无疑问,我们会和拟合 D1\mathcal{D}_1D1​ 一样,得到一个比较好的模型结构和模型参数,我们称为 G2,Θ2G_2, \Theta_2G2​,Θ2​,但是这个模型显然不能对 D1\mathcal{D}_1D1​ 有什么记忆功能,所以这让我们陷入两难,如果我们全力拟合新数据 D2D_2D2​, 那我们会遗忘掉原来的数据 D1D_1D1​,如果我们保持原来的模型结构 G1G_1G1​ 和模型参数 Θ1\Theta_1Θ1​,那我们可以记住原来的数据D1D_1D1​,但是我们就无法拟合新的数据D2D_2D2​,这就是增量学习里常说的稳定性(对历史数据的记忆)和可塑性(对新数据的拟合)悖论。

针对这个悖论,目前提出了一些解决思路,既然我们只有 G1,Θ1,D2G_1, \Theta_1, D_2G1​,Θ1​,D2​,很显然,我们只能从 G1,Θ1,D2G_1,\Theta_1,D_2G1​,Θ1​,D2​ 上去考虑。

第一种思路是对模型结构做文章,既然我又要记住D1D_1D1​,又要学习D2D_2D2​,那最直观的方式,就是把 G1,G2G_1, G_2G1​,G2​ 都用上,我们把 CNN 模型进行扩充,每来一个新的数据集,我们就对模型进行扩充,原来的模型结构保持不变,,或者底层的卷积层共享,后面的层分别对应不同的任务,很显然,这是一种头痛医头,脚痛医脚的策略, 这种方式,简单直观,但是很不经济,随着数据集的增加,模型也会变得越来越复杂。

第二种思路,就是利用知识蒸馏的策略,既然我有 G1,Θ1,D2G_1, \Theta_1, D_2G1​,Θ1​,D2​,那么我可以先用 G1,Θ1G_1, \Theta_1G1​,Θ1​ 对 D2D_2D2​ 预测一把,得到很多软标签,这些预测结果,就是原模型 G1,Θ1G_1, \Theta_1G1​,Θ1​ 对数据的响应,训练的时候,把蒸馏 loss 也考虑进来,这样可以让模型对历史数据有一定的记忆功能,同时又能去学习新的数据。

第三种思路,就是对模型参数 Θ1\Theta_1Θ1​ 进行约束,我们都知道,现在模型的复杂度,远远大于数据的规模,这样就会导致模型的参数会有很多的冗余,这种思路,就是利用参数的冗余,可以先用一些准则,把 Θ1\Theta_1Θ1​中对D1D_1D1​ 比较重要的部分保留起来,然后学习新数据的时候,只更新那些对历史数据不重要的参数,这样也能在记忆与更新之间找到某种平衡。

第四种思路,就是数据回顾,这种思路本质上,还是一种联合训练的思路,只是数据规模要小很多,既然学习的本质是数据拟合,那么就想办法去保留历史数据,所以有些方法,就是保留历史数据,然后和新数据一块训练。

实际应用的时候,会把几种思路结合起来考虑,目前学术界比较流行的就是蒸馏结合数据回顾的方式来做增量学习。

关于增量学习的一点总结思考相关推荐

  1. 函数的傅立叶展开掐死我吧_关于文章《傅里叶分析之掐死教程》的再一点小思考...

    封火星:关于文章<傅里叶分析之掐死教程>的一点小思考​zhuanlan.zhihu.com 以前的文章,从原理上更好的理解了原文中的一点,不过因为公式不是完全一样,从而有一个新问题不能解决 ...

  2. 《ODAY安全:软件漏洞分析技术》学习心得-----shellcode的一点小小的思考

    I will Make Impossible To I'm possible -----------LittleHann 看了2个多星期.终于把0DAY这本书给看完了,自己动手将书上的实验一个一个实现 ...

  3. vintage的一点深入思考

    vintage是资产质量分析中常用的指标,网上也有很多介绍vintage的含义.计算方法以及用法的文章.最近结合业务中的一个实际问题,对vintage曲线有了一些新的思考,所以写下来记录一下. 目录 ...

  4. 技术选型的一点个人思考

    1 前言 这个题目有点大.工作也有些年头,从开始入行的被动接受,什么流行就学什么:到有一些想法,会去思考为什么使用这种技术:再到主动去学习一些前沿框架. 从开始的不理解,事不关已高高挂起,不在其位不谋 ...

  5. 关于数据运营的一点小思考

    随着互联网行业的快速发展,其所带来的行业红利和流量红利基本上告别野蛮生长阶段,现代人越来越依赖互联网,看似市场大,但用户选择多,互联网产品淘汰得比刚开始更快.野蛮生长虽然发展快,但是伴随的弊端也随之浮 ...

  6. 每天一点产品思考(3):“稍后阅读”功能真的能有效解决碎片信息处理问题吗?...

    一.问题来源 有些产品上线了"稍后阅读"功能,用户把一段内容标记"稍后阅读",可实现碎片信息的收集,是成为处理信息的开始.但由于人们普遍的惰性,很多用户却抱着& ...

  7. 关于二进制的一点小思考

    1. 背景 在这次的公众号项目中,需要一个用户的小程序二维码,一开始想的是实时生成小程序二维码,后台问我行不行,隐约记得微信好像确实提供了这个功能,就答应下来了.一开始以为只需要access_toje ...

  8. 周志华教授:关于深度学习的一点思考!

    周志华,毕业于南京大学,欧洲科学院外籍院士,国家杰出青年基金获得者,现任南京大学人工智能学院院长.南京大学计算机软件新技术国家重点实验室常务副主任.机器学习与数据挖掘研究所 (LAMDA)所长.人工智 ...

  9. 周志华教授:关于深度学习的一点思考

      视学算法报道   来源:专知 [新智元导读]什么是深度学习?深度神经网络为什么要「深」?它成功背后的关键因素是什么?深度学习只能是深度神经网络吗?南京大学人工智能学院院长.计算机系主任周志华教授对 ...

最新文章

  1. LeetCode简单题之独一无二的出现次数
  2. 去IOE:去掉“IE”就Ok?
  3. 浅谈游戏自动寻路A*算法
  4. 【Android开发】用户界面设计-开发自定义的View
  5. centos7的systemd命令对比
  6. RHEL 8 - 用podman compose替代docker compose运行Ansible Tower
  7. Spring-jdbc-JdbcTemplate
  8. CDH hive的安装
  9. h3c交换机堆叠(IRF)配置三步完成
  10. Hexo框架下用NexT(v7.0+)主题美化博客
  11. 港股通不得不了解的汇率问题
  12. 从总监到CEO的一些思考和理解
  13. 谁能最后享受到胜利成果?
  14. ember js搭建web_使用Ember.js构建雄心勃勃的Web应用程序
  15. 如何开通聚合商家收款码?
  16. 外网访问redis cluster的大坑
  17. 360云盘关闭一周后:国家版权局称值得肯定,是榜样
  18. java 计算性能,性能计算公式
  19. python读二进制 float_Python 二进制读文件 转换 float 失败
  20. Runable接口、Comparator接口、FileFilter接口匿名内部类写法 +Collections方法

热门文章

  1. 计算机硬件软件的英语,计算机软件和硬件,PC computer software and hardware,音标,读音,翻译,英文例句,英语词典...
  2. application.properties详解 --springBoot配置文件
  3. 人脸识别相关资源大列表
  4. 安装 macbook 双系统( OS X 和 Ubuntu )
  5. iOS播放器之基于VLCKit的自定义播放器
  6. java rds 数据库_Java程序如何连接RDS MySQL
  7. netlogon启动后停止_【漏洞通报】微软NetLogon提权漏洞
  8. 随笔二——JavaScript脚本语言
  9. IOS实现摇一摇源代码
  10. 牛顿法python 实现