深度学习自编码器 - 收缩自编码器(CAE)篇

序言

在深度学习的浪潮中,收缩自编码器( Compressive Autoencoder, CAE \text{Compressive Autoencoder, CAE} Compressive Autoencoder, CAE)作为自编码器的一种高级形式,正逐步崭露头角。收缩自编码器在保留自编码器核心功能——即数据压缩与重构的基础上,引入了更为严格的压缩技术,以追求更低维且更具代表性的数据表示。这一特性使得收缩自编码器在数据降维、特征学习、降噪及高效信息处理等方面展现出独特的优势。本文将简要介绍收缩自编码器的概念、原理及其在实际应用中的潜力,以期为读者提供一个全面而深入的了解。

收缩自编码器(Compressive Autoencoder)

  • 收缩自编码器( Rifai et al., 2011a,b \text{Rifai et al., 2011a,b} Rifai et al., 2011a,b) 在编码 h = f ( x ) \boldsymbol{h} = f(\boldsymbol{x}) h=f(x) 的基础上添加了显式的正则项,鼓励 f f f 的导数尽可能小:
    Ω ( h ) = λ ∥ ∂ f ( x ) ∂ x ∥ F 2 \Omega(\boldsymbol{h})=\lambda\Vert\frac{\displaystyle\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}}\Vert_F^2 Ω(h)=λxf(x)F2 — 公式1 \quad\textbf{---\footnotesize{公式1}} 公式1
  • 惩罚项 Ω ( h ) \Omega(\boldsymbol{h}) Ω(h) 为平方 Frobenius \text{Frobenius} Frobenius范数(元素平方之和),作用于与编码器的函数相关偏导数的 Jacobian \text{Jacobian} Jacobian矩阵。
  • 去噪自编码器和收缩自编码器之间存在一定联系: Alain and Bengio (2013) \text{Alain and Bengio (2013)} Alain and Bengio (2013) 指出在小高斯噪声的限制下,当重构函数将 x \boldsymbol{x} x 映射到 r = g ( f ( x ) ) \boldsymbol{r} = g(f(\boldsymbol{x})) r=g(f(x)) 时,去噪重构误差与收缩惩罚项是等价的。换句话说, 去噪自编码器能抵抗小且有限的输入扰动,而收缩自编码器使特征提取函数能抵抗极小的输入扰动。
  • 分类任务中,基于 Jacobian \text{Jacobian} Jacobian的收缩惩罚预训练特征函数 f ( x ) f(\boldsymbol{x}) f(x),将收缩惩罚应用在 f ( x ) f(\boldsymbol{x}) f(x) 而不是 g ( x ) ) g(\boldsymbol{x})) g(x)) 可以产生最好的分类精度。如深度学习自编码器 - 去噪自编码器篇所讨论,应用于 f ( x ) f(\boldsymbol{x}) f(x)的收缩惩罚与得分匹配也有紧密的联系。
  • 收缩 ( contractive \text{contractive} contractive) 源于 CAE \text{CAE} CAE弯曲空间的方式。具体来说,由于 CAE \text{CAE} CAE训练为抵抗输入扰动,鼓励将输入点邻域映射到输出点处更小的邻域。我们能认为这是将输入的邻域收缩到更小的输出邻域。
  • 说得更清楚一点, CAE \text{CAE} CAE只在局部收缩——一个训练样本 x \boldsymbol{x} x 的所有扰动都映射到 f ( x ) f(\boldsymbol{x}) f(x) 的附近。
    • 全局来看,两个不同的点 x \boldsymbol{x} x x ′ \boldsymbol{x}^\prime x 会分别被映射到远离原点的两个点 f ( x ) f(\boldsymbol{x}) f(x) f ( x ′ ) f(\boldsymbol{x}^\prime) f(x)
    • f f f 扩展到数据流形的中间或远处是合理的(见图例1中小例子的情况)。
    • Ω ( h ) \Omega(\boldsymbol{h}) Ω(h) 惩罚应用于 sigmoid \text{sigmoid} sigmoid单元时, 收缩 Jacobian \text{Jacobian} Jacobian的简单方式是令 sigmoid \text{sigmoid} sigmoid趋向饱和的 0 0 0 1 1 1
    • 这鼓励 CAE \text{CAE} CAE使用 sigmoid \text{sigmoid} sigmoid的极值编码输入点,或许可以解释为二进制编码。
    • 它也保证了 CAE \text{CAE} CAE可以穿过大部分 sigmoid \text{sigmoid} sigmoid隐藏单元能张成的超立方体,进而扩散其编码值。
  • 我们可以认为点 x \boldsymbol{x} x 处的 Jacobian \text{Jacobian} Jacobian矩阵 J \boldsymbol{J} J 能将非线性编码器近似为线性算子。这允许我们更形式地使用 “收缩’’ 这个词。
    • 在线性理论中,当 J x \boldsymbol{J}\boldsymbol{x} Jx 的范数对于所有单位 x \boldsymbol{x} x 都小于等于 1 1 1 时, J \boldsymbol{J} J 被称为收缩的。
    • 换句话说,如果 J \boldsymbol{J} J 收缩了单位球,他就是收缩的。
    • 我们可以认为 CAE \text{CAE} CAE为鼓励每个局部线性算子具有收缩性,而在每个训练数据点处将 Frobenius \text{Frobenius} Frobenius范数作为 f ( x ) f(\boldsymbol{x}) f(x) 的局部线性近似的惩罚。
  • 深度学习自编码器 - 使用自编码器学习流形篇中描述,正则自编码器基于两种相反的推动力学习流形。
    • CAE \text{CAE} CAE的情况下,这两种推动力是重构误差和收缩惩罚 Ω ( h ) \Omega(\boldsymbol{h}) Ω(h))。
    • 单独的重构误差鼓励 CAE \text{CAE} CAE学习一个恒等函数。
    • 单独的收缩惩罚将鼓励 CAE \text{CAE} CAE学习关于 x \boldsymbol{x} x 是恒定的特征。
    • 这两种推动力的的折衷产生导数 ∂ f ( x ) ∂ x \displaystyle\frac{\partial f(\boldsymbol{x})}{\partial \boldsymbol{x}} xf(x) 大多是微小的自编码器。
    • 只有少数隐藏单元,对应于一小部分输入数据的方向,可能有显著的导数。
  • CAE \text{CAE} CAE的目标是学习数据的流形结构。
    • 使 J x \boldsymbol{J}\boldsymbol{x} Jx 很大的方向 x \boldsymbol{x} x,会快速改变 h \boldsymbol{h} h,因此很可能是近似流形切平面的方向。
    • Rifai et al. (2011a,b) \text{Rifai et al. (2011a,b)} Rifai et al. (2011a,b) 的实验显示训练 CAE \text{CAE} CAE会导致 J \boldsymbol{J} J 中大部分奇异值(幅值)比 1 1 1 小,因此是收缩的。
    • 然而,有些奇异值仍然比 1 1 1大,因为重构误差的惩罚鼓励 CAE \text{CAE} CAE对最大局部变化的方向进行编码。
    • 对应于最大奇异值的方向被解释为收缩自编码器学到的切方向。
    • 理想情况下,这些切方向应对应于数据的真实变化。
    • 比如,一个应用于图像的 CAE \text{CAE} CAE应该能学到显示图像改变的切向量,如深度学习自编码器 - 使用自编码器学习流形篇 - 图例1图中物体渐渐改变状态。
    • 图例1所示,实验获得的奇异向量的可视化似乎真的对应于输入图象有意义的变换。
  • 收缩自编码器正则化准则的一个实际问题是,尽管它在单一隐藏层的自编码器情况下是容易计算的,但在更深的自编码器情况下会变的难以计算。
    • 根据 Rifai et al. (2011a) \text{Rifai et al. (2011a)} Rifai et al. (2011a) 的策略,分别训练一系列单层的自编码器,并且每个被训练为重构前一个自编码器的隐藏层。
    • 这些自编码器的组合就组成了一个深度自编码器。
    • 因为每个层分别训练成局部收缩,深度自编码器自然也是收缩的。
    • 这个结果与联合训练深度模型完整架构(带有关于 Jacobian \text{Jacobian} Jacobian的惩罚项)获得的结果是不同的,但它抓住了许多理想的定性特征。
  • 另一个实际问题是,如果我们不对解码器强加一些约束,收缩惩罚可能导致无用的结果。
    • 例如 编码器将输入乘一个小常数 ϵ \epsilon ϵ, 解码器将编码除以一个小常数 ϵ \epsilon ϵ
    • 随着 ϵ \epsilon ϵ 趋向于 0 0 0, 编码器会使收缩惩罚项 Ω ( h ) \Omega(\boldsymbol{h}) Ω(h) 趋向于 0 0 0 而学不到任何关于分布的信息。
    • 同时, 解码器保持完美的重构。
    • Rifai et al. (2011a) \text{Rifai et al. (2011a)} Rifai et al. (2011a) 通过绑定 f f f g g g 的权重来防止这种情况。
    • f f f g g g 都是由线性仿射变换后进行逐元素非线性变换的标准神经网络层组成,因此将 g g g 的权重矩阵设成 f f f 权重矩阵的转置是很直观的。

  • 图例1:通过局部PCA和收缩自编码器估计的流形切向量的图示。
    • 通过局部PCA和收缩自编码器估计的流形切向量的图示。
      在这里插入图片描述

    • 说明:

      • 流形的位置由来自 CIFAR-10 \text{CIFAR-10} CIFAR-10数据集中狗的输入图像定义。
      • 切向量通过输入到代码映射的 Jacobian \text{Jacobian} Jacobian矩阵 ∂ h ∂ x \frac{\partial \boldsymbol{h}}{\partial \boldsymbol{x}} xh 的前导奇异向量估计。
      • 虽然局部 PCA \text{PCA} PCA CAE \text{CAE} CAE都可以捕获局部切方向,但 CAE \text{CAE} CAE能够从有限训练数据形成更准确的估计,因为它利用了不同位置的参数共享(共享激活的隐藏单元子集)。
      • CAE \text{CAE} CAE切方向通常对应于物体的移动或改变部分(例如头或腿)。
      • Rifai et al. (2011c) \text{Rifai et al. (2011c)} Rifai et al. (2011c) 许可转载此图。

