当前位置: 首页 > news >正文

LODE(Loss Decoupling)个人理解

作为LODE的笔记,方便理解与复习。

这里的LODE来自于论文“Loss Decoupling for Task-Free Continual Learning”,链接为:点我跳转

一.LODE简介

LODE 是 "Loss Decoupling" 的缩写,中文可译为“损失解耦”,它通过将新任务的损失函数解耦为“区分新旧类别”和“区分新类别内部”两个部分,并为它们分配不同权重,从而在持续学习中更好地平衡稳定性(不忘旧知识)和可塑性(学习新知识)。

说人话,就是为把损失函数拆成数学上等价的多个部分,根据不同部分负责的任务分配不同的权重,从而达到平衡稳定性和可塑性的目的。

二.回放策略下的损失函数

常见的基于回放的深度学习,损失函数的形式如下:

$L = \frac{1}{|B_t|} \sum_{i=1}^{|B_t|} L_{\text{new}}(f_\Theta(x_t^i), y_t^i) + \frac{1}{|B_M|} \sum_{i=1}^{|B_M|} L_{\text{rep}}(f_\Theta(x_M^i), y_M^i)$

接下来拆解成两部分解释。

1.新任务损失

$\dfrac{1}{|B_t|} \sum\limits_{i=1}^{|B_t|} L_{\text{new}}(f_\Theta(x_t^i), y_t^i)$

这是原公式的第一部分,称为新任务损失,其中:

  • B_t:从当前新任务中采样的一批样本

  • |B_t|:该批次的样本数量

  • (x_t^i, y_t^i):第 i 个新任务的样本和标签

  • f_\Theta​:带有参数 \Theta 的模型

  • L_{\text{new}}​:针对新任务的损失函数,通常是交叉熵损失函数

这一部分求的是新任务的损失,主要负责让模型学会正确分类新类别的样本。

2.回放损失

$\dfrac{1}{|B_M|} \sum\limits_{i=1}^{|B_M|} L_{\text{rep}}(f_\Theta(x_M^i), y_M^i)$

这是原公式的第二部分,称为回放损失,其中:

  • M:存储旧样本的记忆缓冲区

  • B_M​:从记忆缓冲区中采样的一批旧样本

  • |B_M|:回放批次的样本数量

  • (x_M^i, y_M^i):第 ii 个旧任务的样本和标签

  • L_{\text{rep}}:回放损失函数,可以是简单的交叉熵损失,也可以是结合了知识蒸馏的更复杂损失

这一部分求的是旧任务的损失,负责巩固旧任务的知识,防止灾难性遗忘。

PS:记忆缓冲区

基于回放的持续学习方法通过维护一个“记忆缓冲区”(Memory Buffer)来存储部分过往任务的数据,以缓解模型学习新任务时的“灾难性遗忘”问题。

为实现这一目标,一种典型策略是利用缓冲区中的旧数据计算一个额外的损失项。此时,模型的总优化目标由“新任务损失”与“旧任务损失”共同构成。这种双重损失约束迫使模型在参数更新时,必须同时兼顾新、旧知识的掌握:一方面积极学习新任务,另一方面也要巩固过去已学的经验,从而将历史知识有效地锚定在参数空间中,避免遗忘。

三.LODE的解耦过程

在交叉熵损失函数下的新任务损失可以表示为:

\mathcal{L}_{\text{new}}(f_{\Theta}(x), y) = \ell_{\text{ce}}(f_{\Theta}(x), y) = -\log\left( \frac{\exp(o_{y})}{\sum_{i=1}^{m+n} \exp(o_{i})} \right)

其中:

  • \ell_{ce}(\cdot)表示交叉熵损失函数
  • [o_{1}, o_{2}, ..., o_{m+n}]表示f_\Theta(x)输出的逻辑值。

关于交叉熵可以参考我之前的交叉熵损失函数的笔记:点此跳转

此时的新任务损失可以被拆解为:

