权重计算方法_终身持续学习-可塑权重巩固(Elastic Weight Consolidation)

2023-11-20

回过头来梳理了一下EWC方法,在持续终身学习里面很经典的一个方法,Deepmind写的晦涩难懂x,当时折腾了好久才理解。。。。。因为自己有点菜√

条件和目标

论文中,假设存在两个任务A和B (可以推广为旧任务和新任务),数据集分别为D和D。模型学习完任务A后,继续学习任务B,并且不再使用任务A的数据,只使用任务B的数据。我们想让模型在这种情况下学习完任务B后,能够在任务A和B上都有不错的表现。

问题分析

在实际环境中,未来的任务和数据是无法预测的,在时间轴上,任务的数据是非独立同分布 Non-IID.,本质上,这是一个时域上的 Non-IID. 问题。目前通常训练模型,都是随机打乱数据,使得其近似成 IID.,但在序贯学习(Sequential Learning)里面,没有太多的内存来存旧数据,并且未来的数据是未知的,难以用同样的策略转化为 IID.,如果不用额外内存来存储旧任务的数据并且采用相同策略来训练模型,那么模型将会发生灾难性遗忘(Catastrophic forgetting),因为新任务的数据会对模型造成干扰(interference),模型参数不受限地变动使得模型会遗忘旧任务上学习到的知识。核心问题在于,如何用可接受的代价来减缓灾难遗忘?

举个栗子

任务A是猫狗识别二分类,任务B是狮虎识别二分类,训练完猫狗识别后,模型在猫狗识别的任务上有很不错的表现,这个时候,直接用这个模型继续去训练狮虎识别(此处默认只用狮虎数据集),那么模型在猫狗识别任务上的表现,将会变得很差,这个过程中,模型遗忘了识别猫狗的能力,发生了灾难性遗忘。终身持续学习的目标是想让模型继续训练识别狮虎的时候,还能保留拥有识别猫狗的能力。

EWC的解决方法

下面都是针对神经网络讨论。

简单地说,EWC从新任务数据对模型的interference角度,让模型参数受限地变动,阻碍在旧任务上重要参数的变化。比如,参数矩阵里面,某些参数对猫狗识别非常重要(这些重要参数在确定分类器分类猫狗的超平面过程中起主要作用),那么在训练狮虎识别时,记下这些参数原本的值,加一个损失函数阻碍它们的变化(参数像橡皮筋有弹性一样,想拉长它,会有弹力阻碍),模型在样本空间中,猫狗识别的数据样本区域分类器的超平面变化不大。

EWC加了一个正则化损失函数:

代表了参数
在任务A(旧任务)上的重要性,,就是论文里说的费雪信息矩阵的对角。
是权重调节因子。

其中,这里的

是长度为
的一维向量,
是模型的参数总数(把所有参数矩阵都拿出来,然后平铺在一起)。

参数重要性的估计

EWC方法里,参数的重要性用二阶导来评估。

是数据集。
是任务的损失函数,比如猫狗识别一般就用交叉熵。
为参数为
的模型和一个数据样本
上的损失。

为了降低计算复杂度,按照Theory of Point Estimation, Second Edition by Lehmann & Casella, Lemma 5.3, p. 116.,做了个近似:

这个近似仅限于参数在极值点附近,或者说模型在该数据集上训练好了,到了最优。

看到这很简单,就是用梯度的平方平均值来作为重要性,如果只是要用这个方法的话,这里就够了,下面都是理论推导。

贝叶斯视角下EWC的理论推导

机器学习在贝叶斯的视角下,目的都是为了最大化后验概率

,但是因为后验概率难以估计(不可能尝试所有的
),因此用贝叶斯公式
转化为最大化
,然后取一个
转成似然函数用点估计方法做极大似然估计来达成目的。

在这里,我们把

分为
,因此:

因此,我们的目标在贝爷看来,只是一边最大化任务B的似然概率

,一般保持任务A的后验概率
的最大化。最大化任务B的似然概率推导到后面任务的损失函数,这个推导就不展开讲(但是都是类似的),下面推导保持任务A的后验概率的最大化的损失函数。

先拉普拉斯近似,假设

关于参数服从高斯分布,均值为
,方差为
,都是是长度为
的一维向量。

写作一个关于
的函数:

其中,

为归一化系数(概率的积分必须为1),不用管它。

然后,对它的似然函数进行泰勒展开(log和ln在这里没有本质区别):

为在任务A上优化好的参数,另外复习一下泰勒展开公式。。。。:

因为在任务A上,模型优化到了最优,损失函数很小,一阶导很小,近似为0,并且三阶及以上的项,在

变化不大的情况下都可以近似为0,因此只保留二阶项和零阶项。