总结

收缩自编码器通过其高效的压缩机制,实现了对输入数据更为紧凑和精确的特征提取。相比传统自编码器,收缩自编码器在保持数据质量的同时,进一步降低了数据维度,减少了存储和传输的开销,提高了计算效率。此外,其强大的降噪和特征学习能力,使得收缩自编码器在数据预处理、特征工程及异常检测等领域具有广泛的应用前景。随着深度学习技术的不断发展,收缩自编码器将持续进化,为更多复杂数据的处理与分析提供有力支持。

往期内容回顾

深度学习自编码器 - 去噪自编码器篇
深度学习自编码器 - 使用自编码器学习流形篇

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

QT For Android开发-打开PPT文件

一、前言 需求: Qt开发Android程序过程中,点击按钮就打开一个PPT文件。 Qt在Windows上要打开PPT文件或者其他文件很容易。可以使用QDesktopServices打开文件,非常方便。QDesktopServices提供了静态接口调用系统级别的功能。 这里用的QDesk…

高效开发,从暗藏玄机的文件系统开始

4G-Cat.1模组的文件系统关乎数据传输速度、存储效率,以及数据安全性等等诸多因素,在应用开发中极为重要。 本期,我们来学习合宙Air201的实用示例——文件系统的使用 Air201文件系统的使用 合宙Air201资产定位模组——是一个集成超低功耗4G通…