$L_{\text{new}} = -\log\left( \frac{\exp(o_y)}{\sum_{i=1}^{m+n} \exp(o_i)} \right) \\ = -\log\left( \frac{\exp(o_y)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \times \frac{\sum_{i=m+1}^{m+n} \exp(o_i)}{\sum_{i=1}^{m+n} \exp(o_i)} \right)$

$= -\left[ \log\left( \frac{\exp(o_y)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right) + \log\left( \frac{\sum_{i=1}^{m+n} \exp(o_i)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right) \right]$

$= -\log\left( \frac{\exp(o_y)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right) - \log\left( \frac{\sum_{i=1}^{m+n} \exp(o_i)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right)$

$= \ell_{\text{ce}}(f_{\Theta}(x), y; C_{n}) + \ell_{n}(f_{\Theta}(x))$

1.“区分新类别内部”的损失

$\ell_{\text{ce}}(f_{\Theta}(x), y; C_{n})= -\log\left( \frac{\exp(o_y)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right)$

以下简称为\ell_{\text{ce}}(\cdot; C_n)

  • 分母变化\sum_{i=m+1}^{m+n} \exp(o_i) 只包含了所有新类别的 logits 指数和。

  • 物理意义

    • 这个损失计算的是,在“所有新类别”这个封闭集合中,模型将样本分类到正确类别 y 的概率。

    • 它的优化只影响新类别之间的相对关系。为了最小化这个损失,模型只需学会区分新类别中不同的小类别,而不会直接去改变新旧类别之间的决策边界。

    • 因此,它纯粹对应于 “新类别内部区分” 的目标。

2.“区分新旧类别”的损失

$\ell_{n}(f_{\Theta}(x))= -\log\left( \frac{\sum_{i=1}^{m+n} \exp(o_i)}{\sum_{i=m+1}^{m+n} \exp(o_i)} \right)$

以下简称为\ell_{\text{n}}(\cdot)

  • 分子:所有新类别的 logits 指数和。

  • 分母:所有类别(旧类+新类)的 logits 指数和。

  • 物理意义

    • 这个分数计算的是模型认为“这个样本属于任何一个新类别”的总概率

    • 为了最小化这个损失,模型会倾向于增大分子,减小分母。这意味着模型会努力:

      1. 增大新类别的 logits(提高分子)。

      2. 减小旧类别的 logits(降低分母,因为分母也包含了旧类别)。

    • 这个操作直接拉大了新类别和旧类别之间的差距,移动了新旧类别之间的决策边界。

    • 因此,它明确地对应于 “新旧类别区分” 的目标。

接下来就可以对解耦后的损失函数分配不同权重,从而达到平衡稳定性和可塑性的目的。

论文中对这两部分分别进行了消融实验,得到的结论是:

移除\ell_{\text{n}}(\cdot)时第一个任务的遗忘程度低于移除\ell_{\text{ce}}(\cdot; C_n),即\ell_{\text{n}}(\cdot)导致的遗忘比\ell_{\text{ce}}(\cdot; C_n)更严重。

也就是说不考虑后面任务的正确率,只考虑训练了不同任务后对第一个任务保留的记忆(用准确率评估),\ell_{\text{n}}(\cdot) 更容易导致遗忘。

最后的结论就是, \ell_{\text{n}}(\cdot) 相较于 \ell_{\text{ce}}(\cdot; C_n) 会引发更严重的遗忘,因此,对两者赋予相同权重的做法并不合理,理应降低 \ell_{\text{n}}(\cdot) 的权重,并相应提高 \ell_{\text{ce}}(\cdot; C_n) 的权重。

四.总结

LODE 使用如下损失函数进行持续学习:

$L = \frac{1}{|B_t|} \sum_{i=1}^{|B_t|} \left( \beta_1 \ell_{\text{ce}}(f_\Theta(x_i^t), y_i^t; C_n) + \beta_2 \ell_n(f_\Theta(x_i^t), y_i^t) \right) + \frac{1}{|B_M|} \sum_{i=1}^{|B_M|} L_{\text{rep}}(f_\Theta(x_i^M), y_i^M)$

 \ell_{\text{n}}(\cdot) 用于新旧类别区分,LODE 设置 \beta_{2} 与 \frac{|C_{n}|}{|C_{o}|} 成正比,避免模型偏向旧类别或新类别。

 \ell_{\text{ce}}(\cdot; C_n) 仅与新类别相关,LODE 将 \beta_{1} 设为常数。

具体而言,\beta_{1} 和 \beta_{2} 的设置如下:

$\beta_{1} = C, \quad \beta_{2} = \rho \cdot \frac{|C_{n}|}{|C_{o}|}$

其中 C 和 \rho 是超参数。

http://www.dtcms.com/a/603015.html

相关文章:

  • 成都网站建设3六六俄罗斯门户网站
  • 淮南房地产网站建设网站睿思设计
  • 十七、自然语言处理概述
  • 微信手机网站流程湖南软件定制开发
  • 如何做自己产品网站企业网站建设杭州公司
  • C++ 离散化
  • 人力资源网站怎么做品牌网站设计公司价格
  • 网站建设包含专业html修改成wordpress主题
  • 网站开发总结与未来展望网络营销推广专家
  • 柳州企业网站建设价格wordpress宽屏
  • C++11——RAII 锁封装类
  • 怎样在工商局网站做公示南宁兴宁区建设局网站
  • 自己做网站的准备工作个人网站设计html
  • 张家界建设局网站电话号码郑州最新发布
  • 宁波网站建设在哪里服务好的武进网站建设
  • 被骗去国外做网站网站推广国外的建筑设计案例网站
  • 云服务器可以建设个人网站吗网页游戏开服表1区
  • 如何在 Windows 上安装 MySQL(保姆级教程2024版)
  • havoc安装
  • 长沙网站建设排名一个网站项目几个人做
  • Go语言的安装与环境配置
  • MySQL 库表与约束
  • 新西兰签证网站开发镇江网站建设费用
  • 网站搜索引擎优化公司vue手机网站开发
  • FunRec-Task2
  • 怎么把qq空间做成企业网站技术培训学校机构
  • Elasticsearch的快照生命周期管理(SLM)与索引生命周期管理(ILM)功能
  • 中国建设银行人才招聘官方网站电商网站建设思路
  • XRecorder 2.4.6.3 |好用的录屏软件,支持少见的区域录屏和画笔功能
  • 做网站点击赚取广告费中国菲律宾大使馆官网