VQ-VAE中如何解决梯度截断(不可导)问题?直通估计、(stop gradient,停止梯度)


(stop gradient,停止梯度)运算

它简称为sg

 也就是说,前向传播时,𝑠𝑔里的值不变(sg=1);反向传播时,𝑠𝑔按值为0求导(sg=0),即此次计算无梯度。

为什么需要解决梯度截断(不可导)?

按理说我们需要求的损失函数为:

但是因为在encoder后的z(z_q),是通过在codebook中arg min得到的,所以会导致梯度消失,梯度无法在反向传播中从decoder传递到encoder。

怎么解决?

所以使用Straight-Through(直通估计)来解决这个问题:

直通估计器(Straight-Through Estimator, STE)的核心思想是:

  • 前向传播:正常计算模型的输出。
  • 反向传播:用一种自定义的方式计算梯度,以绕过某些不可微的操作

根据这个思想,我们可以设计一个把梯度从𝑧𝑒(𝑥)复制到𝑧𝑞(𝑥)的loss:

用在VQ-VAE的设计上,那就是:

  • 前向传播:计算 decoder(zq(x))并基于此计算重建loss值。
  • 反向传播:通过 stop gradient 操作,梯度将直接传递回 ze(x),从而更新encoder,而不会受到 zq​(x) 和 ze​(x) 之间量化过程的影响。

前向传播时,𝑠𝑔里的值不变(sg=1):

就是拿解码器来进行𝑧𝑞(𝑥)的解码并计算损失:

反向传播时,𝑠𝑔按值为0求导(sg=0):

按下面这个公式进行梯度回传(参数更新),等价于把解码器的梯度全部传给𝑧𝑒(𝑥):

代码实现方法:

在PyTorch里,(x).detach()就是𝑠𝑔(𝑥),它的值在前向传播时取x,反向传播时取0

L = x - decoder(z_e + (z_q - z_e).detach())

通过这一技巧,我们完成了梯度的传递,可以正常地训练编码器和解码器了。

VQ-VAE的简明介绍:量子化自编码器 - 科学空间|Scientific Spaces

轻松理解 VQ-VAE:首个提出 codebook 机制的生成模型 | 周弈帆的博客

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

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

相关文章

Qt Q_ASSERT详解

Q_ASSERT详解 引言一、基本用法二、深入了解三、参考链接 引言 Q_ASSERT是 Qt 框架中的一个宏,用于在调试时检查某个条件是否为真。它是程序调试中的一个重要工具,有助于开发者在开发过程中及时发现并修复潜在的错误。 一、基本用法 只在使用 Qt 的 D…

干货:科技论文写作保姆级攻略

前言:Hello大家好,我是小哥谈。科技论文是报道自然科学研究或技术开发工作成果的论说文章。通常基于概念、判断、推理、证明或反驳等逻辑思维体系,使用实验调研或理论计算等研究手段,按照特定格式撰写完成。 科技论文可以粗略分为…

UiPath+Appium实现app自动化测试

一、环境准备工作 1.1 完成appium环境的搭建 参考:pythonappiumpytestallure模拟器(MuMu)自动化测试环境搭建_appium mumu模拟器-CSDN博客 1.2 完成uipath的安装 登录官网,完成注册与软件下载安装。 UiPath业务自动化平台:先进的RPA及自动…

vue组件深入介绍之插槽

了解插槽之前请先了解vue组件基础及注册 Vue2官网介绍 Vue3官网介绍 1、vue2插槽介绍 在2.6.0中,具名插槽和作用域插槽引入了一个新的统一语法(v-slot指令)。它将取代slot和slot-scope; Vue 实现了一套内容分发的 API&#xf…

AI 会淘汰程序员吗?

前言 前些日子看过一篇文章,说国外一位拥有 19 年编码经验、会 100% 手写代码的程序员被企业解雇了,因为他的竞争对手,一位仅有 4 年经验、却善于使用 Copilot、GPT-4 的后辈,生产力比他更高,成本比他更低&#xff0c…

【数据分享】《中国金融年鉴》1986-2020年PDF版

而今天要免费分享的数据就是1986-2020年间出版的《中国金融年鉴》并以多格式提供免费下载。(无需分享朋友圈即可获取) 数据介绍 《中国金融年鉴》自1986年起,逐年记录着中国金融领域的发展历程、政策变化和市场动态。这部年鉴不仅是金融专业…

