PCA & Autoencoders通俗解析

简介: 一文比较主成分分析,自编码器及稀疏自编码器。

1
来源:FK Films

自动编码器(Autoencoder)通过将数据映射到低维空间,提取数据的显著特征。该过程会对数据进行压缩编码,即“encoder”, “auto” 则体现在其能决定如何重组数据。其中编码特征被称为潜在变量。

为什么这样做:

  1. 降低数据维度从而缩短训练时间
  2. 挖掘潜在特征从而提高模型性能

潜在变量本质上是一些数据的隐式特征,它无法通过直接观察或测量得到。幸福就好比一个潜在变量,我们必须使用类似问卷调查的方式才有可能对一个人的幸福程度做出衡量。

与自动编码器一样,主成分分析(PCA,Principal Component Analysis)也是常用于降低数据维度。

举个简单的例子,你要送朋友一辆乐高跑车作为生日礼物。但是你用来装礼物的盒子不够大,无法装下全部零件。这时你就需要根据零件对汽车的重要性来判断是否扔掉它。像车把手和雨刷这类琐碎的零件就可以考虑丢弃,而留下车轮和车架之类的重要部件。朋友收到包裹后,在没有任何提示的情况下,会对组装它感到困惑。但最终,你的朋友还是搭建好了它,并能识别出它是一辆可驾驶的汽车。只是他们不知道这辆车到底是赛车、小轿车还是越野车。

上面的例子形象的讲解了有损数据压缩算法。由于一些原始数据(如部分乐高积木块)的丢失,数据的质量没有保留完整。尽管使用PCA和Autoencoders算法进行降维是有损的,但就如同示例中进行特征选择一样,二者抛弃数据中的某些特征是为了保留更为重要的显著特征。

主成分分析

还是基于上述场景,假设一年过去了,你朋友的生日又快到了。你决定给他们买一辆乐高汽车,因为去年他们有告诉你非常喜欢你送的礼物。有了上次的经验,你不会再买一个小盒子了。这一次,你想着将乐高积木系统地分割成小块,使他们能够更好的装进盒子。上一次,由于天线太长了无法装进盒子,只能丢弃,而这一次你把它分割成了三等分再装进盒子。当你的朋友收到这份礼物时,他们会把一些零件粘合在一起从而对汽车进行组装。他们将扰流板和轮毂盖粘合在一起,这样一来,就很容易辨认这是一辆乐高汽车了。

1

主成分分析是一种用于降维的统计方法,它借助于一个正交变换,将其分量相关的原随机向量转化成其分量不相关的新随机向量,这在代数上表现为将原随机向量的协方差阵变换成对角形阵,在几何上表现为将原坐标系变换成新的正交坐标系,然后对多维变量进行降维处理,使之能以一个较高的精度转换成低维变量系统,再通过构造适当的价值函数,进一步把低维系统转化成一维系统。

1
Original Data (left) 1st Principal Component & Data (right)

主成分分析把给定的一组相关变量通过线性变换转成另一组不相关的变量,这些新的变量按照方差依次递减的顺序排列。在数学变换中保持变量的总方差不变,使第一变量具有最大的方差,称为第一主成分,第二变量的方差次大,并且和第一变量不相关,称为第二主成分。我们希望主成分朝向方差最大的方向,因为该方向上携带的原始数据信息多,预测结果将会更为准确。好比你想预测一辆汽车的价格,有两个属性:颜色和品牌。所有汽车颜色相同,只是品牌有差异。那么根据颜色来预测汽车的价格显然不行。但当我们考虑品牌这个特性时,便能更好的预测价格,毕竟奥迪和法拉利定价总高于本田和丰田。PCA产生的主要成分是输入变量的线性组合,就像粘合的乐高积木是原始积木的线性组合一样。这些主要组件的线性性质能帮助我们更好的理解转换后的数据。

1
Data projected onto 1st principal component (Source: Author)

主成分分析优点:

  1. 降低数据维度
  2. 易于理解
  3. 提升运行速度

主成分分析缺点:

  1. 无法学习非线性特征

自动编码器

1
Autoencoder Architecture

将自动编码器的思想融合进刚才的例子便稍显奇怪。由于盒子大小的限制,你可能不仅限于切割零件,甚至开始融化、拉长和弯曲部分零件,随之产生的零件能够代表汽车最重要的特性。这样做能让盒子中装入更多的乐高积木,甚至还能够创建属于你自己的乐高。但是当你朋友收到这个包裹时,却不知道如何处理这些乐高玩具。由于改装后的零件过于与众不同,以至于你需要用几辆车重复这个过程无数次,才能以一种系统的方式将原来的零件转换成可以由你的朋友组装成汽车的零件。
希望上面的类比能够帮助你更好的理解自动编码器和PCA。在自动编码器中,假设你是编码器,你的朋友是解码器,你的工作就是对数据进行转换,使得你的朋友能够最大程度的理解和重构解码前的数据。

自动编码器可以被看作是一种特殊的前馈神经网络,经过训练后能尝试将输入复制到输出。

自动编码器优点:

  1. 能够学习到非线性特性
  2. 降低数据维度

自动编码器缺点:

  1. 训练的计算成本高
  2. 可解释性较差
  3. 背后的数学知识复杂
  4. 容易产生过度拟合的问题,尽管可以通过引入正则化策略缓解

