0、引言
在非监督学习中,最典型的一类神经网络莫过于autoencoder(自编码器),它的目的是基于输入的unlabeled数据X={x(1),x(2),x(3),…}X={x(1),x(2),x(3),…},通过训练得到数据的一个降维特征表达H={h(1),h(2),h(3),…}H={h(1),h(2),h(3),…}。以图像识别为例,隐层HH会提取出图像的边角,将这种更为抽象的特征作为后续的多层感知网络的输入,可以更好地表达输入图像,在图像分类等任务上获得更好的性能。
从最原始的自编码器衍生出很多不同的种类:
- 降噪自编码器,接受加噪的输入来进行训练
- 稀疏自编码器,对隐层的激活输出进行正则,同一时间只有部分隐层神经元是活跃的
- 栈式自编码器,级联多个自编码器,逐层提取抽象特征
1、去躁自编码器
和自编码器不同的是,降噪自编码的训练过程中,输入的数据有一部分是“损坏”的,DAE(Denoising Autoencoder)的核心思想是,一个能够从中恢复出原始信号的神经网络表达未必是最好的,能够对“损坏”的原始数据编码、解码,然后还能恢复真正的原始数据,这样的特征才是好的。在论文“Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a Local Denoising Criterion”中,阐述了DAE的原理,如下图所示:
2、代码示例:
# -*- coding: utf-8 -*-
"""
Created on Sun May 27 17:49:18 2018
# -*- coding: utf-8 -*-
"""
import tensorflow as tf
import numpy as np
import matplotlib.pyplot as plt
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets('MNIST_data', one_hot=True)
print(type(mnist)) # <class 'tensorflow.contrib.learn.python.learn.datasets.base.Datasets'>
print('Training data shape:', mnist.t