这里,把Hessian矩阵取负,就得到了费雪信息矩阵。

对公式(7)取指数,得:

看,活脱脱的高斯分布。

因此,回头看我们一开始的假设,

,它是服从一个
的高斯分布,而最大化
就等价于最大化

因为

是个常数(
是给定的),因此,最大化
最终等价于最大化

此外,

都是长度为
的一维向量,
大小,计算的时间和空间复杂度难以接受,于是和优化的领域一样,取了费雪信息矩阵的对角线,这等于假设参数之间相互独立没有影响,最终,导出损失函数:

看完后应该会有不少人联想到L2正则化,确实,本质上他们都是针对参数先验进行构造,假设和推导也很类似,这也是目前ML领域水论文的方向之一。

实验

这个领域目前的Benchmark并不多,普遍是基于原有的Benchmark进行构造,经典的构造方法有重排列(Permute)数据集、分割(Split)数据集。

Permuted MNIST 是一个基础的Benchmark,它将MNIST里面每张图片向量化后进行重排列,其实就是用一组随机索引来打乱向量里面每个元素的位置,不同的随机索引打乱后产生不同的任务。

论文里的实验结果我就不贴了,贴一下我自己跑的,截自自个的论文。。。SI、MAS都是类似的方法,PI+ALE是自个之前水的一个方法。

效果比SGD好很多,还是很有效的。

Split MNISTDisjoint MNIST 类似,前者把MNIST分割为标签为(0,1)、(2,3)、(4,5)、(6,7)、(8,9)的5组任务,后者则分为标签(0,1,2,3,4)、(5,6,7,8,9)两组任务。在这类数据集上要注意模型是单输出层(Single head)还是一个任务一个输出层(Multi-head)。EWC方法上Multi-head的结果平均精度接近99%(除了SGD其他方法都接近99%),而Single head的实验现象很奇怪,一开始测的很高(有88%的),然而后面再怎么跑,EWC都和SGD差不多,把旧任务遗忘了。

结论

在任务差异不大情况下,EWC确实是一个有效的方法,理论也很优雅,但任务差异较大时,泰勒展开的高阶项就不能近似为0,导致了EWC方法不好的表现,此外,参数之间是有关联分布的(假设应该他们是混合高斯),EWC取费雪信息矩阵的对掉线忽略了参数相关性,这些都是EWC的不足,后续有一些论文多多少少改进了一些,但任重道远~

引用什么的其他的以后再补充8 √

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

