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

序言

在数据科学的浩瀚宇宙中,深度学习如同一颗璀璨的星辰,引领着我们对复杂数据内在规律的探索。其中,自编码器作为深度学习家族中的一位独特成员,以其非凡的能力——通过无监督学习捕捉数据的有效表示,而备受瞩目。特别是当我们将目光聚焦于数据中的流形结构时,自编码器展现出了其不可估量的价值。流形,作为高维空间中数据分布的内在低维几何特性,是理解复杂数据集的关键。自编码器通过编码过程将数据压缩至潜在空间,再经解码还原,这一过程中不仅去除了冗余信息,更重要的是保留了数据的关键流形结构,使得我们能够以一种更加简洁而深刻的方式洞察数据的本质。

使用自编码器学习流形

  • 应用数学与机器学习基础 - 深度学习的动机与挑战篇 - 流形学习(manifold learning)描述, 自编码器跟其他很多机器学习算法一样,也应用了将数据集中在一个低维流形或者一小组这样的流形的思想。其中一些机器学习算法仅能学习到在流形上表现良好但给定不在流形上的输入会导致异常的函数。 自编码器进一步借此想法,旨在学习流形的结构。
  • 要了解自编码器如何做到这一点,我们必须介绍流形的一些重要特性。
  • 流形的一个重要特征是切平面 ( tangent plane \text{tangent plane} tangent plane) 的集合。
    • d d d 维流形上的一点 x \boldsymbol{x} x, 切平面由能张成流形上允许变动的局部方向的 d d d 维基向量给出。
    • 图例1所示,这些局部方向说明了我们能如何微小地改变 x \boldsymbol{x} x 而一直处于流形上。
  • 所有自编码器的训练过程涉及两种推动力的折衷:
    • 学习训练样本 x \boldsymbol{x} x 的表示 h \boldsymbol{h} h 使得 x \boldsymbol{x} x 能通过解码器近似地从 h \boldsymbol{h} h 中恢复。 x \boldsymbol{x} x 是从训练数据挑出的事实是关键的,因为这意味着在自编码器不需要成功重构不属于数据生成分布下的输入。
    • 满足约束或正则惩罚。这可以是限制自编码器容量的架构约束,也可以是加入到重构代价的一个正则项。这些技术一般倾向那些对输入较不敏感的解。
  • 显然,单一的推动力是无用的——从它本身将输入复制到输出是无用的,同样忽略输入也是没用的。
    • 相反,两种推动力结合是有用的,因为它们迫使隐藏的表示能捕获有关数据分布结构的信息。
    • 重要的原则是,自编码器必须有能力表示重构训练实例所需的变化。
    • 如果该数据生成分布集中靠近一个低维流形,自编码器能隐式产生捕捉这个流形局部坐标系的表示:仅在 x \boldsymbol{x} x 周围关于流形的相切变化需要对应于 h = f ( x ) \boldsymbol{h}=f(\boldsymbol{x}) h=f(x) 中的变化。
    • 因此,编码器学习从输入空间 x \boldsymbol{x} x 到表示空间的映射,映射仅对沿着流形方向的变化敏感,并且对流形正交方向的变化不敏感。
  • 图例2中一维的例子说明,为了使重构函数对数据点周围的扰动输入不敏感,我们可以让自编码器恢复流形的结构。
  • 对比其他方法是有用且受启发的,可以了解自编码器为什么对流形学习是有用的。
    • 学习表征流形最常见的是流形上(或附近)数据点的表示 ( representation \text{representation} representation)。
    • 对于特定的实例,这样的表示也被称为嵌入。
    • 它通常由一个低维向量给出,具有比这个流形的 ‘‘外围’’ 空间更少的维数。
    • 有些算法(下面讨论的非参数流形学习算法)直接学习每个训练样例的嵌入,而其他算法学习更一般的映射(有时被称为编码器或表示函数),将周围空间(输入空间)的任意点映射到它的嵌入。
  • 流形学习大多专注于试图捕捉到这些流形的无监督学习过程。
    • 最初始的学习非线性流形的机器学习研究专注基于最近邻图 ( nearest neighbor graph \text{nearest neighbor graph} nearest neighbor graph) 的非参数 ( nonparametric \text{nonparametric} nonparametric) 方法。该图中每个训练样例对应一个节点,它的边连接近邻点对。
    • 图例3所示,这些方法:
      • Sch o ¨ lkopf et al., 1998b \text{Schölkopf et al., 1998b} Scho¨lkopf et al., 1998b;
      • Roweis and Saul, 2000 \text{Roweis and Saul, 2000} Roweis and Saul, 2000;
      • Tenenbaum et al., 2000 \text{Tenenbaum et al., 2000} Tenenbaum et al., 2000;
      • Brand, 2003b \text{Brand, 2003b} Brand, 2003b;
      • Belkin and Niyogi, 2003a \text{Belkin and Niyogi, 2003a} Belkin and Niyogi, 2003a;
      • Donoho and Grimes, 2003 \text{Donoho and Grimes, 2003} Donoho and Grimes, 2003;
      • Weinberger and Saul, 2004b \text{Weinberger and Saul, 2004b} Weinberger and Saul, 2004b;
      • Hinton and Roweis, 2003 \text{Hinton and Roweis, 2003} Hinton and Roweis, 2003;
      • van der Maaten and Hinton, 2008 \text{van der Maaten and Hinton, 2008} van der Maaten and Hinton, 2008
    • 将每个节点与张成实例和近邻之间的差向量变化方向的切平面相关联。
  • 全局坐标系则可以通过优化或求解线性系统获得。
    • 图例4展示了如何通过大量局部线性的类高斯样平铺(或 ‘‘薄煎饼’’,因为高斯块在切平面方向是扁平的)得到一个流形。
  • 然而, Bengio and Monperrus (2005) \text{Bengio and Monperrus (2005)} Bengio and Monperrus (2005) 指出了这些局部非参数方法应用于流形学习的根本困难:如果流形不是很光滑(它们有许多波峰、波谷和弯曲),为覆盖其中的每一个变化,我们可能需要非常多的训练样本,导致没有能力泛化到没见过的变化。
    • 实际上,这些方法只能通过内插,概括相邻实例之间流形的形状。
    • 不幸的是, AI \text{AI} AI问题中涉及的流形可能具有非常复杂的结构,难以仅从局部插值捕获特征。
    • 考虑图例1转换所得的流形样例。
    • 如果我们只观察输入向量内的一个坐标 x i x_i xi,当平移图像,我们可以观察到当这个坐标遇到波峰或波谷时,图像的亮度也会经历一个波峰或波谷。
    • 换句话说,底层图像模板亮度的模式复杂性决定执行简单的图像变换所产生的流形的复杂性。
    • 这是采用分布式表示和深度学习捕获流形结构的动机。

  • 图例1:正切超平面概念的图示。
    • 正切超平面概念的图示。
      在这里插入图片描述

    • 说明:

      • 我们在 784 784 784 维空间中创建了 1 1 1 维流形。
      • 我们使用一张 784 784 784 像素的 MNIST \text{MNIST} MNIST 图像,并通过垂直平移来转换它。
      • 垂直平移的量定义沿着 1 1 1 维流形的坐标,轨迹为通过图像空间的弯曲路径。
      • 该图显示了沿着该流形的几个点。
      • 为了可视化,我们使用 PCA \text{PCA} PCA将流形投影到 2 2 2 维空间中。
      • n n n 维流形在每个点处都具有 n n n 维切平面。
      • 该切平面恰好在该点接触流形,并且在该点处平行于流形表面。
      • 它定义了为保持在流形上可以移动的方向空间。
      • 1 1 1 维流形具有单个切线。
      • 我们在图中示出了一个点处的示例切线,其中图像表示该切线方向在图像空间中是怎样的。
      • 灰色像素表示沿着切线移动时不改变的像素,白色像素表示变亮的像素,黑色像素表示变暗的像素。

  • 图例2:如果自编码器学习到对数据点附近的小扰动不变的重构函数,它就能捕获数据的流形结构。
    • 如果自编码器学习到对数据点附近的小扰动不变的重构函数,它就能捕获数据的流形结构。
      在这里插入图片描述

    • 说明:

      • 这里,流形结构是 0 0 0 维流形的集合。
      • 虚线对角线表示重构的恒等函数目标。
      • 最佳重构函数会在存在数据点的任意处穿过恒等函数。
      • 图底部的水平箭头表示在输入空间中基于箭头的 r ( x ) − x r(\boldsymbol{x}) − \boldsymbol{x} r(x)x重建方向向量,总是指向最近的 “流形’’( 1 1 1 维情况下的单个数据点)。
      • 在数据点周围,去噪自编码器明确地尝试将重构函数 r ( x ) r(\boldsymbol{x}) r(x) 的导数限制为很小。
      • 收缩自编码器的编码器执行相同操作。虽然在数据点周围, r ( x ) r(\boldsymbol{x}) r(x) 的导数被要求很小,但在数据点之间它可能会很大。
      • 数据点之间的空间对应于流形之间的区域,为将损坏点映射回流形, 重构函数必须具有大的导数。

  • 图例3:非参数流形学习过程构建的最近邻图
    • 非参数流形学习过程构建的最近邻图
      在这里插入图片描述

    • 说明:

      • 非参数流形学习过程构建的最近邻图,其中节点表示训练样本,有向边指示最近邻关系。
      • 因此,各种过程可以获得与图的邻域相关联的切平面以及将每个训练样本与实值向量位置或嵌入 ( embedding \text{embedding} embedding) 相关联的坐标系。
      • 我们可以通过插值将这种表示概括为新的样本。
      • 只要样本的数量大到足以覆盖流形的弯曲和扭转,这些方法工作良好。
      • 图片来自 QMUL \text{QMUL} QMUL 多角度人脸数据集( Gong et al., 2000 \text{Gong et al., 2000} Gong et al., 2000)。

  • 图例4:如果每个位置处的切平面(见图例1)是已知的,则它们可以平铺后形成全局坐标系或密度函数。
    • 如果每个位置处的切平面(见图例1)是已知的,则它们可以平铺后形成全局坐标系或密度函数。
      在这里插入图片描述

    • 说明:

      • 每个局部块可以被认为是局部欧几里德坐标系或者是局部平面高斯或 ‘‘薄饼’’,在与薄饼正交的方向上具有非常小的方差而在定义坐标系的方向上具有非常大的方差。
      • 这些高斯的混合提供了估计的密度函数,如流形中的 Parzen \text{Parzen} Parzen窗口算法 ( Vincent and Bengio, 2003 \text{Vincent and Bengio, 2003} Vincent and Bengio, 2003) 或其非局部的基于神经网络的变体 ( Bengio et al., 2006c \text{Bengio et al., 2006c} Bengio et al., 2006c)。

