前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >深度学习,维度灾难 和 Autoencoders

深度学习,维度灾难 和 Autoencoders

作者头像
用户1737318
发布2018-06-05 15:50:23
1.6K0
发布2018-06-05 15:50:23
举报
文章被收录于专栏:人工智能头条人工智能头条

英文原文由 Nikhil Buduma 发表在:

http://www.kdnuggets.com/2015/03/deep-learning-curse-dimensionality-autoencoders.html

假设你参与了一个图像处理的项目,而目标就是设计一种算法来分析面部的表情推断情绪。算法的输入是一个 256 * 256 的灰度图,而输出则是一个情绪。{这里是不是可以分析出一个分布呢,soft classification} 例如,如果你输入下面的图片,期望出现一个标识为 happy 的算法结果。

Happy Man

现在一切都好,但是在我们满足于这个方法前,让我们退一步看看,我们将要做什么。256*256 的灰度图对应于一个 65,000 的输入向量!换句话说,我们要解决一个 65,000 维空间上的问题。这对计算机来说不是一件简单的事情。不仅大规模的输入非常难存储,移动和计算,而且他们会导致一些相当棘手的可有效计算性上的问题。

维度在指数级的爆炸增长

让我们粗略看看在维度增长时,一个机器学习问题的难度如何增加的。根据 1982 年 C. J. Stone 的这个 研究,用来训练模型的时间(非参数回归)最优情况下和 m^{-p/(3p+d)} 成比例,其中 m 是数据点的数目,d 是数据的维度,p 则是依赖于使用的模型的参数(假设回归函数是 p 次可微的)简而言之,这个关系说明我们的数据的维度增加时需要指数级数量的训练样本。

我们可以从一个 Gutierrez 和 Osuna 提供的简单的可视化例子中看到这点。我们的学习算法将特征空间均匀地划分成 bin 并将训练样本画出来。接着我们赋给每个 bin 一个 label,基于在那个 bin 中占统治地位的样本的 label。最终,对每个新来的需要进行分类的样本,我们仅仅需要弄清楚在那个样本落入的 bin,以那个 bin 的 label 作为预测的结果! 在这个例子中,我们刚开始挑选了单一的特征(一维的输入)并划分空间成 3 个简单的 bin:

从图中可以看出,在一维的时候,数据点是非常稠密的。而随着维数的增加(如2维,3维),整个数据点的空间就形成非常庞大的空间(由 3 个,变成 9 个,再变成 27 个),相应地,数据分布就变得相当稀疏了。

在维数增加的时候,稀疏性就指数级地更加明显

这个维数爆炸的问题并不是通过更加高效的算法或者性能提升的硬件就可以解决的!对许多机器学习任务,收集训练样本就是最耗费时间的部分,所以这个数学结果逼着我们精心确定分析的维度。如果我们能够将输入限制在一个相当小得维度时,我们可能将一个 不可行的(unfeasible)问题 变成 可行的(feasible)!

手工特征选取

回到我们刚开始的面部分类的问题,很清楚,我们不需要所有的 65,000 维度来对一幅照片进行分类。特别地,存在某些我们的大脑自动使用的来快速检测情绪的关键特征。例如,人类的嘴唇的曲线,他们的美貌,和眼睛的形状都可以帮助我们确定在图片中的人是不是快乐。这些特征可以很方便地通过寻找相关的位置或者不同面部 keypoint 和 keypoint 之间的距离来完成,

维度灾难

人类面部表达的关键特征

很明显,这样可以显著降低我们输入的维度(从 65,000 降到 60),但是这里也存在一些限制!手选特征会需要很多年的研究来进行优化。对很多的问题,这些起到作用的特征并不容易表达。例如,例如,选择特征来进行推广的对象识别就非常困难,算法需要从面部、汽车等对象中,区分鸟。那么我们如何从输入中抽取出来信息量最大的维度呢?这个问题是通过机器学习中的无监督学习解决的。下面我们会介绍一下 autoencoder,一种无监督学习的技术,最先由 Geoffery Hinton 提出的一种神经网络。我们会对 autoencoder 的原理进行介绍并与传统的线性方法如 计算机视觉中的 PCA 和 NLP 中的 LSA 进行比较。

Autoencoder 简介

Autoencoder 是一种无监督机器学习技术,使用了一个神经网络来产生一个高维输入的低维表示。传统的维度下降依赖于线性方法,如 PCA,找出高维数据中最大的方差的方向。通过选择这些方向,PCA 本质上刻画了包含了最终信息的方向。所以我们可以找到一个较小的维度的数目来作为降维的结果。然而,PCA 方法的线性性也是导致自身可以抽取出的特征维度类型上的很大限制。autoencoder 克服了这些限制通过引入神经网络天生的非线性性。

Autoencoder 的基本结构

autoencoder 包含两个主要的部分,encoder 和 decoder 网络。encoder 网络在训练和部署时候使用,而 decoder 网络只在训练的时候用。encoder 网络的作用是用来发现给定数据的压缩表示。这里我们从一个2000 维的输入产生了其 30 维的表示。decoder 网络的作用仅仅是 encoder 网络的反射,是用来进行原始输入的尽可能地相同的重建的表示。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。重建的输入越靠近原始输入,最终得到的表示越好! 那么,这些 autoencoder 与其线性竞争者们相比如何?让我们看看 Hinton 和 Salakhutdinov 进行的实验。首先,我们看一下 autoencoder 使用 30 维重建后的图片与原始图片和 PCA 处理的图片对比一下。

autoencoder 中间,PCA 底部,原始图片 上方

autoencoder 重建出来的图片在视觉上比 PCA 输出的更好。然后看看 autoencoder 能不能提升可分性,通过比较autoencoder 的 2 维代码和 PCA 的 2 维表示在 MNIST 手写数字数据集上的表现。

autoencoder 右,PCA 左

最好,我们甚至在 NLP 任务中比较 autoencoder 和 LSA 看到了较大的提升。

autoencoder 右,PCA 左

结论

Autoencoder 是一种无监督学习的新观点,对若干主要的机器学习任务,这已经显示了其对在十几年的手工特征的研究进展的超越!虽然我们这里已经讲解了很多关于 autoencoder 的内容,但仍然有不少需要注意的点。在下面的博客中,我们将深入研究 autoencoder 工作的机制,如何进行高效的训练,和其他一些精心的优化(例如稀疏性)。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-10-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 人工智能头条 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 维度在指数级的爆炸增长
  • 在维数增加的时候,稀疏性就指数级地更加明显
  • 手工特征选取
  • 人类面部表达的关键特征
  • Autoencoder 简介
  • Autoencoder 的基本结构
  • 结论
相关产品与服务
图像处理
图像处理基于腾讯云深度学习等人工智能技术,提供综合性的图像优化处理服务,包括图像质量评估、图像清晰度增强、图像智能裁剪等。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档