权重计算方法_终身持续学习-可塑权重巩固(Elastic Weight Consolidation) 的相关文章

  • SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH

    最近公司项目开发了一个微信小程序 并且部署测试OK 由于微信小程序调用的后端接口必须是HTTPS 所以给接口安装了SSL 第一天测试都正常 第二天早上再使用时页面无响应 抓包发现是后端接口抛出 net ERR SSL VERSION OR
  • 背包九讲-01背包

    动态规划核心思维能力 动态规划是求最优解问题的重要解法 也是信息学奥赛中每年必考的内容之一 学习动态规划更应该注重此类问题思维能力的锻炼 多多做题 一般 gt 50题后方可入门 注意理解以下概念 1 状态 2 状态属性 3 状态的计算 也就
  • Microsoft Office Excel 不能访问文件 的解决办法

    Microsoft Office Excel 不能访问文件 a xls 可能的原因有 文件名称或路径不存在 文件正被其他程序使用 您正要保存的工作簿与当前打开的工作簿同名 This solution is Windows 2008 Serv
  • 三维实时重建BundleFusion

    转自 计算机视觉方向简介 深度相机室内实时稠密三维重建 知乎 室内场景的稠密三维重建目前是一个非常热的研究领域 其目的是使用消费级相机 本文特指深度相机 对室内场景进行扫描 自动生成一个精确完整的三维模型 这里所说的室内可以是一个区域 一个
  • 前端基础(三)- ES7~ES12

    为了方便记忆和称呼 ES2015之后的新知识点我们都统称ES6语法 就没必要去划分得那么细 ES7 2016 Array prototype includes includes方法可以判断一个数组是否包含某个指定的值 如果存在返回true
  • 多分类学习、多标签学习、多任务学习的区别

    Multi class Multi label Multi task 三者之间的区别与相同之处 1 直观解释 多分类学习 Multi class 一个分类器 但分的类别是包含多个的 例如 分类器判断苹果的颜色是 红色 黄色 青色 白色 这是
  • 移动端H5开发遇到的问题

    移动端开发必会出现的问题和解决方案 H5开发过程中难免会遇到一些兼容性等爬过坑的问题 移动端 H5 相关问题汇总 1px 问题 响应式布局 iOS 滑动不流畅 iOS 上拉边界下拉出现白色空白 页面件放大或缩小不确定性行为 click 点击
  • 让控制台输出彩色日志 windows

    经常看到一些开源软件 例如NDK编译的时候 操作系统启动的时候 打印的输出很多是彩色的 这样比较容易分辨哪些是重点 增强可读性 代码如下 cpp view plain copy include
  • 深度解析C++模版

    在C 发明阶段 C 之父Stroustrup和贝尔实验室的C 小组对原先的宏方法进行了修订 对其进行了简化并将它从预处理范围移入了编译器 这种新的代码替换装置被称为模板 而且它变现了完全不同的代码重用方法 模板对源代码重用 而不是通过继承和
  • Python的PIL库

    Python图像库PIL Python Image Library 是python的第三方图像处理库 图像类Image class Image类是PIL中的核心类 比如从文件中加载一张图像 处理其他形式的图像 或者是从头创造一张图像等 Im
  • Python代码实现发送163邮件(IMAP服务)

    1 注册163邮箱并登陆 https mail 163 com 2 开启 IMAP IMAP 服务 3 编写代码 进行发邮件操作 import smtplib from email mime text import MIMEText fro
  • 用MATLAB实现人脸识别

    1 人脸识别技术的细节 一般来说 人脸识别系统包括图像提取 人脸定位 图形预处理 以及人脸识别 身份确认或者身份查找 系统输入一般是一张或者一系列含有未确定身份的人脸图像 以及人脸数据库中的若干已知身份的人脸图像或者相应的编码 而其输出则是
  • 【C/C++】 - Linux下查找函数头文件 以及 man命令拓展

    背景 比如现在需要找C语言 sleep函数的头文件 使用man来查找 可以先man sleep 可以发现出来的默认是sleep 1 是一个User Commands 明显不是我们需要的 这里提示了 看sleep 3 那我们查看下sleep
  • VC++ MapWinGis篇(三)

    添加百度图层 BaiduMapProvider h pragma once include BaseProvider h include BaiduProjection h include
  • Open3D(C++)实现建筑物点云立面和平面分割提取

    Open3D C 实现建筑物点云立面和平面分割提取 近年来 点云技术在城市规划 机器人地图构建等领域得到广泛应用 本篇文章将介绍如何利用Open3D C 库实现建筑物点云立面和平面分割提取 准备工作 首先需要编译安装Open3D库 本文使用
  • 如何写接口测试用例

    一 接口测试用例基础知识 1 接口测试要测的是什么 接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互 测试的重点是要检查数据的交换 传递和控制管理过程 以及系统间的相互逻辑依赖关系等 2 接口测试的意义 按照分层测试模型
  • iOS App打包上架详细流程

    一 前言 作为一名iOS开发者 把辛辛苦苦开发出来的App上传到App Store是件必要的事 但是很多人还是不知道该怎么上传到App Store上 下面就来详细讲解一下具体流程步骤 二 准备 一个已付费的开发者账号 可分为 账号类型分为个
  • 在Qt Creator中实现Android设备调试

    在Qt Creator中实现Android设备调试 要在Qt Creator中调试和运行Android应用程序 需要先连接设备并设置Qt Creator以使用适当的工具链 本文将介绍如何在Qt Creator中连接Android设备并配置Q
  • STM32的FSMC地址线对应关系通俗易懂解读和和驱动TFT-LCD的原理

    STM32的FSMC地址线对应关系通俗易懂解读和和驱动TFT LCD的原理 当 Bank接的是 8 位宽度存储器的时候 HADDR 25 0 对应FSMC A 25 0 当 Bank接的是 16 位宽度存储器的时候 HADDR 25 1 对