总结

总而言之,使用自编码器学习数据中的流形结构,是深度学习领域的一项创新且强大的技术。它不仅能够帮助我们从高维数据的迷雾中抽丝剥茧,发现隐藏的低维特征,还能够为后续的数据分析、可视化及预测任务奠定坚实的基础。通过不断优化自编码器的网络结构和训练过程,我们能够更加精准地捕捉数据的流形特性,进而推动人工智能技术在各个领域的深入应用与发展。在这个数据驱动的时代,自编码器无疑是我们探索数据奥秘、挖掘数据价值的得力助手。

往期内容回顾

应用数学与机器学习基础 - 深度学习的动机与挑战篇

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

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

相关文章

从数据仓库到数据飞轮:数据技术演进的探索与思考

引言 在当今的数字化浪潮中,数据被视为一种极具价值的资源,类似于传统工业时代的石油,它为企业挖掘出深邃的洞察力,并成为决策过程中不可或缺的基石。随着技术的不断演进,数据管理的策略与架构也经历了显著的变革&…

Linux C高级 day1

1、 2、ubuntu中桥网络桥接模式配置流程: 首相需保证虚拟机提供了《桥接模式》 从菜单栏打开“虚拟机”选项卡下的“设置” ,如图设置虚拟机网络连接模式 此处无需勾选“复制物理网络连接状态” 而后 从菜单栏选择“编辑”下的“虚拟网络编辑器” &a…

