人工智能A7论坛 >> Tensorflow和深度学习笔记_论坛版 >> 4.深度学习预备知识

4.3 AutoEncoder自编码器

    Autoencoder(自动编码器)是一种尽可能复现输入信号的神经网络。为了实现这种复现,自动编码器就必须捕捉可以代表输入数据的最重要的因素,就像PCA那样,找到可以代表原信息的主要成分。

     是一种无监督的学习算法,他利用反向传播算法,让目标值等于输入值。

如图所示:

如果用矩阵的形式,可以看得更加清晰

 

    在研究中可以发现,如果在原有的特征中加入这些AutoEncoder(自动编码器)自动学习得到的特征可以大大提高精确度,甚至在分类问题中比目前最好的分类算法效果还要好!

 

     AutoEncoder存在一些变体,这里简要列举两个:

 

Sparse AutoEncoder稀疏自动编码器

Denoising AutoEncoders降噪自动编码器

     DBNs不同,自动编码器使用判别模型,这样这个结构就很难采样输入采样空间,这就使得网络更难捕捉它的内部表达。但是,降噪自动编码器却能很好的避免这个问题,并且比传统的DBNs更优。它通过在训练过程添加随机的污染并堆叠产生场泛化性能。训练单一的降噪自动编码器的过程和RBMs训练生成模型的过程一样。

 

tensorflow中,自编码器的网络构造示例如下

# Building the encoder

def encoder(x):

    # Encoder Hidden layer with sigmoid activation #1

    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['encoder_h1']),

                                   biases['encoder_b1']))

    # Decoder Hidden layer with sigmoid activation #2

    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['encoder_h2']),

                                   biases['encoder_b2']))

    return layer_2

 

 

# Building the decoder

def decoder(x):

    # Encoder Hidden layer with sigmoid activation #1

    layer_1 = tf.nn.sigmoid(tf.add(tf.matmul(x, weights['decoder_h1']),

                                   biases['decoder_b1']))

    # Decoder Hidden layer with sigmoid activation #2

    layer_2 = tf.nn.sigmoid(tf.add(tf.matmul(layer_1, weights['decoder_h2']),

                                   biases['decoder_b2']))

    return layer_2

 

# Construct model

encoder_op = encoder(X)

decoder_op = decoder(encoder_op)

 

# Prediction

y_pred = decoder_op

# Targets (Labels) are the input data.

y_true = X

 

# Define loss and optimizer, minimize the squared error

cost = tf.reduce_mean(tf.pow(y_true - y_pred, 2))

optimizer = tf.train.RMSPropOptimizer(learning_rate).minimize(cost)