随机推荐

  • 内聚、耦合

    一 耦合 内聚的了解 看懂就行 不用强背 那么什么是耦合 什么是内聚呢 我来做个解释 内聚性 又称块内联系 指模块的功能强度的度量 即一个模块内元素彼此之间结合的紧密程度的度量 若一个程序之间各元素之间 程序段之间 联系紧密 则内聚性就高
  • Maven--快照(SNAPSHOT)版本介绍

    Maven快照 SNAPSHOT 版本介绍 在 Maven 中 任何一个项目和构件都必须有自己的版本 版本的值可能是 1 0 0 1 0 alpha 4 1 3 SNAPSHOT 等 其中 1 0 0 1 0 alpha 4 是稳定的发布版
  • Python实现数值列表(数组)的逆置输出

    题目描述 输入10个数字 然后逆序输出 输入 十个整数 输出 逆序输出 空格分开 样例输入 1 2 3 4 5 6 7 8 9 0 样例输出 0 9 8 7 6 5 4 3 2 1 arr list map int input split
  • mgrid

    numpy中的一个函数叫mgrid 例子 import numpy as np X Y np mgrid 0 1 1 1 7 0 1 1 1 7 print X shape print X print Y shape print Y 生成两
  • 分配操作菜单

    目录 概述 介绍 数据库 后端 前端 效果展示 概述 在写后台管理系统时 我们可以根据不同的登录人 给予不同的功能菜单 如 给楼栋管理员登录时分配 楼栋管理 宿舍管理 所以在数据库就要创建 1 登录人与角色表 2再给角色表分配操作菜单 登录
  • va_start和va_end使用详解

    转载于 http www cnblogs com hanyonglu archive 2011 05 07 2039916 html 本文主要介绍va start和va end的使用及原理 在以前的一篇帖子Format MessageBox
  • 工作日记NO.13

    1 执行机安装Qt 2 编译精简Qt5 15 X库 3 研究liadwg项目 尝试编译
  • 元宇宙与数字孪生有区别

    在元宇宙爆红之前 有一项技术已经慢慢渗透到各行各业之中 它可以逼真 实时地还原现实世界 它就是 数字孪生 目前很多人认为元宇宙与数字孪生的区别不大 元宇宙是数字孪生在技术层面的进阶与优化 其实不然 元宇宙和数字孪生虽然都属于用数字技术构建虚
  • 【廖雪峰python入门笔记】字符串_转义字符的使用

    转义字符的使用 字符串可以用 或者 括起来表示 如果字符串本身包含 怎么办 比如我们要表示字符串 I m OK 这时 可以用 括起来表示 I m OK 类似的 如果字符串包含 我们就可以用 括起来表示 Learn Python in imo
  • Qt 教程(传智教育)

    1 一个简单的 Qt 应用程序 Qt一个类对应一个头文件 类名就是头文件名 QApplication 应用程序类 管理图形用户界面应用程序的控制流和主要设置 是 Qt 的整个后台管理的命脉 它包含主事件循环 在其中来自窗口系统和其它资源的所
  • 快速排序(三种算法实现和非递归实现)

    快速排序 Quick Sort 是对冒泡排序的一种改进 基本思想是选取一个记录作为枢轴 经过一趟排序 将整段序列分为两个部分 其中一部分的值都小于枢轴 另一部分都大于枢轴 然后继续对这两部分继续进行排序 从而使整个序列达到有序 递归实现 v
  • (转)原理到实现

    转 https mp weixin qq com s Mrr1Rnl 594Gyyn9fHekjw 1NFS介绍 NFS是Network File System的简写 即网络文件系统 NFS是FreeBSD支持的文件系统中的一种 NFS基于
  • opencv中resize错误可能导致的原因之一

    cv2 error OpenCV 4 5 5 1 error 5 Bad argument in function resize 在用resize时会产生这个错误 有可能时传入的图片不存在了 假如你是从摄像头读取的图片 需要通过 ret f
  • vue 子父组件间的那些事儿——搭建项目(一)

    一 搭建vue项目 1 环境准备 基于nodejs vue cli cnpm 搭建vue项目 由于本博主已经具备以上环境 现在直接进行项目搭建 环境准备可参考这篇博客 https blog csdn net xcymorningsun ar
  • uni-app使用CSS实现无限旋转动画

    本来想用uni createAnimation创建一个旋转动画 发现转完一圈后就不动了 没法循环旋转 后来又用setInterval每隔一个周期就把旋转角度加180度 发现运行一段时间后动画逐渐崩坏 应该是动画的周期和定时器的周期时间没有完
  • 为什么重写equals就要重写hashcode

    在学习java的时候常常提到 重写equals就要重写hashcode hashcode和equals是个绑定在一起的东西 要了解这个我们需要了解两个函数 hashCode 方法 散列码 hash code 是由对象导出的一个整型值 散列码
  • js 设置网页打印的页眉页脚和页边距

    http blog sina com cn s blog 629788b70100n9zr html
  • React 教程及其API接口文档

    React 详细中文开发文档 可以阅读 http reactjs cn react docs tutorial html 英文原文 http facebook github io react 中文论坛 http react china or
  • mmdetection No module named 'imagecorruptions'

    报错原因 imagecorruptions cpp文件需要重新编译 解决方案 mmdetection 目录下运行 python setup py develop
  • 权重计算方法_终身持续学习-可塑权重巩固(Elastic Weight Consolidation)

    回过头来梳理了一下EWC方法 在持续终身学习里面很经典的一个方法 Deepmind写的晦涩难懂x 当时折腾了好久才理解 因为自己有点菜 条件和目标 论文中 假设存在两个任务A和B 可以推广为旧任务和新任务 数据集分别为D和D 模型学习完任务