《Learning to Reweight Examples for Robust Deep Learning》笔记

[1] 用 meta-learning 学样本权重,可用于 class imbalance、noisy label 场景。之前对其 (7) 式中 ϵ i , t = 0 \epsilon_{i,t}=0 ϵi,t=0对应 Algorithm 1 第 5 句、代码 ex_wts_a = tf.zeros([bsize_a], dtype=tf.float32))不理解:如果 ϵ \epsilon ϵ 已知是 0,那 (4) 式的加权 loss 不是恒为零吗?(5) 式不是优化了个吉而 θ ^ t + 1 ( ϵ ) ≡ θ t \hat\theta_{t+1}(\epsilon) \equiv \theta_t θ^t+1(ϵ)θt ?有人在 issue 提了这个问题[2],但其人想通了没解释就关了 issue。

看到 [3] 代码中对 ϵ \epsilon ϵ 设了 requires_grad=True 才反应过来:用编程的话说, ϵ \epsilon ϵ 不应理解成常量,而是变量; 用数学的话说,(5) 的求梯度( ∇ \nabla )是算子,而不是函数,即 (5) 只是在借梯度下降建立 θ ^ t + 1 \hat\theta_{t+1} θ^t+1 ϵ \epsilon ϵ 之间的函数(或用 TensorFlow 的话说,只是在建图),即 θ ^ t + 1 ( ϵ ) \hat\theta_{t+1}(\epsilon) θ^t+1(ϵ),而不是基于常量 θ t \theta_t θt ϵ = 0 \epsilon=0 ϵ=0 算了一步 SGD 得到一个常量 θ ^ t + 1 \hat\theta_{t+1} θ^t+1

一个符号细节:无 hat 的 θ t + 1 \theta_{t+1} θt+1 指由 (3) 用无 perturbation 的 loss 经 SGD 从 θ t \theta_t θt 优化一步所得; θ ^ t + 1 \hat\theta_{t+1} θ^t+1 则是用 (4) perturbed loss。文中 (6)、(7) 有错用作 θ t + 1 \theta_{t+1} θt+1 的嫌疑。

所以大思路是用 clean validation set 构造一条关于 ϵ \epsilon ϵ 的 loss J ( ϵ ) J(\epsilon) J(ϵ),然后用优化器求它,即 ϵ t ∗ = arg ⁡ min ⁡ ϵ J ( ϵ ) \epsilon_t^*=\arg\min_\epsilon J(\epsilon) ϵt=argminϵJ(ϵ)。由 (4) - (6) 有: J ( ϵ ) = 1 M ∑ j = 1 M f j v ( θ ^ t + 1 ( ϵ ) ) ( 6 ) = 1 M ∑ j = 1 M f j v ( θ t − α [ ∇ θ ∑ i = 1 n f i , ϵ ( θ ) ] ∣ θ = θ t ⏟ g 1 ( ϵ ; θ t ) ) ( 5 ) = 1 M ∑ j = 1 M f j v ( θ t − α [ ∇ θ ∑ i = 1 n ϵ i f i ( θ ) ] ∣ θ = θ t ) ( 4 ) = g 2 ( ϵ ; θ t ) \begin{aligned} J(\epsilon) &= \frac{1}{M}\sum_{j=1}^M f_j^v \left(\hat\theta_{t+1}(\epsilon) \right) & (6) \\ &= \frac{1}{M}\sum_{j=1}^M f_j^v \left(\theta_t - \alpha \underbrace{\left[ \nabla_{\theta} \sum_{i=1}^n f_{i,\epsilon}(\theta) \right] \bigg|_{\theta=\theta_t}}_{g_1(\epsilon; \theta_t)} \right) & (5) \\ &= \frac{1}{M}\sum_{j=1}^M f_j^v \left(\theta_t - \alpha \left[ \nabla_{\theta} \sum_{i=1}^n \epsilon_i f_i(\theta) \right] \bigg|_{\theta=\theta_t} \right) & (4) \\ &= g_2(\epsilon; \theta_t) \end{aligned} J(ϵ)=M1j=1Mfjv(θ^t+1(ϵ))=M1j=1Mfjv θtαg1(ϵ;θt) [θi=1nfi,ϵ(θ)] θ=θt =M1j=1Mfjv(θtα[θi=1nϵifi(θ)] θ=θt)=g2(ϵ;θt)(6)(5)(4) 要注意的就是 (5) 那求导式,本质是个函数,而不是常量,其中 ϵ \epsilon ϵ 是自由的, θ \theta θ 由于被 ∣ θ = θ t |_{\theta=\theta_t} θ=θt 指定了,所以看成常量,所以记为 g 1 ( ϵ ; θ t ) g_1(\epsilon;\theta_t) g1(ϵ;θt),于是整个 J ( ϵ ) J(\epsilon) J(ϵ) 也可以看成一个 g 2 ( ϵ ; θ t ) g_2(\epsilon; \theta_t) g2(ϵ;θt)

