【转载】自动编码器

什么是自动编码器

1.1 Auto Encoder

自编码神经网络是一种无监督学习算法,它使用了反向传播算法,并让目标值等于输入值,比如y(i)=x(i) 。下图是一个自编码神经网络的示例。
在这里插入图片描述
自动编码器(autoencoder) 是神经网络的一种,该网络可以看作由两部分组成:一个编码器函数h = f(x) 和一个生成重构的解码器r = g(h)。传统上,自动编码器被用于降维或特征学习
自编码神经网络尝试学习的一个函数为:
在这里插入图片描述

换句话说,它尝试逼近一个恒等函数,从而使得输出x(2)接近于输入x(1) 。恒等函数虽然看上去不太有学习的意义,但是当我们为自编码神经网络加入某些限制,比如限定隐藏神经元的数量,我们就可以从输入数据中发现一些有趣的结构。

举例来说,假设某个自编码神经网络的输入x 是一张 10×10图像(共100个像素)的像素灰度值,于是 n=100 ,其隐藏层L2中有50个隐藏神经元。

注意,输出也是100维。由于只有50个隐藏神经元,我们迫使自编码神经网络去学习输入数据的压缩表示,也就是说,**它必须从50维的隐藏神经元激活度向量a(2)中重构出100维的像素灰度值输入x **。

一些需要注意的问题

如果网络的输入数据是完全随机的,比如每一个输入都是一个跟其它特征完全无关的独立同分布高斯随机变量,那么这一压缩表示将会非常难学习。**但是如果输入数据中隐含着一些特定的结构,比如某些输入特征是彼此相关的,那么这一算法就可以发现输入数据中的这些相关性。**事实上,这一简单的自编码神经网络通常可以学习出一个跟主元分析(PCA)结果非常相似的输入数据的低维表示

1.2 Deep Auto Encoder(DAE)

2006 年,Hinton 对原型自动编码器结构进行改进,进而产生了DAE,先用无监督逐层贪心训练算法完成对隐含层的预训练,然后用BP 算法对整个神经网络进行系统性参数优化调整,显著降低了神经网络的性能指数,有效改善了BP 算法易陷入局部最小的不良状况。

简单来说,DAE相对于原始的Auto Encoder加大了深度,提高学习能力,更利于预训练。如图2所示,一个5层的DAE,隐层节点数从高到低,再从低到高,最终只需要取得L(3)的向量即可。

在这里插入图片描述

1.3 利用keras实现DAE1

# -*- coding: utf-8 -*-

import pandas as pd
import numpy as np
from keras.layers import Dense,Activation,Input
from keras.models import Sequential,Model
import theano

#可以自行替换为自己的数据
go = pd.read_csv('./clear_data/gene_ontology.csv')
go_id = go['Gene_ID']
go = go.drop(['Gene_ID'],axis=1)

inputDims = go.values.shape[1]
EncoderDims = 100

AutoEncoder = Sequential()
AutoEncoder.add(Dense(input_dim=inputDims,output_dim=EncoderDims,activation='relu'))
AutoEncoder.add(Dense(input_dim=EncoderDims,output_dim=inputDims,activation='sigmoid'))

AutoEncoder.compile(optimizer='adadelta',loss='binary_crossentropy')

AutoEncoder.fit(go.values,go.values,batch_size=32,nb_epoch=50,shuffle=True)  #,validation_data

1.4 取DAE隐层向量1

get_feature = theano.function([AutoEncoder.layers[0].input],AutoEncoder.layers[0].output,allow_input_downcast=False)
new_go = get_feature(go)

1.5 参考文献

1. Rumelhart DE,Hinton GE,Williams RJ. Learning representations by back-propagating errors[J]. Nature,1986,323: 533-536.
2. Hinton GE,Osinder S,Teh Y W. A fast learning algorithm for deep belief nets[J].Neural Computation,2006,18( 7) : 1527-1554.
3. http://deeplearning.stanford.edu/wiki/index.php/Autoencoders_and_Sparsity

其他类型的AE

2.1 去噪自动编码器(denoising auto encode)

这种自动编码在输入层或输入数据 x 中加入噪声,造成输入数据的部分丢失,并将原始的数据作为输出,这使得自动编码器学习如何剔除数据中的噪声,能学到更能反应输入数据的本质特征。传统自动编码器单纯依靠最小化输入与重构信号之间的误差来得到输入的隐含层特征表示,但这种训练策略并不能保证提取到数据的本质特征,因为单纯依靠最小化重构误差可能导致编码器学习到的特征仅仅是原始输入的复制。为避免上述问题,引入噪声注入策略,这就是DAE产生的动机。

2.2 堆叠去噪自动编码器(Stacked Denoising Auto Encoder,SDAE)

堆叠自动编码器方法与DBN相同,具体过程描述如下:(1)给定初始输入,采用无监督方式训练第一层自动编码器,减小重构误差达到设定值。(2)把第一个自动编码器隐含层的输出2作为第二个自动编码器的输入,采用以上同样的方法训练自动编码器。(3)重复第二步直到初始化完成所有自动编码器。(4)把最后一个堆叠自动编码器的隐含层的输出作为分类器的输入,然后采用有监督的方法训练分类器的参数。图3给出了含三层AD的堆叠自动编码器的生成过程。
图3 可见,在训练堆叠的自动编码器的过程中,需要不断抛弃训练好的AE中的解码器


  1. 使用了Theano。Theano 是神经网络python机器学习的模块,与tensorflow类似 ↩︎ ↩︎

  2. 可见,在训练堆叠的自动编码器的过程中,需要不断抛弃训练好的AE中的解码器 ↩︎

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值