成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Sparse Autoencoder

harryhappy / 901人閱讀

摘要:稀疏編碼是對網(wǎng)絡(luò)的隱藏層的輸出有了約束,即隱藏層神經(jīng)元輸出的平均值應(yīng)盡量為。也就是說,大部分的隱藏層神經(jīng)元都處于非狀態(tài)。為了滿足這一條件,隱藏層神經(jīng)元的活躍度必須接近于。

作者:chen_h
微信號 & QQ:862251340
微信公眾號:coderpai
簡書地址:https://www.jianshu.com/p/5f3...


自編碼器 Autoencoder

稀疏自編碼器 Sparse Autoencoder

降噪自編碼器 Denoising Autoencoder

堆疊自編碼器 Stacked Autoencoder


稀疏自編碼器可以看做是自編碼器的一個變種,它的作用是給隱藏神經(jīng)元加入稀疏性限制,那么自編碼神經(jīng)網(wǎng)絡(luò)即使在隱藏神經(jīng)元數(shù)量較多的情況下任然可以返現(xiàn)輸入數(shù)據(jù)中一些有趣的結(jié)構(gòu)。

稀疏性可以被簡單地解釋為:如果當神經(jīng)元的輸出接近于1的時候我們認為它被激活,而輸出接近于0的時候認為它被抑制,那么使得神經(jīng)元大部分的時間都是被抑制的限制則被稱作稀疏性限制。這里我們假設(shè)的神經(jīng)元的激活函數(shù)是 sigmoid 函數(shù)。如果你使用 tanh 作為激活函數(shù)的話,當神經(jīng)元輸出為-1的時候,我們認為神經(jīng)元是被抑制的。

稀疏自編碼器網(wǎng)絡(luò)結(jié)果還是和自編碼器一樣,如下:

稀疏自編碼器與自編碼器的不同點在于損失函數(shù)的設(shè)計上面。稀疏編碼是對網(wǎng)絡(luò)的隱藏層的輸出有了約束,即隱藏層神經(jīng)元輸出的平均值應(yīng)盡量為0。也就是說,大部分的隱藏層神經(jīng)元都處于非 activite 狀態(tài)。因此,此時的 sparse autoencoder 損失函數(shù)表達式為:

最后的一項表示KL散度,其具體表達式如下:

隱藏層神經(jīng)元 j 的平均活躍度計算如下:

其中,p 是稀疏性參數(shù),通常是一個接近于0的很小的值(比如 p = 0.05)。換句話說,我們想要讓隱藏層神經(jīng)元 j 的平均活躍度接近 0.05 。為了滿足這一條件,隱藏層神經(jīng)元的活躍度必須接近于 0 。為了實現(xiàn)這一限制,所以我們才設(shè)計了上面的KL散度。

如果我們假設(shè)平均激活度 p = 0.2,那么我們就能得到下圖的關(guān)系:

從圖中,可以看出,當值一旦偏離期望激活度 p 時,這種誤差便會急劇增大,從而作為稱發(fā)現(xiàn)個添加到目標函數(shù),可以指導(dǎo)整個網(wǎng)絡(luò)學(xué)習出稀疏的特征表示。

實驗代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

import tensorflow as tf 
import numpy as np 


N_INPUT = 4
N_HIDDEN = 100
N_OUTPUT = N_INPUT
BETA = tf.constant(3.0)
LAMBDA = tf.constant(.0001)
EPSILON = .00001
RHO = .1


def diff(input_data, output_data):
    ans = tf.reduce_sum(tf.pow(tf.sub(output_data, input_data), 2))
    return ans

def main(_):
    
    weights = {
        "hidden": tf.Variable(tf.random_normal([N_INPUT, N_HIDDEN]), name = "w_hidden"),
        "out": tf.Variable(tf.random_normal([N_HIDDEN, N_OUTPUT]), name = "w_out")
    }

    biases = {
        "hidden": tf.Variable(tf.random_normal([N_HIDDEN]), name = "b_hidden"),
        "out": tf.Variable(tf.random_normal([N_OUTPUT]), name = "b_out")
    }

    def KLD(p, q):
        invrho = tf.sub(tf.constant(1.), p)
        invrhohat = tf.sub(tf.constant(1.), q)
        addrho = tf.add(tf.mul(p, tf.log(tf.div(p, q))), tf.mul(invrho, tf.log(tf.div(invrho, invrhohat))))
        return tf.reduce_sum(addrho)

    with tf.name_scope("input"):
        # input placeholders
        x = tf.placeholder("float", [None, N_INPUT], name = "x_input")
        #hidden = tf.placeholder("float", [None, N_HIDDEN], name = "hidden_activation")

    with tf.name_scope("hidden_layer"):
        # from input layer to hidden layer
        hiddenlayer = tf.sigmoid(tf.add(tf.matmul(x, weights["hidden"]), biases["hidden"]))

    with tf.name_scope("output_layer"):
        # from hidden layer to output layer
        out = tf.nn.softmax(tf.add(tf.matmul(hiddenlayer, weights["out"]), biases["out"]))

    with tf.name_scope("loss"):
        # loss items
        cost_J = tf.reduce_sum(tf.pow(tf.sub(out, x), 2))

    with tf.name_scope("cost_sparse"):
        # KL Divergence items
        rho_hat = tf.div(tf.reduce_sum(hiddenlayer), N_HIDDEN)
        cost_sparse = tf.mul(BETA, KLD(RHO, rho_hat))

    with tf.name_scope("cost_reg"):
        # Regular items
        cost_reg = tf.mul(LAMBDA, tf.add(tf.nn.l2_loss(weights["hidden"]), tf.nn.l2_loss(weights["out"])))

    with tf.name_scope("cost"):
        # cost function
        cost = tf.add(tf.add(cost_J, cost_reg), cost_sparse)

    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})
            if i % 100 == 0:
                tmp = sess.run(out, feed_dict = {x: input_data})
                print i, sess.run(diff(tmp, input_data))

        tmp = sess.run(out, feed_dict = {x: input_data})
        print tmp