按 (6) 求 ϵ t ∗ \epsilon_t^* ϵt 的思路就是:

  1. 随机初始化 ϵ t ( 0 ) \epsilon_t^{(0)} ϵt(0)
  2. ϵ t ( s + 1 ) ← ϵ t ( s ) − η ∇ ϵ J ( ϵ ) ∣ ϵ = ϵ t ( s ) \epsilon^{(s+1)}_t \leftarrow \epsilon^{(s)}_t - \eta \nabla_{\epsilon} J(\epsilon) \big|_{\epsilon=\epsilon^{(s)}_t} ϵt(s+1)ϵt(s)ηϵJ(ϵ) ϵ=ϵt(s),即 (7) 右边。可能由于 J ( ϵ ) J(\epsilon) J(ϵ) 形式上是带梯度的表达式, § \S § 3.3 就称此为「unroll the gradient graph」,而求 ϵ t ( s + 1 ) \epsilon^{(s+1)}_t ϵt(s+1) 的这一步就称为「backward-on-backward」吧。

而文章的 online approximation 就是:

  • ϵ t ( 0 ) = 0 \epsilon^{(0)}_t=0 ϵt(0)=0
  • ϵ t ∗ ≈ ϵ t ( 1 ) \epsilon^*_t \approx \epsilon^{(1)}_t ϵtϵt(1)

初始化为 0 可能不是最好的初始化方法,但不影响后续迭代优化,可参考 LoRA[7],它也用到全零初始化。

References

  1. (ICML’18) Learning to Reweight Examples for Robust Deep Learning - paper, code
  2. gradients of noisy loss w.r.t parameter \theta #2
  3. (PyTorch 复现 1)TinfoilHat0/Learning-to-Reweight-Examples-for-Robust-Deep-Learning-with-PyTorch-Higher
  4. (PyTorch 复现 2)danieltan07/learning-to-reweight-examples
  5. facebookresearch/higher
  6. Stateful vs stateless
  7. (ICLR’22) LoRA: Low-Rank Adaptation of Large Language Models - paper, code

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

有刷直流驱动芯片的GC9114 pin to pin替代TC118S,内置过温,低压欠压保护等功能更具性价比,应用于牙刷,电子锁,红外开关等上

GC9114 是一款低压 5V 全桥驱动芯片,为摄像机、消费类产品、玩具和其他低压或者电池供电的运动控制类应用提供了集成的电机驱动解决方案。 能提供高达 1.3A 的持续输出电流。可以工作在 2~6V 的电源电压上。它具有 PWM(IN/IN)输入接口,与行业…

TensorRT部署--Linux(Ubuntu)环境配置

系列文章目录 TensorRT环境配置–Linux(Ubuntu) 文章目录 系列文章目录前言一、环境配置二、CUDA下载安装三、cuDNN下载安装四、TensorRT下载安装五、模型创建总结 前言 TensorRT部署-Windows环境配置: https://blog.csdn.net/m0_70420861/article/details/135658922?spm100…

Java面试提纲

JDK 1 jdk1.8版本后的新特性有哪些? Java Development Kit (JDK) 1.8(也称为Java 8)在2014年3月发布,引入了许多重要的新特性,以下是其中的一些关键特性: Lambda表达式: Java 8引入了lambda表达式&#x…

给2024年还想要成为网络工程师的朋友的一份学习福利

网工最新薪资情况 据统计,普通网络工程师的工资通常在5000元以上;专业领域的网络工程师,如网络存储或网络安全工程师,以及管理层,收入会更高,他们的年薪可以在15万元左右;网络工程师的薪酬分布…

常用通信总线学习——RS232与RS485

RS232概述 RS-232标准接口(又称EIA RS-232)是常用的串行通信接口标准之一,它是由美国电子工业协会(Electronic Industry Association,EIA)联合贝尔系统公司、调制解调器厂家及计算机终端生产厂家于1970年共同制定,其全…

鸿蒙开发-UI-组件

鸿蒙开发-UI-布局 鸿蒙开发-UI-布局-线性布局 鸿蒙开发-UI-布局-层叠布局 鸿蒙开发-UI-布局-弹性布局 鸿蒙开发-UI-布局-相对布局 鸿蒙开发-UI-布局-格栅布局 鸿蒙开发-UI-布局-列表 ​​​​​​鸿蒙开发-UI-布局-网格 鸿蒙开发-UI-布局-轮播 文章目录 前言 一、按钮 1.创建…

【AndroidStudio】2022.3Giraffe连接超时,更换下载源,使用本地gradle,版本对应问题

记录了使用AndroidStudio2022.3 Giraffe版本在搭建环境时遇到的问题,包括连接超时,gradle无法读取等。 如果只看如何正确的配置,直接跳转第3节 配置汇总 1 连接超时 项目一开始会自动下载gardle文件来加载项目 1.1 Connect timed out 基…