深入探索迭代器模式的原理与应用

🎯 设计模式专栏,持续更新中 欢迎订阅:JAVA实现设计模式 🛠️ 希望小伙伴们一键三连,有问题私信都会回复,或者在评论区直接发言 迭代器模式 💻 迭代器模式 (Iterator Pattern) 是一种行为设计模…

saltstack高级用法

一、saltstack的高级用法 一、job管理 1、job简介 Jid:job id,格式为%Y%m%d%H%M%S%fmaster在下发指令消息时,会附带上产生的Jid,minion在接收到指令开始执行时,会在本地的cachedir(默认是/var/cache/salt/…

力扣 2824.统计和小于目标的下标对数目

文章目录 题目介绍解法 题目介绍 解法 题目相当于从数组中选两个数,我们只关心这两个数的和是否小于 target,由于 abba,无论如何排列数组元素,都不会影响加法的结果,所以排序不影响结果的数量。 排序后: …

CDH Hive集群的create/drop慢问题,在200s 多一点处理分析

现象: CREATE TABLE test911 (SN String,PN_CODE String); Total time spent in this metastore function was greater than 1000ms : createTable_(Table, )200091 Hive集群的 create/drop 操作时间基本都稳定在 200s 多一点。 分析: HMS会实时向Sentr…

实战OpenCV之图像阈值处理

基础入门 图像阈值处理是一种二值化技术,它基于预设的阈值,可以将图像中的像素分为两大类:一大类是背景,另一大类是前景或目标对象。这个过程涉及将图像中的每个像素值与阈值进行比较,并根据比较结果决定保留原始值还是…

jmeter得到的文档数据处理

通过前面jmeter得到的输出文档,这里是txt文档,里面包含了很多条数据,每条数据的结构如下: 【request】 uuid:xxxxxxx timestamp:xxxxxxxx No.x question:xxxxxxx 【response】 code&#…

防火墙配置变更管理

在任何组织中,当涉及到网络安全时,频繁地更换防火墙是必要的,实施简化的防火墙更改管理策略模板可以减少管理时间,还可以减少每次变更引入新的安全性或合规性问题的可能性。典型的防火墙变更管理流程将包括以下步骤: …

排序----插入排序

一开始把第一个元素看成是有序的,然后从第二个元素开始拿出来与前面的数据比较,若前面的数据小,就把前面的数据不断后移(注意要把拿出来的那个元素提前保存下来),直到遇到比自己小的元素,然后插…

大语言模型-教育方向数据集

大语言模型-教育方向数据集 编号论文数据集1Bitew S K, Hadifar A, Sterckx L, et al. Learning to Reuse Distractors to Support Multiple-Choice Question Generation in Education[J]. IEEE Transactions on Learning Technologies, 2022, 17: 375-390.Televic, NL, https…

Java 每日一刊(第12期):面向对象

“任何复杂的程序,都可以通过分解成若干个简单的问题来解决。” 前言 这里是分享 Java 相关内容的专刊,每日一更。 本期将为大家带来以下内容: 类对象类与对象的关系Java 中的三种变量类型OOP 的三大特性 类 类 是对现实世界中某类事物…

AntFlow系列教程之流程拒绝

这是开源项目AntFlow的一个系统入门使用教程.AntFlow是一款开源免费的企业级低代码工作流引擎.仿照钉钉设计,极大降低流程设计、开发和维护成本。详细介绍请查看历史文章:AntFlow开源仿钉钉低代码工作流平台集成RuoYi版本来啦 流程拒绝和流程同意提交的参数是一样的…

基于milvus数据库的RAG-Demo

1.上传文本并将文本向量化 import os from django.conf import settings from langchain.document_loaders import TextLoader from langchain.text_splitter import RecursiveCharacterTextSplitter, CharacterTextSplitter from langchain.vectorstores import Chroma from l…

【JAVA入门】Day47 - 线程

【JAVA入门】Day47 - 线程 文章目录 【JAVA入门】Day47 - 线程一、并发和并行二、多线程的实现方式2.1 继承 Thread 类的方式2.2 实现 Runnable 接口的方式2.3 利用 Callable 接口实现 三、Thread 类中常见的成员方法四、线程的调度和优先级4.1 抢占式调度4.2 优先级4.3 守护线…

如何不终止容器退出Docker Bash会话

如何不终止容器退出Docker Bash会话 💖The Begin💖点点关注,收藏不迷路💖 当通过docker exec进入Docker容器的bash会话后,如果想退出但不停止容器,可以使用快捷键组合: 按下Ctrl+P然后紧接着按下Ctrl+Q。 这个操作会让你从bash会话中“分离”出来,但容器会继续运行…

Zabbix 部署----安装 Zabbix(监控服务器)

目录 zabbix 官网: 1、准备一台虚拟机 1.整理配置yum源(192.xx.xx.10) 2.设置主机名(192.xx.xx.10) 3.防火墙 4.selinux 2、准备Zabbix-repo 使用阿里提供的zabbixYUM源 3、安装Zabbix服务器 4、初始化数据库 1.安装数据库 2.启动数据库 3.授权zabbix账号 4.初始化…

解决使用nvm ls命令没有出现*的问题

一、引言 在输命令的时候不知道手误写了什么导致node命令用不了,查看环境变量配的nvm对应的路径没问题,试过网上说的修改文件夹名字但是没有用!! 输入 nvm ls 显示已下载的node版本,发现前面没有* 输入nvm use 使用其中…

【macOS】【zsh报错】zsh: command not found: python

【macOS】【zsh Error】zsh: command not found: python 本地已经安装了Python,且能在Pycharm中编译Python程序并运行。 但是,在macOS终端,运行Python,报错。 首先要确认你在macOS系统下,是否安装了Python。 如果安…

去噪扩散隐式模型

dataset_name "datasets/oxford-102-flowers/" dataset_repetitions 2 # 数据集重复 num_epochs 25 image_size 64 # 模型训练和生成图像的大小 # KID 内核初始距离 kid_image_size 75 # 从噪声中逐步“去噪”或“扩散”到最终图像所需的步骤数。 kid_diffusi…