if __name__ == "__main__":
    tf.app.run()

Reference:

Stanford Lecture

UFLDL

SAE code


作者:chen_h
微信號 & QQ:862251340
簡書地址:https://www.jianshu.com/p/5f3...

CoderPai 是一個專注于算法實戰(zhàn)的平臺,從基礎(chǔ)的算法到人工智能算法都有設(shè)計。如果你對算法實戰(zhàn)感興趣,請快快關(guān)注我們吧。加入AI實戰(zhàn)微信群,AI實戰(zhàn)QQ群,ACM算法微信群,ACM算法QQ群。長按或者掃描如下二維碼,關(guān)注 “CoderPai” 微信號(coderpai)


文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/41169.html

相關(guān)文章

  • Deep learning:九(Sparse Autoencoder練習)

    摘要:實驗基礎(chǔ)其實實現(xiàn)該功能的主要步驟還是需要計算出網(wǎng)絡(luò)的損失函數(shù)以及其偏導(dǎo)數(shù),具體的公式可以參考前面的博文八。生成均勻分布的偽隨機數(shù)。 前言:   現(xiàn)在來進入sparse autoencoder的一個實例練習,參考Ng的網(wǎng)頁教程:Exercise:Sparse Autoencoder。 這個例子所要實現(xiàn)的內(nèi)容大概如下:從給定的很多張自然圖片中截取出大小為8*8的小patches圖片共10000張...

    ?xiaoxiao, 評論0 收藏0
  • 人工智能術(shù)語表

    摘要:如果你對算法實戰(zhàn)感興趣,請快快關(guān)注我們吧。加入實戰(zhàn)微信群,實戰(zhàn)群,算法微信群,算法群。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/b5c... 介紹一些人工智能技術(shù)的術(shù)語,如果你還有術(shù)語補充,請訪問 Github English Terminology 中文術(shù)語 neur...

    pingan8787 評論0 收藏0
  • Stacked Autoencoder

    摘要:等訓(xùn)練結(jié)束后,輸出層就可以去掉了,因為我們只關(guān)心的是從到的變換。需要注意的是,整個網(wǎng)絡(luò)的訓(xùn)練不是一蹴而就的,而是逐層進行的。加入實戰(zhàn)微信群,實戰(zhàn)群,算法微信群,算法群。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/51d... 自編碼器 Autoencoder 稀疏自編碼器 Spa...

    張率功 評論0 收藏0
  • Autoencoder

    摘要:簡單來說是一個壓縮編碼器,也就是對的一坨東西通過變換,輸出和一樣的東西。例如是一個雞,也是一個雞,是一個鴨,也是一個鴨。學(xué)術(shù)一點說就是找到一個函數(shù)能夠使得,叫做。加入實戰(zhàn)微信群,實戰(zhàn)群,算法微信群,算法群。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/fd3... 自編碼器 Auto...

    GitChat 評論0 收藏0
  • Denoising Autoencoder

    摘要:降噪自編碼器認為,設(shè)計一個能夠恢復(fù)原始信號的自編碼器未必是最好的,而能夠?qū)Ρ晃廴酒茐牡脑紨?shù)據(jù)進行編碼解碼,然后還能恢復(fù)真正的原始數(shù)據(jù),這樣的特征才是好的。該恢復(fù)信號盡可能的逼近未被污染的原數(shù)據(jù)。此時,監(jiān)督訓(xùn)練的誤差函數(shù)就從原來的變成了。 作者:chen_h微信號 & QQ:862251340微信公眾號:coderpai簡書地址:https://www.jianshu.com/p/f7...

    JerryC 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<