摘要:簡(jiǎn)單來(lái)說(shuō)是一個(gè)壓縮編碼器,也就是對(duì)的一坨東西通過(guò)變換,輸出和一樣的東西。例如是一個(gè)雞,也是一個(gè)雞,是一個(gè)鴨,也是一個(gè)鴨。學(xué)術(shù)一點(diǎn)說(shuō)就是找到一個(gè)函數(shù)能夠使得,叫做。加入實(shí)戰(zhàn)微信群,實(shí)戰(zhàn)群,算法微信群,算法群。
作者:chen_h
微信號(hào) & QQ:862251340
微信公眾號(hào):coderpai
簡(jiǎn)書地址:https://www.jianshu.com/p/fd3...
自編碼器 Autoencoder
稀疏自編碼器 Sparse Autoencoder
降噪自編碼器 Denoising Autoencoder
堆疊自編碼器 Stacked Autoencoder
本博客是從梁斌博士的博客上面復(fù)制過(guò)來(lái)的,本人利用 Tensorflow 重新實(shí)現(xiàn)了博客中的代碼
深度學(xué)習(xí)有一個(gè)重要的概念叫 autoencoder ,這是個(gè)什么東西呢,本文通過(guò)一個(gè)例子來(lái)普及這個(gè)術(shù)語(yǔ)。
簡(jiǎn)單來(lái)說(shuō) autoencoder 是一個(gè)壓縮編碼器,也就是對(duì) input 的一坨東西通過(guò)變換,輸出和 input 一樣的東西。例如 input 是一個(gè)雞, output 也是一個(gè)雞, input 是一個(gè)鴨, output 也是一個(gè)鴨。學(xué)術(shù)一點(diǎn)說(shuō)就是找到一個(gè)函數(shù)能夠使得 Function(input) = input ,叫做 identity function 。如上圖所示,即學(xué)習(xí) Hw,b(x)=x 。
但這和深度學(xué)習(xí)有什么關(guān)系呢? 這就要說(shuō)到壓縮編碼,我們都知道input需要有一種編碼形式,如果我們能在函數(shù)內(nèi)部找到一個(gè)更簡(jiǎn)潔的編碼形式,那么這個(gè)變換過(guò)程就等價(jià)于學(xué)習(xí)到了一種壓縮表示的函數(shù),能夠少量的存儲(chǔ)形式來(lái)表示原本較復(fù)雜的但信息冗余較大的表示形式。
我們下面的代碼中舉了一個(gè)精彩的例子(這個(gè)例子是從同學(xué)的一次實(shí)驗(yàn)中直接受啟發(fā),我只是按照自己的理解實(shí)現(xiàn)了一把,例子非原創(chuàng))。在這個(gè)例子中,input是4個(gè)不同的數(shù)字,分別是
(0,0,0,1)可以看作1 (0,0,1,0)可以看作2 (0,1,0,0)可以看作3 (1,0,0,0)可以看作4
因?yàn)樗械?input 只有這4種,因此其實(shí)用4個(gè)bit是不經(jīng)濟(jì)的,存在壓縮表示的可能性,比如2個(gè)bit就可以表示這4個(gè)不同的數(shù)。
那么我們?cè)O(shè)計(jì)了輸入層是 4+1 個(gè)神經(jīng)元(4個(gè)神經(jīng)元接受4bit編碼的input,1個(gè)神經(jīng)元是常數(shù)項(xiàng),這個(gè)用來(lái)做先驗(yàn)的);隱藏層是 2+1 個(gè)神經(jīng)元(因?yàn)槲覀儗?shí)現(xiàn)已經(jīng)知道2個(gè)bit就夠了,所以2個(gè)隱藏層,具有足夠的表達(dá)能力);輸出層是 4 個(gè)神經(jīng)元(為了能讓輸出和輸入保持一致)。
通過(guò)數(shù)輪迭代,我們看到如下的情況:
(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
也就是說(shuō)輸入的(0,0,0,1)可以被壓縮表示成(1,0),最終4bit的信息,可以用2bit表示,當(dāng)然還需要保持邊的權(quán)重,但這些邊權(quán)重只需要一份,在輸入足夠復(fù)雜的時(shí)候,壓縮表示是有價(jià)值的。
那壓縮表示有什么價(jià)值呢?比如一組廣告,一條新聞,人看了挺好,壓縮表示后,人看起來(lái)就不爽了,恰恰是人看著不爽了,機(jī)器就好處理了,下回再說(shuō)。
實(shí)驗(yàn)代碼如下:
#!/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
小白學(xué)Tensorflow之自編碼Autoencoder
作者:chen_h
微信號(hào) & QQ:862251340
簡(jiǎn)書地址:https://www.jianshu.com/p/fd3...
CoderPai 是一個(gè)專注于算法實(shí)戰(zhàn)的平臺(tái),從基礎(chǔ)的算法到人工智能算法都有設(shè)計(jì)。如果你對(duì)算法實(shí)戰(zhàn)感興趣,請(qǐng)快快關(guān)注我們吧。加入AI實(shí)戰(zhàn)微信群,AI實(shí)戰(zhàn)QQ群,ACM算法微信群,ACM算法QQ群。長(zhǎng)按或者掃描如下二維碼,關(guān)注 “CoderPai” 微信號(hào)(coderpai)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/41168.html
摘要:稀疏編碼是對(duì)網(wǎng)絡(luò)的隱藏層的輸出有了約束,即隱藏層神經(jīng)元輸出的平均值應(yīng)盡量為。也就是說(shuō),大部分的隱藏層神經(jīng)元都處于非狀態(tài)。為了滿足這一條件,隱藏層神經(jīng)元的活躍度必須接近于。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書地址:https://www.jianshu.com/p/5f3... 自編碼器 Autoencoder 稀疏自編碼器 Spa...
摘要:降噪自編碼器認(rèn)為,設(shè)計(jì)一個(gè)能夠恢復(fù)原始信號(hào)的自編碼器未必是最好的,而能夠?qū)Ρ晃廴酒茐牡脑紨?shù)據(jù)進(jìn)行編碼解碼,然后還能恢復(fù)真正的原始數(shù)據(jù),這樣的特征才是好的。該恢復(fù)信號(hào)盡可能的逼近未被污染的原數(shù)據(jù)。此時(shí),監(jiān)督訓(xùn)練的誤差函數(shù)就從原來(lái)的變成了。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書地址:https://www.jianshu.com/p/f7...
摘要:實(shí)驗(yàn)基礎(chǔ)其實(shí)實(shí)現(xiàn)該功能的主要步驟還是需要計(jì)算出網(wǎng)絡(luò)的損失函數(shù)以及其偏導(dǎo)數(shù),具體的公式可以參考前面的博文八。生成均勻分布的偽隨機(jī)數(shù)。 前言: 現(xiàn)在來(lái)進(jìn)入sparse autoencoder的一個(gè)實(shí)例練習(xí),參考Ng的網(wǎng)頁(yè)教程:Exercise:Sparse Autoencoder。 這個(gè)例子所要實(shí)現(xiàn)的內(nèi)容大概如下:從給定的很多張自然圖片中截取出大小為8*8的小patches圖片共10000張...
摘要:如果你對(duì)算法實(shí)戰(zhàn)感興趣,請(qǐng)快快關(guān)注我們吧。加入實(shí)戰(zhàn)微信群,實(shí)戰(zhàn)群,算法微信群,算法群。 作者:chen_h微信號(hào) & QQ:862251340微信公眾號(hào):coderpai簡(jiǎn)書地址:https://www.jianshu.com/p/b5c... 介紹一些人工智能技術(shù)的術(shù)語(yǔ),如果你還有術(shù)語(yǔ)補(bǔ)充,請(qǐng)?jiān)L問(wèn) Github English Terminology 中文術(shù)語(yǔ) neur...
摘要:本篇博文主要是根據(jù)的那篇文章簡(jiǎn)單介紹下,然后通過(guò)個(gè)簡(jiǎn)單的實(shí)驗(yàn)來(lái)說(shuō)明實(shí)際編程中該怎樣應(yīng)用。當(dāng)然作者也從數(shù)學(xué)上給出了一定的解釋。自頂向下的生成模型觀點(diǎn)的解釋。信息論觀點(diǎn)的解釋。 前言: 當(dāng)采用無(wú)監(jiān)督的方法分層預(yù)訓(xùn)練深度網(wǎng)絡(luò)的權(quán)值時(shí),為了學(xué)習(xí)到較魯棒的特征,可以在網(wǎng)絡(luò)的可視層(即數(shù)據(jù)的輸入層)引入隨機(jī)噪聲,這種方法稱為Denoise Autoencoder(簡(jiǎn)稱dAE),由Bengio在08年...
閱讀 2745·2023-04-25 14:59
閱讀 928·2021-11-22 11:59
閱讀 666·2021-11-17 09:33
閱讀 2488·2021-09-27 13:34
閱讀 3945·2021-09-09 11:55
閱讀 2349·2019-08-30 15:44
閱讀 1159·2019-08-30 14:06
閱讀 1952·2019-08-29 16:55