深度学习,维度灾难 和 Autoencoders

英文原文由 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 工作的机制,如何进行高效的训练,和其他一些精心的优化(例如稀疏性)。

原文发布于微信公众号 - 人工智能头条(AI_Thinker)

原文发表时间:2015-10-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏应兆康的专栏

27. 减少方差的技术

2106
来自专栏美团技术团队

【机器学习InAction系列】机器学习如何解决问题

前言 随着大数据时代的到来,机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界和工业界对机器学习的...

42410
来自专栏美团技术团队

【机器学习InAction系列】数据清洗与特征处理综述

前言 随着大数据时代的到来,机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界和工业界对机器学习的...

52212
来自专栏AI研习社

怎么选择机器学习算法?SAS首席科学家为你讲解

本文面向的是入门到中级的数据科学家,或对利用机器学习算法来解决问题感兴趣的数据分析师。 面对各种各样的机器学习算法——“我应该用哪一个?”,是一名初学者经常遇到...

3745
来自专栏人工智能头条

机器学习入门概览

1093
来自专栏AI科技大本营的专栏

ICML2018见闻 | 迁移学习、多任务学习领域的进展

【导读】如今 ICML(International Conference on Machine Learning,国际机器学习大会)已经成为有巨大影响力的会议,...

2252
来自专栏机器之心

学界 | 超越ImageNet:谷歌内建300M图像数据集揭露精度与数据的线性增长关系

F选自Google Research 机器之心编译 参与:蒋思源、路雪 自残差网络以来,深度模型拥有了极大的容量,同时 GPU、TPU 等硬件为深度学习提供了巨...

3029
来自专栏应兆康的专栏

27. 减少方差的技术

• 添加更多的训练数据:这是最简单也是最可靠的一种方式来处理方差,只要你能访问大量的数据并有足够的计算能力来处理它们。

1854
来自专栏大数据挖掘DT机器学习

用Python进行机器学习小案例

概要 本文是用Python编程语言来进行机器学习小实验的第一篇。主要内容如下: 读入数据并清洗数据 探索理解输入数据的特点 分析如何为学习算法呈现数据 选择正确...

4339
来自专栏CDA数据分析师

美团实例详解机器学习如何解决问题

前言 随着大数据时代的到来,机器学习成为解决问题的一种重要且关键的工具。不管是工业界还是学术界,机器学习都是一个炙手可热的方向,但是学术界和工业界对机器学习的...

2199

扫码关注云+社区

领取腾讯云代金券