摘要:簡單來說是一個壓縮編碼器,也就是對的一坨東西通過變換,輸出和一樣的東西。例如是一個雞,也是一個雞,是一個鴨,也是一個鴨。學術一點說就是找到一個函數能夠使得,叫做。加入實戰微信群,實戰群,算法微信群,算法群。
作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:https://www.jianshu.com/p/fd3...
自編碼器 Autoencoder
稀疏自編碼器 Sparse Autoencoder
降噪自編碼器 Denoising Autoencoder
堆疊自編碼器 Stacked Autoencoder
本博客是從梁斌博士的博客上面復制過來的,本人利用 Tensorflow 重新實現了博客中的代碼
深度學習有一個重要的概念叫 autoencoder ,這是個什么東西呢,本文通過一個例子來普及這個術語。
簡單來說 autoencoder 是一個壓縮編碼器,也就是對 input 的一坨東西通過變換,輸出和 input 一樣的東西。例如 input 是一個雞, output 也是一個雞, input 是一個鴨, output 也是一個鴨。學術一點說就是找到一個函數能夠使得 Function(input) = input ,叫做 identity function 。如上圖所示,即學習 Hw,b(x)=x 。
但這和深度學習有什么關系呢? 這就要說到壓縮編碼,我們都知道input需要有一種編碼形式,如果我們能在函數內部找到一個更簡潔的編碼形式,那么這個變換過程就等價于學習到了一種壓縮表示的函數,能夠少量的存儲形式來表示原本較復雜的但信息冗余較大的表示形式。
我們下面的代碼中舉了一個精彩的例子(這個例子是從同學的一次實驗中直接受啟發,我只是按照自己的理解實現了一把,例子非原創)。在這個例子中,input是4個不同的數字,分別是
(0,0,0,1)可以看作1 (0,0,1,0)可以看作2 (0,1,0,0)可以看作3 (1,0,0,0)可以看作4
因為所有的 input 只有這4種,因此其實用4個bit是不經濟的,存在壓縮表示的可能性,比如2個bit就可以表示這4個不同的數。
那么我們設計了輸入層是 4+1 個神經元(4個神經元接受4bit編碼的input,1個神經元是常數項,這個用來做先驗的);隱藏層是 2+1 個神經元(因為我們實現已經知道2個bit就夠了,所以2個隱藏層,具有足夠的表達能力);輸出層是 4 個神經元(為了能讓輸出和輸入保持一致)。
通過數輪迭代,我們看到如下的情況:
(0,0,0,1)->(0.99,0.09)->(0.06,0.00,0.01,0.91) (0,0,1,0)->(0.85,0.99)->(0.00,0.07,0.90,0.07) (0,1,0,0)->(0.01,0.67)->(0.06,0.87,0.11,0.00) (1,0,0,0)->(0.12,0.00)->(0.89,0.10,0.00,0.02) input_layer hidden_layer output_layer
hidden層的編碼恰好可以看作是:
(0.99,0.09) 1,0 (0.85,0.99) 1,1 (0.01,0.67) 0,1 (0.12,0.00) 0,0
也就是說輸入的(0,0,0,1)可以被壓縮表示成(1,0),最終4bit的信息,可以用2bit表示,當然還需要保持邊的權重,但這些邊權重只需要一份,在輸入足夠復雜的時候,壓縮表示是有價值的。
那壓縮表示有什么價值呢?比如一組廣告,一條新聞,人看了挺好,壓縮表示后,人看起來就不爽了,恰恰是人看著不爽了,機器就好處理了,下回再說。
實驗代碼如下:
#!/usr/bin/env python # -*- coding: utf-8 -*- import tensorflow as tf import numpy as np def model(x, w1, w2, b1, b2): a = tf.matmul(x, w1) b = tf.add(a,b1) c = tf.sigmoid(b) hidden = tf.sigmoid(tf.add(tf.matmul(x, w1), b1)) out = tf.nn.softmax(tf.add(tf.matmul(hidden, w2), b2)) return out x = tf.placeholder("float", [4, 4]) w1 = tf.Variable(tf.random_normal([4,2]), name = "w1") w2 = tf.Variable(tf.random_normal([2,4]), name = "w2") b1 = tf.Variable(tf.random_normal([2]), name = "b1") b2 = tf.Variable(tf.random_normal([4]), name = "b2") pred = model(x, w1, w2, b1, b2) cost = tf.reduce_sum(tf.pow(tf.sub(pred, x), 2)) optimizer = tf.train.AdamOptimizer().minimize(cost) with tf.Session() as sess: init = tf.initialize_all_variables() sess.run(init) input_data = np.array([[0,0,0,1],[0,0,1,0],[0,1,0,0],[1,0,0,0]], float) for i in xrange(10000): sess.run(optimizer, feed_dict = {x: input_data}) res = sess.run(pred, feed_dict = {x: input_data}) index = np.argmax(res, 1) for i in xrange(4): tmp = np.zeros((4,)) tmp[index[i]] = 1. print res[i] print tmp
Reference:
UFLDL
小白學Tensorflow之自編碼Autoencoder
作者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/fd3...
CoderPai 是一個專注于算法實戰的平臺,從基礎的算法到人工智能算法都有設計。如果你對算法實戰感興趣,請快快關注我們吧。加入AI實戰微信群,AI實戰QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關注 “CoderPai” 微信號(coderpai)
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/41168.html
摘要:稀疏編碼是對網絡的隱藏層的輸出有了約束,即隱藏層神經元輸出的平均值應盡量為。也就是說,大部分的隱藏層神經元都處于非狀態。為了滿足這一條件,隱藏層神經元的活躍度必須接近于。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/5f3... 自編碼器 Autoencoder 稀疏自編碼器 Spa...
摘要:降噪自編碼器認為,設計一個能夠恢復原始信號的自編碼器未必是最好的,而能夠對被污染破壞的原始數據進行編碼解碼,然后還能恢復真正的原始數據,這樣的特征才是好的。該恢復信號盡可能的逼近未被污染的原數據。此時,監督訓練的誤差函數就從原來的變成了。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/f7...
摘要:實驗基礎其實實現該功能的主要步驟還是需要計算出網絡的損失函數以及其偏導數,具體的公式可以參考前面的博文八。生成均勻分布的偽隨機數。 前言: 現在來進入sparse autoencoder的一個實例練習,參考Ng的網頁教程:Exercise:Sparse Autoencoder。 這個例子所要實現的內容大概如下:從給定的很多張自然圖片中截取出大小為8*8的小patches圖片共10000張...
摘要:如果你對算法實戰感興趣,請快快關注我們吧。加入實戰微信群,實戰群,算法微信群,算法群。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/b5c... 介紹一些人工智能技術的術語,如果你還有術語補充,請訪問 Github English Terminology 中文術語 neur...
摘要:本篇博文主要是根據的那篇文章簡單介紹下,然后通過個簡單的實驗來說明實際編程中該怎樣應用。當然作者也從數學上給出了一定的解釋。自頂向下的生成模型觀點的解釋。信息論觀點的解釋。 前言: 當采用無監督的方法分層預訓練深度網絡的權值時,為了學習到較魯棒的特征,可以在網絡的可視層(即數據的輸入層)引入隨機噪聲,這種方法稱為Denoise Autoencoder(簡稱dAE),由Bengio在08年...
閱讀 2702·2023-04-25 14:59
閱讀 889·2021-11-22 11:59
閱讀 635·2021-11-17 09:33
閱讀 2468·2021-09-27 13:34
閱讀 3898·2021-09-09 11:55
閱讀 2321·2019-08-30 15:44
閱讀 1123·2019-08-30 14:06
閱讀 1925·2019-08-29 16:55