Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)

1. 终身学习简介

神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。

然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如 Web 应用程序中的新用户数据或自动驾驶中的新驾驶数据。 这些新数据需要被纳入训练集以增强模型的性能。 这被称为终身学习。

Life Long Learning (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

人工智能终身学习面临哪些挑战?似乎通过不断更新其数据和相应的网络参数就可以实现终身学习。然而,事实并非如此简单。一个关键障碍是灾难性遗忘。

如示例所示,在任务 1 上训练的神经网络达到了 90% 的准确率。在随后对任务 2 进行训练后,其在任务 2 上的性能提高到 97%。然而,该网络在原始任务 1 上的性能急剧下降至 80%。这表明学习新信息会导致网络“遗忘”先前学习的知识,阻碍其随着时间的推移积累知识的能力。

catastrophic forgetting (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

此外,这种遗忘并不是由于神经网络缺乏同时处理两个任务的能力。如附加图表所示,如果我们同时对两个任务进行训练(交替训练来自任务 1 和任务 2 的数据),它在两个任务上都达到了很高的准确率(任务 1 上为 89%,任务 2 上为 98%)。 这表明网络确实具有学习两个任务的能力;问题在于学习过程的顺序性,其中学习新任务会覆盖先前学习的知识。

network capacity (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

灾难性遗忘背后的核心问题在于不同任务之间的优化方向存在冲突。当神经网络在一个任务上进行训练时,它会调整其参数(用 θ 表示)以最小化该特定任务的损失函数。这个过程会找到一组对于该任务表现良好的最优参数( θ∗ )。然而,当网络随后在新的任务上进行训练时,它会再次调整其参数以最小化新任务的损失。这个新的优化过程通常会将参数从先前为原始任务找到的最优解中拉开,有效地“覆盖”了为第一个任务学习到的知识。当任务之间差异较大时,这种现象尤为明显。

why catastrophic forgetting (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

鉴于这一挑战,我们如何缓解灾难性遗忘?这篇综合综述论文概述了当前最先进的方法(截至 2024 年),将其分为五个关键方法。

A Comprehensive Survey of Continual Learning: Theory, Method and Application​icon-default.png?t=O83Ahttp://arxiv.org/abs/2302.00487

Continual Learning Method (source: https://arxiv.org/abs/2302.00487)

基于正则化的方法中一个值得注意的技术是选择性突触可塑性。“突触权重”表示神经元(节点)之间连接的强度,“可塑性”被用作对生物学概念神经可塑性的类比,后者描述了大脑改变神经元之间连接强度(突触权重)的能力。选择性可塑性是指神经网络期望具有的特性,即选择性地调节其整个结构中单个突触的可塑性。

Selective Synaptic Plasticity (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

如图所示,参数 b 控制着可塑性的水平。在一个极端情况下,当 b 等于 0 时,正则化项消失,有效地消除了对参数更新的任何约束。这种约束的缺失导致了灾难性遗忘,其中学习新任务完全覆盖了先前获得的知识。在另一个极端情况下,当 b 接近无穷大时,正则化变得无限强,阻止了对参数的任何重大更改。在这种情况下,模型变得“固执”,无法学习任何新东西,只能停留在其初始知识上。

how b affects the performance (source: https://speech.ee.ntu.edu.tw/~hylee/ml/ml2021-course-data/life_v2.pdf)

所以,关键问题是如何计算这种“可塑性”?李宏毅教授在课程中推荐了以下论文:

Elastic Weight Consolidation (EWC) (弹性权重巩固 ):

Overcoming catastrophic forgetting in neural networksicon-default.png?t=O83Ahttp://​arxiv.org/abs/1612.00796

EWC 使用 Fisher 信息矩阵 (FFF) 来衡量每个权重的重要性,并在学习新任务时惩罚对关键权重的更改:

L_{\text{total}} = L_{\text{task}} + \frac{\lambda}{2} \sum_i F_i (\theta_i - \theta^*_{i})^2 \\

  • L_{\text{task}}​: 任务特定的损失

  • F_i : 权重 \theta_i 的 Fisher 信息

  • \theta^*_{i} ​: 来自先前任务的最优权重

  • \lambda: 正则化强度

F 的定义如下所示:

F = [ \nabla \log(p(y_n | x_n, \theta^{*})) \nabla \log(p(y_n | x_n, \theta^{*}))^T ] \\

我们仅取矩阵的对角线值来近似每个参数的 F_i .

相应的代码实现为:

# EWC
class ewc(object):"""@article{kirkpatrick2017overcoming,title={Overcoming catastrophic forgetting in neural networks},author={Kirkpatrick, James and Pascanu, Razvan and Rabinowitz, Neil and Veness, Joel and Desjardins, Guillaume and Rusu, Andrei A and Milan, Kieran and Quan, John and Ramalho, Tiago and Grabska-Barwinska, Agnieszka and others},journal={Proceedings of the national academy of sciences},year={2017},url={https://arxiv.org/abs/1612.00796}}"""def __init__(self, model, dataloader, device, prev_guards=[None]):self.model = modelself.dataloader = dataloaderself.device = device# extract all parameters in modelsself.params = {n: p for n, p in self.model.named_parameters() if p.requires_grad}# initialize parametersself.p_old = {}# save previous guardsself.previous_guards_list = prev_guards# generate Fisher (F) matrix for EWCself._precision_matrices = self._calculate_importance()# keep the old parameter in self.p_oldfor n, p in self.params.items():self.p_old[n] = p.clone().detach()def _calculate_importance(self):precision_matrices = {}# initialize Fisher (F) matrix(all fill zero)and add previous guardsfor n, p in self.params.items():precision_matrices[n] = p.clone().detach().fill_(0)for i in range(len(self.previous_guards_list)):if self.previous_guards_list[i]:precision_matrices[n] += self.previous_guards_list[i][n]self.model.eval()if self.dataloader is not None:number_data = len(self.dataloader)for data in self.dataloader:self.model.zero_grad()# get image datainput = data[0].to(self.device)# image data forward modeloutput = self.model(input)# Simply use groud truth label of dataset.label = data[1].to(self.device)# generate Fisher(F) matrix for EWCloss = F.nll_loss(F.log_softmax(output, dim=1), label)loss.backward()for n, p in self.model.named_parameters():# get the gradient of each parameter and square it, then average it in all validation set.precision_matrices[n].data += p.grad.data ** 2 / number_dataprecision_matrices = {n: p for n, p in precision_matrices.items()}return precision_matricesdef penalty(self, model: nn.Module):loss = 0for n, p in model.named_parameters():# generate the final regularization term by the ewc weight (self._precision_matrices[n]) and the square of weight difference ((p - self.p_old[n]) ** 2)._loss = self._precision_matrices[n] * (p - self.p_old[n]) ** 2loss += _loss.sum()return lossdef update(self, model):# do nothingreturn

Synaptic Intelligence (SI) (突触智能):

Continual Learning Through Synaptic Intelligenceicon-default.png?t=O83Ahttp://arxiv.org/abs/1703.04200

SI 通过计算参数 i 的重要权重 \Omega_i 来衡量其重要性,计算方法如下:

\Omega_i^{\text{new}} \leftarrow \Omega_i^{\text{old}} + \frac{W_i}{(\theta_i - \theta_i^*)^2 + \epsilon} \\

其中:

  • \Omega_i^{\text{new}} :参数 i 的更新重要权重

  • \Omega_i^{\text{old}}​:来自先前任务的重要权重

  • W_i​:累积梯度信息

  • \theta_i - \theta_i^* ​:任务期间的参数变化

  • \epsilon : 防止出现零除数的小正数常量

然后,正则化惩罚项 LSI 被计算为:

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2557.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Multi-Agent如何设计

文章小结 研究背景和目的 在单一大语言模型长期主导人工智能领域的背景下,多智能体系统在对话任务解决中逐渐崭露头角。 虽然先前的研究已经展示了多智能体系统在推理任务和创造性工作中的潜力,但对于其在对话范式方面的局限性以及单个智能体的影响&am…

(即插即用模块-Attention部分) 四十四、(ICIP 2022) HWA 半小波注意力

文章目录 1、Half Wavelet Attention2、代码实现 paper:HALFWAVELET ATTENTION ON M-NET FOR LOW-LIGHT IMAGE ENHANCEMENT Code:https://github.com/FanChiMao/HWMNet 1、Half Wavelet Attention 传统的图像增强方法主要关注图像在空间域的特征信息&am…

SpringBoot+Lombok项目实体属性名xXxx格式,前端接收不到

问题解析 今天发现后端传给前端的实体类中,有属性为xXxxx格式的,前端也使用相同名称接收,结果却不显示值!研究了一会发现接口请求回来后,原xXxxx的属性名,会被转为全小写。具体原因为:使用Lombo…

Spring Boot教程之五十五:Spring Boot Kafka 消费者示例

Spring Boot Kafka 消费者示例 Spring Boot 是 Java 编程语言中最流行和使用最多的框架之一。它是一个基于微服务的框架,使用 Spring Boot 制作生产就绪的应用程序只需很少的时间。Spring Boot 可以轻松创建独立的、生产级的基于 Spring 的应用程序,您可…

网络安全——常用语及linux系统

一、网络安全概念及法规 网络安全:网络空间安全 cyber security 信息系统:由计算机硬件、网络和通信设备、计算机软件、信息资源、信息用户和规章制度组成的已处理信息流为目的的人机一体化系统 信息系统安全三要素(CIA) 保密…

Windows 正确配置android adb调试的方法

下载适用于 Windows 的 SDK Platform-Tools https://developer.android.google.cn/tools/releases/platform-tools?hlzh-cn 设置系统变量,路径为platform-tools文件夹的绝对路径 点击Path添加环境变量 %adb%打开终端输入adb shell 这就成功了!

如何优化Elasticsearch大文档查询?

记录一次业务复杂场景下DSL优化的过程 背景 B端商城业务有一个场景就是客户可见的产品列表是需要N多闸口及各种其它逻辑组合过滤的,各种闸口数据及产品数据都是存储在ES的(有的是独立索引,有的是作为产品属性存储在产品文档上)。 在实际使用的过程中&a…

使用 WPF 和 C# 将纹理应用于三角形

此示例展示了如何将纹理应用于三角形,以使场景比覆盖纯色的场景更逼真。以下是为三角形添加纹理的基本步骤。 创建一个MeshGeometry3D对象。像往常一样定义三角形的点和法线。通过向网格的TextureCoordinates集合添加值来设置三角形的纹理坐标。创建一个使用想要显示的纹理的 …

探索 Transformer²:大语言模型自适应的新突破

目录 一、来源: 论文链接:https://arxiv.org/pdf/2501.06252 代码链接:SakanaAI/self-adaptive-llms 论文发布时间:2025年1月14日 二、论文概述: 图1 Transformer 概述 图2 训练及推理方法概述 图3 基于提示的…

Android Studio历史版本包加载不出来,怎么办?

为什么需要下载历史版本呢? 虽然官网推荐使用最新版本,但是最新版本如果自己碰到问题,根本找不到答案,所以博主这里推荐使用历史版本!!! Android Studio历史版本包加载不出来? 下…

citrix netscaler13.1 重写负载均衡响应头(基础版)

在 Citrix NetScaler 13.1 中,Rewrite Actions 用于对负载均衡响应进行修改,包括替换、删除和插入 HTTP 响应头。这些操作可以通过自定义策略来完成,帮助你根据需求调整请求内容。以下是三种常见的操作: 1. Replace (替换响应头)…

STM32 FreeRTOS移植

目录 FreeRTOS源码结构介绍 获取源码 1、 官网下载 2、 Github下载 源码结构介绍 源码整体结构 FreeRTOS文件夹结构 Source文件夹结构如下 portable文件夹结构 RVDS文件夹 MemMang文件夹 FreeRTOS在基于寄存器项目中移植步骤 目录添加源码文件 工程添加源码文件 …

[Qt]常用控件介绍-按钮类控件-QPushButton、QRedioButton、QCheckBox、QToolButton控件

目录 1.QPushButton按钮 介绍 属性 Demo:键盘方向键控制人物移动 2.Redio Button按钮 属性 clicked、pressed、released、toggled区别 单选按钮的分组 Demo:点餐小程序 3.CheckBox按钮 属性 Demo:获取今天的形成计划 4.ToolBu…

SpringBoot链接Kafka

一、SpringBoot生产者 (1)修改SpringBoot核心配置文件application.propeties, 添加生产者相关信息 # 连接 Kafka 集群 spring.kafka.bootstrap-servers192.168.134.47:9093# SASL_PLAINTEXT 和 SCRAM-SHA-512 认证配置 spring.kafka.properties.securi…

zerotier搭建虚拟局域网,自建planet

基于该开源项目 自建planet节点,更快速,更安全 本教程依据docker-zerotier-planet 项目文档书写,并以linux(centos 7)和windows作为示例,需要其他系统配置方法,可移步项目文档 一. 前置资源 具有外网ip的服务器 后面…

计算机网络 (44)电子邮件

一、概述 电子邮件(Electronic Mail,简称E-mail)是因特网上最早流行的应用之一,并且至今仍然是因特网上最重要、最实用的应用之一。它利用计算机技术和互联网,实现了信息的快速、便捷传递。与传统的邮政系统相比&#…

《机器学习》——DBSCAN算法

文章目录 DBSCAN算法简介DBSCAN算法原理核心概念聚类过程 DBSCAN模型模型API主要参数其他参数 DBSCAN算法实例实例步骤导入所需库导入数据文件传入变量DBSCAN聚类分析添加数据进原数据框对聚类结果进行评分 DBSCAN算法简介 DBSCAN(Density - Based Spatial Cluster…

【2024年华为OD机试】 (C卷,100分)- 用连续自然数之和来表达整数(Java JS PythonC/C++)

一、问题描述 题目描述 一个整数可以由连续的自然数之和来表示。 给定一个整数&#xff0c;计算该整数有几种连续自然数之和的表达式&#xff0c;且打印出每种表达式。 输入描述 一个目标整数T (1 <T< 1000) 输出描述 该整数的所有表达式和表达式的个数。 如果有…

Redis--21--大Key问题解决方案

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言Redis--20--大Key问题解析 一、如何发现Redis大Key1. 使用Redis命令行工具**MEMORY USAGE****RANDOMKEY****DEBUG OBJECT****SCAN命令****redis-cli 工具&#…

[操作系统] 深入理解约翰·冯·诺伊曼体系

约翰冯诺依曼&#xff08;John von Neumann&#xff0c;1903年12月28日—1957年2月8日&#xff09;&#xff0c;原名诺伊曼亚诺什拉约什&#xff08;Neumann Jnos Lajos&#xff09;&#xff0c;出生于匈牙利的美国籍犹太人数学家&#xff0c;20世纪最重要的数学家之一&#xf…