人工智能之Autoencoder算法
原创 张志荣
前言:人工智能机器学习有关算法内容,请参见公众号“科技优化生活”之前相关文章。人工智能之机器学习主要有三大类:1)分类;2)回归;3)聚类。今天我们重点探讨一下Autoencoder算法。 ^_^
Autoencoder自动编码器算法是深度学习最常见的算法之一,因此值得研究。Autoencoder自动编码器是神经网络NN[(请参见人工智能(23)]的一种,今天就跟大家介绍一下Autoencoder算法。
Autoencoder自动编码器是1986年由Rumelhart 提出,可用于高维复杂数据处理, 它促进了神经网络NN的发展。自动编码神经网络是一种无监督学习算法(训练示例未标记),它使用了BP反向传播算法,并让目标值等于输入值。
Autoencoder自动编码器被用于降维或特征学习。之前介绍过两种降维方法:PCA[请参见人工智能(46)]和SVD[请参见人工智能(54)]。
Autoencoder自动编码器是多层神经网络,其中输入层和输出层表示相同的含义,具有相同的节点数, 即输出层的神经元数量完全等于输入层神经元的数量。隐藏层的神经元数量少于输出层的神经元数量。如下图所示:
Autoencoder算法概念:
Autoencoder自动编码器是神经网络NN的一种,经过训练后能尝试将输入复制到输出,换句话说,就是使输出的内容和输入的内容一样。Autoencoder自动编码器学习的是一个输入输出相同的“恒等函数”。
自动编码器的网络结构很简单,包括Input Layer,Hidden Layer和Output Layer。其中,动编码器内部有一个隐含层h,可以产生编码来表示输入。该网络可以看作由两部分组成:一个编码器h=f(x)和一个生成重构的解码器r=g(h)。最后使得x约等于g(f(x))。可以通过设计网络使得x=g(f(x))。
Autoencoder算法本质:
Autoencoder算法本质是:将神经网络NN的隐含层看成是一个编码器和解码器,输入数据经过隐含层的编码和解码,到达输出层时,确保输出的结果尽量与输入数据保持一致。也就是说,隐含层是尽量保证输出数据等于输入数据的。
理论上可以的,但实际不这么做。Autoencoder自动编码器应该设计成不能学会完美地复制,通过强加一些约束,使Autoencoder自动编码器只能近似地复制,因此它能学习到数据的有用特性。
Autoencoder自动编码器网络的约束如下:
1)HiddenLayer的维度要远小于Input Layer维度;
2)Output用于重构Input,即让误差L(Input,Output)最小。
因为是无标签数据,所以误差的来源就是重构后与输入相比得到的。
Autoencoder算法描述:
Autoencoder自动编码器可以看做将数据进行压缩,由原来的“n维”压缩成“m维”,其中m为隐藏层神经元数目。然后再在需要的时候用损失尽量小的方式将数据恢复出来。
算法描述:
1)Autoencoder自动编码网络是要将经过压缩的数据还原,即将学习一组hW,b≈x,这是算法要学习的参数。
2)还原数据应该使得损失尽量小,规定了目标函数为:
J(W,b)=(∑(x^−x)^2)/m
AutoEncoder通过普通的BP神经网络进行预训练,从而确定神经网络中权重矩阵W的初始值。其目标是让输入值等于输出值。首先用W对输入进行编码,经过激活函数后,再用WT进行解码,从而使得h(x)≈x。该过程可以看作是对输入数据的压缩编码,将高维的原始数据用低维的向量表示,使压缩后的低维向量能保留输入数据的典型特征,从而能够较为方便的恢复原始数据。需要注意的是:在对数据进行编码和解码时,使用的是同一个参数矩阵W。这可看作是一种约束,可以减少参数个数,降低模型复杂度。
数据压缩是指限制隐藏层神经元数量。数据压缩依靠的是数据本身是有冗余信息的。当输入是完全随机,相互独立同分布的时候,网络将很难学得一个有效的压缩模型,然而现实中的数据(自然图像、语言、声音)总是存在不同程度的冗余性。Autoencoder自编码网络通过学习发现并去掉了这些冗余信息。
实际上,自编码网络学习出的低维数据表示十分类似于PCA[请参见人工智能(46)]学习出的主成分。学习过程可以简单地描述为最小化一个损失函数L(x,g(f(x)))+Ω(h) , Ω(h)是惩罚项。当解码器是线性的且L是均方误差,就可以学习出与PCA方法相同生成子空间。AutoEncoder其实是增强的PCA。AutoEncoder 具有非线性变换单元,因此学出来的Code可能更精炼,对Input的表达能力更强。
另外一种数据压缩方式就是限制隐藏层的稀疏性,要求隐藏层中的激活神经元是“稀疏”的,即隐藏层中大部分神经元处于非激活状态。这样的编码器称为SparseAutoencoder稀疏自编码器。
SparseAutoencoder稀疏自编码器的全局损失函数为:
算法流程大概为:由输入与输出的差别构造准则函数,再求各个参数的偏导数,再用BP方式更新各个权重(采用梯度下降法)。在Sparse Autoencoder网络训练中,前向传播步骤应同时计算ρ,然后在后向传播步骤时做相应的修改。
Autoencoder算法意义:
Autoencoder自动编码器尝试逼近一个恒等函数,使得输出x^接近于输入x。当然为了使这个函数有意义,需要加入一些限制条件,比如说限制隐藏神经元的数目,就可以发现一些有意义的结构。Autoencoder可以学习到数据的一些压缩表示。例如如果输入数据为200维,隐藏层为100个,那么就需要从这100维的数据中重构出200维的输出,使这个输出接近于200维的输入。因此这个隐藏层的100维的数据就必然会包含着输入数据的一些相关性。所以说Autoencoder就是为了学习到输入数据的相关性表示的一种方法。
Autoencoder算法优点:
1)有降维效果,可以用于提取主要特征;
2)可以抓住主要特征,故具有一定抗噪能力;
3)稀疏的可解释性好,现实场景大多满足这种约束;
4)算法比较稳健;
5)表达能力强;
6)扩展能力强;
7)便于数据可视化分析。
Autoencoder算法缺点:
1)理论上看起来很智能,但是实际上并不太好用;
2)压缩能力仅适用于与训练样本相似的样本;
3)要求 encoder 和 decoder 的能力不能太强。
Autoencoder算法改进:
Hinton于2006年对原型自动编码器结构进行改进,产生了DAE(Deep Auto Encoder),先用无监督逐层贪心训练算法完成对隐含层的预训练,然后用BP 算法对整个神经网络进行系统性参数优化调整,显著降低了神经网络NN的性能指数,有效改善了BP 算法易陷入局部最小问题。
DAE相对于AutoEncoder加大了深度,提高学习能力,更利于预训练。
DenoisingAutoEncoder去噪自动编码器是AutoEncoder的一个变种,与AutoEncoder不同的是,Denoising AutoEncoder在输入的过程中加入了噪声信息,从而让AutoEncoder能够学习这种噪声。Denoising AutoEncoder与RBM[(请参见人工智能(37)]非常像(参数、作用和过程类似),但也有区别(原理、训练准则和训练方法等不一样)。
Autoencoder算法应用:
Autoencoder算法期望利用样本自适应学习出稳健、表达能力强、扩展能力强的设想很好,但是实际中应用场景很有限。一般可以应用于机器学习之数据降维、特征抽取和数据可视化分析,也被扩展用于生成模型中(有学者说效果惊人)。
结语:
Autoencoder算法是机器学习之深度学习最常见的算法之一,它是一种无监督的学习算法,值得深入研究。Autoencoder网络结构可以有多层,且多层网络可以由标准的BP算法来更新网络权重和偏置,与标准神经网络不同的是Autoencoder的输入层和输出层是“同一层”。AutoEncoder其实是增强的PCA。Autoencoder算法是一种非常实用的学习算法,应用范围一般,但扩展能力强,可以应用于机器学习之数据降维、特征抽取和数据可视化分析,也被扩展用于生成模型中。
-----以往文章推荐-----
机器学习
深度学习
人工神经网络
决策树
随机森林
强化学习
迁移学习
遗传算法
朴素贝叶斯
支持向量机
蒙特卡罗方法
马尔科夫模型
Hopfield神经网络
回归模型
K邻近算法
卷积神经网络
受限玻尔兹曼机
循环神经网络
长短时记忆神经网络
Adaboost算法
ID3算法
C4.5算法
CART算法
K-Means算法
Apriori算法
PCA算法
ICA算法
TD-Learning算法
Q-Learning算法
SOM算法
GBM算法
GBDT算法
EM算法
SVD算法