leetcode75-9 压缩字符串 双指针原地算

题目太复杂了 没做出来 计算过程大概是双指针处理数组, 其中两个知识点一个是length 字符数组直接加 不用加括号 还有就是数字转字符需要转换 数字转换成字符 不能直接转换! 需借助数字转字符串, 首先将数字转为字符串,…

徒增成本,还是有备无患?说说4G模组SIM双卡切换

初学开发的小伙伴提出疑问: 手机双卡可以理解,人情世故各种缘由…… 物联网设备有必要双卡吗,会不会太浪费? 实际应用中,双卡可不是徒增成本的摆设,而是有备无患的必需。 在使用4G模组双卡功能的场景下&a…

掌握MySQL性能监控 · performance_schema 使用快速入门

performance_schema 使用快速入门 在数据库性能调优的过程中,performance_schema 是一个非常有用的工具,它可以帮助我们深入分析 MySQL 内部的性能表现。通过合理使用 performance_schema,我们可以发现数据库中的性能瓶颈并做出优化。本文将…

STM32快速复习(十二)FLASH闪存的读写

文章目录 一、FLASH是什么?FLASH的结构?二、使用步骤1.标准库函数2.示例函数 总结 一、FLASH是什么?FLASH的结构? 1、FLASH简介 (1)STM32F1系列的FLASH包含程序存储器、系统存储器和选项字节三个部分&…