稀疏自动编码器

1
Sparse Autoencoder Loss Function (Source: Andrew Ng)

稀疏自动编码器的灵感来源于大脑中突触的稀疏。整个神经网络中隐藏的神经元会挖掘输入数据的特征。普通的自动编码器通过不完全的架构(不完全是指隐藏层的神经元个数比输入层少)学习潜在特征。稀疏自动编码器的思想是,通过一个与架构无关的约束——稀疏约束来学习潜在的特征。

稀疏约束是通过设置ρ的值,通常是一个接近于零的值,使神经元的激活值较小。公式中的ρ是一个稀疏参数,ρ hat j为隐藏单位j的平均激活值。

我们通过添加由KL散度和权重β组成的惩罚项来最优化目标函数。KL散度度量了两个分布的不同。在损失函数中加入这一项可以激励模型优化参数,使激活值分布与稀疏参数分布之间的KL散度尽可能小。

通过让激活值更大程度趋近于零以使神经元处于抑制状态,只在关键的时候触发,从而提高准确性。

总结

本文深入讲解了PCA和自动编码器的相关概念。多数情况下,相较自动编码器,PCA优势更为明显——执行速度更快,易于解释,缓解维度灾难。但如果您需要挖掘数据的非线性特性,应首选自动编码器。值得注意的是,自动编码器通过挖掘潜在特性提高模型性能,但这些模糊的特性或许会对知识发现的结果产生不良影响。

以上为译文

本文由阿里云云栖社区组织翻译。

文章原标题《PCA & Autoencoders: Algorithms Everyone Can Understand》,作者:Thomas Ciha,译者:Elaine,审校:袁虎。

文章为简译,更为详细的内容,请查看原文

相关文章
|
机器学习/深度学习 数据可视化 TensorFlow
一文入门卷积神经网络:CNN通俗解析
CNN基础知识介绍及TensorFlow具体实现,对于初学者或者求职者而言是一份不可多得的资料。
21018 0
|
算法 决策智能 C++
干货 |【算法】禁忌搜索算法(Tabu Search,TS)超详细通俗解析附C++代码实例
干货 |【算法】禁忌搜索算法(Tabu Search,TS)超详细通俗解析附C++代码实例
1297 0
|
存储 XML Java
SharedPreferences的通俗解析:
SharedPreferences的通俗解析: 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友。对于软件配置参数的保存,如果是window软件通常我们会采用ini文件进行保存,如果是j2se应用,我们会采用properties属性文件进行保存。
1013 0
|
监控 Java 应用服务中间件
高级java面试---spring.factories文件的解析源码API机制
【11月更文挑战第20天】Spring Boot是一个用于快速构建基于Spring框架的应用程序的开源框架。它通过自动配置、起步依赖和内嵌服务器等特性,极大地简化了Spring应用的开发和部署过程。本文将深入探讨Spring Boot的背景历史、业务场景、功能点以及底层原理,并通过Java代码手写模拟Spring Boot的启动过程,特别是spring.factories文件的解析源码API机制。
462 2
|
12月前
|
算法 测试技术 C语言
深入理解HTTP/2:nghttp2库源码解析及客户端实现示例
通过解析nghttp2库的源码和实现一个简单的HTTP/2客户端示例,本文详细介绍了HTTP/2的关键特性和nghttp2的核心实现。了解这些内容可以帮助开发者更好地理解HTTP/2协议,提高Web应用的性能和用户体验。对于实际开发中的应用,可以根据需要进一步优化和扩展代码,以满足具体需求。
1124 29
|
12月前
|
前端开发 数据安全/隐私保护 CDN
二次元聚合短视频解析去水印系统源码
二次元聚合短视频解析去水印系统源码
470 4
|
12月前
|
JavaScript 算法 前端开发
JS数组操作方法全景图,全网最全构建完整知识网络!js数组操作方法全集(实现筛选转换、随机排序洗牌算法、复杂数据处理统计等情景详解,附大量源码和易错点解析)
这些方法提供了对数组的全面操作,包括搜索、遍历、转换和聚合等。通过分为原地操作方法、非原地操作方法和其他方法便于您理解和记忆,并熟悉他们各自的使用方法与使用范围。详细的案例与进阶使用,方便您理解数组操作的底层原理。链式调用的几个案例,让您玩转数组操作。 只有锻炼思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~
|
12月前
|
移动开发 前端开发 JavaScript
从入门到精通:H5游戏源码开发技术全解析与未来趋势洞察
H5游戏凭借其跨平台、易传播和开发成本低的优势,近年来发展迅猛。接下来,让我们深入了解 H5 游戏源码开发的技术教程以及未来的发展趋势。
|
12月前
|
存储 前端开发 JavaScript
在线教育网课系统源码开发指南:功能设计与技术实现深度解析
在线教育网课系统是近年来发展迅猛的教育形式的核心载体,具备用户管理、课程管理、教学互动、学习评估等功能。本文从功能和技术两方面解析其源码开发,涵盖前端(HTML5、CSS3、JavaScript等)、后端(Java、Python等)、流媒体及云计算技术,并强调安全性、稳定性和用户体验的重要性。
|
机器学习/深度学习 自然语言处理 算法
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
生成式 AI 大语言模型(LLMs)核心算法及源码解析:预训练篇
3359 1

推荐镜像

更多
  • DNS