Autoencoders

来源:互联网 发布:知乎绑定合适的话题 编辑:程序博客网 时间:2024/05/08 03:06
[译] 深度学习,维度灾难 和 Autoencoders
www.jianshu.com
Neil Zhu,简书ID Not_GOD,University AI 创始人 & Chief Scientist,致力于推进世界人工智能化进程。制定并实施 UAI 中长期增长战略和目标,带领团队快速成长为人工智能领域最专业的力量。 作为行业领导者,他和UAI一起在2014年创建了TASA(中国最早的人工智能社团), DL Center(深度学习知识中心全球价值网络),AI growth(行业智库培训)等,为中国的人工智能人才建设输送了大量的血液和养分。此外,他还参与或者举办过各类国际性的人工智能峰会和活动,产生了巨大的影响力,书写了60万字的人工智能精品技术内容,生产翻译了全球第一本深度学习入门书《神经网络与深度学习》,生产的内容被大量的专业垂直公众号和媒体转载与连载。曾经受邀为国内顶尖大学制定人工智能学习规划和教授人工智能前沿课程,均受学生和老师好评。
Autoencoder 是极其有趣的无监督学习的方法,在很多机器学习任务上 autoencoder 已经展示出了超过十多年研究积累的手选特征的性能。
本文由 Nikhil Buduma 发表在这里. 假设你参与了一个图像处理的项目,而目标就是设计一种算法来分析面部的表情推断情绪。算法的输入是一个 256 * 256 的灰度图,而输出则是一个情绪。{这里是不是可以分析出一个分布呢,soft classification} 例如,如果你输入下面的图片,期望出现一个标识为 happy 的算法结果。
Happy Ma
Happy Ma
现在一切都好,但是在我们满足于这个方法前,让我们退一步看看,我们将要做什么。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:
Paste_Image.png
Paste_Image.png
从图中可以看出,在一维的时候,数据点是非常稠密的。而随着维数的增加(如2维,3维),整个数据点的空间就形成非常庞大的空间(由 3 个,变成 9 个,再变成 27 个),相应地,数据分布就变得相当稀疏了。
这个维数爆炸的问题并不是通过更加高效的算法或者性能提升的硬件就可以解决的!对许多机器学习任务,收集训练样本就是最耗费时间的部分,所以这个数学结果逼着我们精心确定分析的维度。如果我们能够将输入限制在一个相当小得维度时,我们可能将一个 不可行的(unfeasible)问题 变成 可行的(feasible)!
回到我们刚开始的面部分类的问题,很清楚,我们不需要所有的 65,000 维度来对一幅照片进行分类。特别地,存在某些我们的大脑自动使用的来快速检测情绪的关键特征。例如,人类的嘴唇的曲线,他们的美貌,和眼睛的形状都可以帮助我们确定在图片中的人是不是快乐。这些特征可以很方便地通过寻找相关的位置或者不同面部 keypoint 和 keypoint 之间的距离来完成,
维度灾难
维度灾难
很明显,这样可以显著降低我们输入的维度(从 65,000 降到 60),但是这里也存在一些限制!手选特征会需要很多年的研究来进行优化。对很多的问题,这些起到作用的特征并不容易表达。例如,例如,选择特征来进行推广的对象识别就非常困难,算法需要从面部、汽车等对象中,区分鸟。那么我们如何从输入中抽取出来信息量最大的维度呢?这个问题是通过机器学习中的无监督学习解决的。下面我们会介绍一下 autoencoder,一种无监督学习的技术,最先由 Geoffery Hinton 提出的一种神经网络。我们会对 autoencoder 的原理进行介绍并与传统的线性方法如 计算机视觉中的 PCA 和 NLP 中的 LSA 进行比较。
Autoencoder 是一种无监督机器学习技术,使用了一个神经网络来产生一个高维输入的低维表示。传统的维度下降依赖于线性方法,如 PCA,找出高维数据中最大的方差的方向。通过选择这些方向,PCA 本质上刻画了包含了最终信息的方向。所以我们可以找到一个较小的维度的数目来作为降维的结果。然而,PCA 方法的线性性也是导致自身可以抽取出的特征维度类型上的很大限制。autoencoder 克服了这些限制通过引入神经网络天生的非线性性。
autoencoder 包含两个主要的部分,encoder 和 decoder 网络。encoder 网络在训练和部署时候使用,而 decoder 网络只在训练的时候用。encoder 网络的作用是用来发现给定数据的压缩表示。这里我们从一个2000 维的输入产生了其 30 维的表示。decoder 网络的作用仅仅是 encoder 网络的反射,是用来进行原始输入的尽可能地相同的重建的表示。在训练时,decoder 强迫 autoencoder 选择最有信息量的特征,最终保存在压缩表示中。重建的输入越靠近原始输入,最终得到的表示越好! 那么,这些 autoencoder 与其线性竞争者们相比如何?让我们看看 Hinton 和 Salakhutdinov 进行的实验。首先,我们看一下 autoencoder 使用 30 维重建后的图片与原始图片和 PCA 处理的图片对比一下。
autoencoder 中间,PCA 底部,原始图片 上方
autoencoder 中间,PCA 底部,原始图片 上方
autoencoder 重建出来的图片在视觉上比 PCA 输出的更好。然后看看 autoencoder 能不能提升可分性,通过比较autoencoder 的 2 维代码和 PCA 的 2 维表示在 MNIST 手写数字数据集上的表现。
autoencoder 右,PCA 左
autoencoder 右,PCA 左
最好,我们甚至在 NLP 任务中比较 autoencoder 和 LSA 看到了较大的提升。
autoencoder 右,PCA 左
autoencoder 右,PCA 左
Autoencoder 是一种无监督学习的新观点,对若干主要的机器学习任务,这已经显示了其对在十几年的手工特征的研究进展的超越!虽然我们这里已经讲解了很多关于 autoencoder 的内容,但仍然有不少需要注意的点。在下面的博客中,我们将深入研究 autoencoder 工作的机制,如何进行高效的训练,和其他一些精心的优化(例如稀疏性)。
原创粉丝点击