智能语音识别源码系统+语义理解+对话管理+语音合成 带完整的搭建教程

人工智能技术的不断发展,智能语音识别技术逐渐成为人们日常生活和工作中不可或缺的一部分。然而,目前市场上的智能语音识别产品大多存在一定的局限性,如识别率不高、功能单一等。为了解决这些问题,罗峰给大家分享一款基于智能语音…

学生护眼灯哪个品牌好?最好的学生护眼灯品牌排行

说到台灯,相信大家都不陌生,特别是对于家中有学生的家长们而言,一款优秀的护眼台灯已经成为居家必备的工具之一。然而,随着各种护眼台灯层出不穷,价格从几百到上千不等,人们对于这一领域的产品是否物有所值…

Shell脚本④循环语句for、while、until

目录 一.for 1. 九九乘法表 2.求1到10奇数和 3.累计加到100 (1)方法一 (2)方法2 二.while 1.猜价格小游戏 2.累加到100的方法三 三.until循环 1.累加到100方法四 四.嵌套循环 五.循环语句中break、exit和continue 1…

深入了解Python游戏开发模块:pyglet

目录 一、引言 二、pyglet简介 三、pyglet的功能与特点 四、如何使用pyglet开发游戏 五、与其他游戏开发框架的比较 六、结论 一、引言 在Python中,pyglet是一个强大的游戏开发模块,它提供了创建2D和3D游戏所需的各种工具。pyglet使用OpenGL作为其…

叩开c++的大门

目录 1. 什么是c? 2. c的发展史 3. c和c语言的区别是什么呢? 4. 接下来让我们正式进入c的学习吧。 4.1 c的关键字 4.2 命名空间 4.2.1 命名空间的定义 4.2.2 命名空间的使用 4.3 c的输入输出 std命名空间的使用惯例std是C标准库的命名空间&…

新年的故事,独具魅力的新年传说

新年的故事,独具魅力的新年传说 新年,是我们每年都期盼的时刻。在这个喜庆的日子里,人们互相祝福、共享快乐,以满怀希望的心情迎接未来的到来。新年不仅仅是一个节日,它背后浓厚的文化积淀和故事也让人无比着迷。让我…

【二分查找】LC习题看这一篇就够了!

二分查找(灵神笔记) 模版 红蓝染色法 原始问题:返回有序数组中第一个≥8的数的位置 如果每个数都<8 返回数组长度 闭区间 def lower_bound(nums: List[int], target: int) -> int:left 0right len(nums) - 1while left &…

小型洗衣机哪个好?小型洗衣机全自动推荐

在近年以来,由于人们对健康的认识和生活质量的不断改善,使得内衣洗衣机这一类的产品在近年来得到了飞速的发展,洗烘一体机、洗烘套装的价格总体下降,功能和性能都得到了改善,往往更多的用户会选择一台或者多台洗衣机来…

HarmonyOS ArkTS Toggle基本使用(十七)

组件提供勾选框样式、状态按钮样式及开关样式。 该组件从API Version 8开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 子组件 仅当ToggleType为Button时可包含子组件。 接口 Toggle(options: { type: ToggleType, isOn?: boolean }) …

C++ 程序使用 OpenCV 库来创建一个图像金字塔,然后将这些图像合并成一张大图

文章目录 源码文件功能解读编译文件 源码文件 #include <iostream> #include <vector> #include <string> #include <opencv2/opencv.hpp>int main() {// 这里应该有代码来生成或加载一系列图像到 imagePyramidstd::vector<cv::Mat> imagePyram…

电子行业含砷废水,深度除砷技术

砷是一种类金属元素&#xff0c;砷化物生物毒性极强&#xff0c;是国际公认的第一类致癌物。因此&#xff0c;这些含砷废水必须经过一定的处理才能排放到环境中。那么&#xff0c;哪些行业会产生含砷废水呢?在地球上&#xff0c;砷是一种常见的元素。在自然界中&#xff0c;砷…

【格密码基础】基于LWE问题的密码系统

目录 一. 介绍 二. LWE密码方案简单介绍 三. LWE经典归约 四. LWE性质 五. LWE的鲁棒性 一. 介绍 在2005年&#xff0c;Regev基于LWE问题提出了一个新的公钥密码方案。该方案可实现语义安全&#xff08;semantic security&#xff09;&#xff0c;其中误差率&#xff08;…

Google Chrome RCE漏洞 CVE-2020-6507 和 CVE-2024-0517的简单分析

本文深入研究了两个在 Google Chrome 的 V8 JavaScript 引擎中发现的漏洞&#xff0c;分别是 CVE-2020-6507 和 CVE-2024-0517。这两个漏洞都涉及 V8 引擎的堆损坏问题&#xff0c;允许远程代码执行。通过EXP HTML部分的内存操作、垃圾回收等流程方式实施利用攻击。 CVE-2020-…
最新文章