XML映射器-动态sql

01-动态sql 1.实现动态条件SQL 第一种方法在sql语句中加入where 11其他条件都加and就行,这样就可以根据if条件来判断要传递的参数可以有几个 第二种方法用where标签给if语句包起来 where标签的作用如下图 第三种方法用trim标签解释如下图 用choose也可以实现条件查询如下图,…

pycharm连接远程linux服务器上的docker进行深度学习训练

实习过程中由于GPU都在服务器上,编辑代码很麻烦。并且服务器上配置了docker的环境,所以用pycharm连接远程服务器的docker进行深度学习,这样在本地调用远程服务器的GPU和环境,更方便一点,将这个过程记录下来&#xff0c…

高效开发,从暗藏玄机的文件系统开始—合宙Air201资产定位模组LuatOS

超低功耗、精准定位、快速量产——迷你小巧的合宙Air201,正给越来越多的行业客户带来高效开发体验。 4G-Cat.1模组的文件系统关乎数据传输速度、存储效率,以及数据安全性等等诸多因素,在应用开发中极为重要。 本期,我们来学习合…

QT 带箭头的控件QPolygon

由于对当前项目需要绘制一个箭头控件&#xff0c;所以使用了QPainter和QPolygon来进行绘制&#xff0c;原理就是计算填充&#xff0c;下面贴出代码和效果图 这里简单介绍下QPolygon QPolygon是继承自 QVector<QPoint>那么可以很简单的理解为&#xff0c;他就是一个点的…

比特币10年价格数据(2014-2024)分析(进阶2_时间序列分析)

数据入口&#xff1a;【每周挑战】比特币10年价格数据可视化和量化分析 - Heywhale.com 本数据集包含 2014 - 2024 的比特币美元价格数据&#xff0c;具体包含比特币每日的开盘价、最高价、最低价、收盘价以及成交量等关键信息。数据说明如下&#xff1a; 字段说明Date日期&a…