Halcon 基于分水岭的目标分割

一 分水岭 1 分水岭介绍 传统的分水岭分割方法,是一种基于拓扑理论的数学形态学的分割方法,其基本思想是把图像看作是地质学上的拓扑地貌,图像中每一像素的灰度值表示该点的海拔高度,每一个局部极小值及其周边区域称为集水盆地&…

ROS学习笔记(18):建图与定位(2)

0.前言 上文提到现在的我们已经进入到了SLAM领域的学习,会涉及到大量专业知识,作为一个自学的大三(好吧也快大四了)萌新并不能保证每次文章的专业性和准确性,所以,本人推荐大家能自己去查阅一些相关书籍和…

牛!手机、TV双端聚合,免费可同步!

哈喽,各位小伙伴们好,我是给大家带来各类黑科技与前沿资讯的小武。 有不少小伙伴闲时会选择观看游戏、户外、娱乐等各类的直播,而关注的主播可能驻留在不同直播平台,需要下载多个APP,且切换非常不方便。 所以今天给大…

自定义动态数据源+事务控制

1:首先yml配置两个数据库的链接 spring:application:name: xxxxmain:banner-mode: OFFdatasource: # 默认数据源 datamarkdruid: # 关闭数据库的 web 访问stat-view-servlet:enabled: falseweb-stat-filter:enabled: falsefilt…

Linux系统之玩转SafeLine防火墙应用

Linux系统之玩转SafeLine防火墙应用 一、SafeLine介绍1.1SafeLine简介1.2 SafeLine功能1.3 SafeLine 的工作原理二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍三、本地环境检查3.1 检查Docker服务状态3.2 检查Docker版本3.3 检查docker compose 版本四、部署SafeLine4.1 安…

一篇文章搞懂弹性云服务器和轻量云服务器的区别

前言 在众多的云服务器类型中,弹性云服务器和轻量云服务器因其各自的特点和优势,受到了广大用户的青睐。那么,这两者之间到底有哪些区别呢?本文将为您详细解析。 弹性云服务器:灵活多变的计算资源池 弹性云服务器&…

谷粒商城-个人笔记(集群部署篇一)

前言 ​学习视频:​Java项目《谷粒商城》架构师级Java项目实战,对标阿里P6-P7,全网最强​学习文档: 谷粒商城-个人笔记(基础篇一)谷粒商城-个人笔记(基础篇二)谷粒商城-个人笔记(基础篇三)谷粒商城-个人笔记(高级篇一)谷粒商城-个…

【LeetCode的使用方法】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出指正,让我们共同学习、交流进步! 🔮LeetCode的使用方法 🔮LeetCode 是一个在线编程平台,广泛…

《昇思25天学习打卡营第7天|函数式自动微分》

文章目录 今日所学:一、函数与计算图二、微分函数与梯度计算三、Stop Gradient四、Auxiliary data五、神经网络梯度计算总结 今日所学: 今天我学习了神经网络训练的核心原理,主要是反向传播算法。这个过程包括将模型预测值(logit…

无法定位程序输入点Z9 qt assertPKcS0i于动态链接库F:\code\projects\06_algorithm\main.exe

解决方法: 这个报错,是因为程序在运行时没要找到所需的dll库,如果把这个程序方法中对应库的目录下执行,则可正常执行。即使将图中mingw_64\bin 环境变量上移到msvc2022_64\bin 之前也不可以。 最终的解决方法是在makefile中设置环…

Python基础小知识问答系列-可迭代型变量赋值

1. 问题: 怎样简洁的把列表中的元素赋值给单个变量? 当需要列表中指定几个值时,剩余的变量都收集在一起,该怎么进行变量赋值? 当只需要列表中指定某几个值,其他值都忽略时,该怎么…

使用Redis实现消息队列:List、Pub/Sub和Stream的实践

摘要 Redis是一个高性能的键值存储系统,它的多种数据结构使其成为实现消息队列的理想选择。本文将探讨如何使用Redis的List、Pub/Sub和Stream数据结构来实现一个高效的消息队列系统。 1. 消息队列的基本概念 消息队列是一种应用程序之间进行通信的机制&#xff0…

660错题

不能局部求导,局部洛必达