摘要:降噪自编码器认为,设计一个能够恢复原始信号的自编码器未必是最好的,而能够对被污染破坏的原始数据进行编码解码,然后还能恢复真正的原始数据,这样的特征才是好的。该恢复信号尽可能的逼近未被污染的原数据。此时,监督训练的误差函数就从原来的变成了。
作者:chen_h
微信号 & QQ:862251340
微信公众号:coderpai
简书地址:https://www.jianshu.com/p/f7b...
自编码器 Autoencoder
稀疏自编码器 Sparse Autoencoder
降噪自编码器 Denoising Autoencoder
堆叠自编码器 Stacked Autoencoder
降噪自编码器(DAE)是另一种自编码器的变种。强烈推荐 Pascal Vincent 的论文,该论文很详细的描述了该模型。降噪自编码器认为,设计一个能够恢复原始信号的自编码器未必是最好的,而能够对 “被污染/破坏” 的原始数据进行编码、解码,然后还能恢复真正的原始数据,这样的特征才是好的。
从数学上来讲,假设原始数据 x 被我们“故意破坏”了,比如加入高斯噪声,或者把某些维度数据抹掉,变成 x",然后在对 x" 进行编码、解码,得到回复信号 xx = g(f(x")) 。该恢复信号尽可能的逼近未被污染的原数据 x 。此时,监督训练的误差函数就从原来的 L(x, g(f(x))) 变成了 L(x, g(f(x")))。
从直观上理解,降噪自编码器希望学到的特征尽可能鲁棒,能够在一定程度上对抗原始数据的污染、缺失等情况。Vincent 论文里也对 DAE 提出了基于流行学习的解释,并且在图像数据上进行测试,发现 DAE 能够学出类似 Gabor 边缘提取的特征变换。
DAE 的系统结构如下图所示:
现在使用比较多的噪声主要是 mask noise,即原始数据中部分数据缺失,这是有着强烈的实际意义的,比如图像部分像素被遮挡、文本因记录原因漏掉一些单词等等。
实现代码如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np import input_data N_INPUT = 784 N_HIDDEN = 100 N_OUTPUT = N_INPUT corruption_level = 0.3 epoches = 1000 def main(_): w_init = np.sqrt(6. / (N_INPUT + N_HIDDEN)) weights = { "hidden": tf.Variable(tf.random_uniform([N_INPUT, N_HIDDEN], minval = -w_init, maxval = w_init)), "out": tf.Variable(tf.random_uniform([N_HIDDEN, N_OUTPUT], minval = -w_init, maxval = w_init)) } bias = { "hidden": tf.Variable(tf.random_uniform([N_HIDDEN], minval = -w_init, maxval = w_init)), "out": tf.Variable(tf.random_uniform([N_OUTPUT], minval = -w_init, maxval = w_init)) } with tf.name_scope("input"): # input data x = tf.placeholder("float", [None, N_INPUT]) mask = tf.placeholder("float", [None, N_INPUT]) with tf.name_scope("input_layer"): # from input data to input layer input_layer = tf.mul(x, mask) with tf.name_scope("hidden_layer"): # from input layer to hidden layer hidden_layer = tf.sigmoid(tf.add(tf.matmul(input_layer, weights["hidden"]), bias["hidden"])) with tf.name_scope("output_layer"): # from hidden layer to output layer output_layer = tf.sigmoid(tf.add(tf.matmul(hidden_layer, weights["out"]), bias["out"])) with tf.name_scope("cost"): # cost function cost = tf.reduce_sum(tf.pow(tf.sub(output_layer, x), 2)) optimizer = tf.train.AdamOptimizer().minimize(cost) # load MNIST data mnist = input_data.read_data_sets("MNIST_data/", one_hot=True) trX, trY, teX, teY = mnist.train.images, mnist.train.labels, mnist.test.images, mnist.test.labels with tf.Session() as sess: init = tf.initialize_all_variables() sess.run(init) for i in range(epoches): for start, end in zip(range(0, len(trX), 100), range(100, len(trX), 100)): input_ = trX[start:end] mask_np = np.random.binomial(1, 1 - corruption_level, input_.shape) sess.run(optimizer, feed_dict={x: input_, mask: mask_np}) mask_np = np.random.binomial(1, 1 - corruption_level, teX.shape) print i, sess.run(cost, feed_dict={x: teX, mask: mask_np}) if __name__ == "__main__": tf.app.run()
Reference:
[《Extracting and Composing Robust Features with Denoising
Autoencoders》](http://machinelearning.org/ar...
《Stacked Denoising Autoencoders: Learning Useful Representations in a Deep Network with a Local Denoising Criterion》
作者:chen_h
微信号 & QQ:862251340
简书地址:https://www.jianshu.com/p/f7b...
CoderPai 是一个专注于算法实战的平台,从基础的算法到人工智能算法都有设计。如果你对算法实战感兴趣,请快快关注我们吧。加入AI实战微信群,AI实战QQ群,ACM算法微信群,ACM算法QQ群。长按或者扫描如下二维码,关注 “CoderPai” 微信号(coderpai)
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/41170.html
摘要:本篇博文主要是根据的那篇文章简单介绍下,然后通过个简单的实验来说明实际编程中该怎样应用。当然作者也从数学上给出了一定的解释。自顶向下的生成模型观点的解释。信息论观点的解释。 前言: 当采用无监督的方法分层预训练深度网络的权值时,为了学习到较鲁棒的特征,可以在网络的可视层(即数据的输入层)引入随机噪声,这种方法称为Denoise Autoencoder(简称dAE),由Bengio在08年...
摘要:简单来说是一个压缩编码器,也就是对的一坨东西通过变换,输出和一样的东西。例如是一个鸡,也是一个鸡,是一个鸭,也是一个鸭。学术一点说就是找到一个函数能够使得,叫做。加入实战微信群,实战群,算法微信群,算法群。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/fd3... 自编码器 Auto...
摘要:最近一直在看,各类博客论文看得不少但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一个只是跟着的写了些已有框架的代码这部分的代码见后来发现了一个的的,发现其代码很简单,感觉比较适合用来学习算法再一个就 最近一直在看Deep Learning,各类博客、论文看得不少但是说实话,这样做有些疏于实现,一来呢自己的电脑也不是很好,二来呢我目前也没能力自己去写一...
摘要:稀疏编码是对网络的隐藏层的输出有了约束,即隐藏层神经元输出的平均值应尽量为。也就是说,大部分的隐藏层神经元都处于非状态。为了满足这一条件,隐藏层神经元的活跃度必须接近于。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/5f3... 自编码器 Autoencoder 稀疏自编码器 Spa...
摘要:等训练结束后,输出层就可以去掉了,因为我们只关心的是从到的变换。需要注意的是,整个网络的训练不是一蹴而就的,而是逐层进行的。加入实战微信群,实战群,算法微信群,算法群。 作者:chen_h微信号 & QQ:862251340微信公众号:coderpai简书地址:https://www.jianshu.com/p/51d... 自编码器 Autoencoder 稀疏自编码器 Spa...
阅读 2277·2021-11-24 09:39
阅读 2969·2021-10-15 09:39
阅读 3068·2021-07-26 23:38
阅读 2264·2019-08-30 11:14
阅读 3393·2019-08-29 16:39
阅读 1696·2019-08-29 15:23
阅读 741·2019-08-29 13:01
阅读 2639·2019-08-29 12:29