MES管理系统在智能制造中的重要应用

在智能制造的浪潮席卷之下&#xff0c;MES管理系统犹如一位精通生产艺术的智者&#xff0c;以其独到的洞察力和卓越的能力&#xff0c;引领着制造业向更加智能化、高效化的未来迈进。它不仅仅是一个数据汇聚的容器&#xff0c;更是信息处理的引擎、决策制定的伙伴&#xff0c;以…

游戏开发引擎__游戏场景(灯光,摄像机)

1.灯光 重要参数介绍 类型: 控制灯光的类型&#xff0c;有“定向”“点”“区域”和“聚光”4种模式。颜色: 控制灯光的颜色。模式: 控制灯光的光照模式&#xff0c;有“实时”“混合”和“烘焙”3种模式。强度: 控制灯光的明亮程度。间接乘数: 改变间接光的强度。阴影类型: …

亚信电子于IAS 2024展出最新IO-Link主站设备软件协议栈解决方案

亚信电子即将于IAS 2024展示最新的亚信IO-Link主站/设备软件协议栈、集成亚信IO-Link主站软件协议栈的AX58400 EtherCAT转IO-Link网关&#xff0c;以及AXM57104A TSN PCIe千兆以太网卡解决方案。 [台湾新竹讯, 2024年9月18日] 亚信电子&#xff08;ASIX Electronics Corporat…

Golang | Leetcode Golang题解之第415题字符串相加

题目&#xff1a; 题解&#xff1a; func addStrings(num1 string, num2 string) string {add : 0ans : ""for i, j : len(num1) - 1, len(num2) - 1; i > 0 || j > 0 || add ! 0; i, j i - 1, j - 1 {var x, y intif i > 0 {x int(num1[i] - 0)}if j &g…

二叉树的层序遍历(含十道leetcode相关题目)

文章目录 二叉树层序遍历模板102. 二叉树的层序遍历 二叉树层序遍历模板 我们之前讲过了关于二叉树的深度优先遍历的文章&#xff1a;前中后序遍历的递归法和迭代法。 接下来我们再来介绍二叉树的另一种遍历方式&#xff1a;层序遍历。 层序遍历一个二叉树。就是从左到右一层…

1.1 软件测试 + AI

欢迎大家订阅【软件测试】学习专栏&#xff0c;开启你的软件测试学习之旅&#xff01; 文章目录 前言一、软件测试二、人工智能的引入 前言 人工智能的引入为软件测试带来了巨大的变革&#xff0c;不仅提升了测试效率和准确性&#xff0c;也为软件质量的保障提供了新的手段。通…

微信小程序开发自带的自定义Navigation-bar避坑

最近新开了一个小程序项目&#xff0c;用了新版本的微信小程序开发工具。在模拟器上开发一直都很顺利&#xff0c;开发完成之后&#xff0c;要上到真机上进行测试&#xff0c;发现在华为的鸿蒙上&#xff0c;样式有点不对了。 居然NavigationBar被遮住了一半&#xff0c;发现在…

Spark-ShuffleWriter-UnsafeShuffleWriter-钨丝内存分配

一、上下文 《Spark-ShuffleWriter-UnsafeShuffleWriter》中提到在进行Page内存分配时&#xff0c;调用了一行代码 MemoryBlock page memoryManager.tungstenMemoryAllocator().allocate(acquired); 这里就会走MemoryManager的钨丝内存分配&#xff0c;下面我们来详细看下 …

MySQL高阶1831-每天的最大交易

题目 编写一个解决方案&#xff0c;报告每天交易金额 amount 最大 的交易 ID 。如果一天中有多个这样的交易&#xff0c;返回这些交易的 ID 。 返回结果根据 transaction_id 升序排列。 准备数据 Create table If Not Exists Transactions (transaction_id int, day date, …