摘要:降噪自編碼器認為,設計一個能夠恢復原始信號的自編碼器未必是最好的,而能夠對被污染破壞的原始數據進行編碼解碼,然后還能恢復真正的原始數據,這樣的特征才是好的。該恢復信號盡可能的逼近未被污染的原數據。此時,監督訓練的誤差函數就從原來的變成了。
作者: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)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/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...
閱讀 2315·2021-11-24 09:39
閱讀 3043·2021-10-15 09:39
閱讀 3097·2021-07-26 23:38
閱讀 2293·2019-08-30 11:14
閱讀 3416·2019-08-29 16:39
閱讀 1718·2019-08-29 15:23
閱讀 785·2019-08-29 13:01
閱讀 2670·2019-08-29 12:29