在自動(dòng)編碼器AutoEncoder的基礎(chǔ)上加上L1的正則限制(L1主要是約束每一層中的節(jié)點(diǎn)中大部分都要為0,只有少數(shù)不為0,這就是Sparse名字的來(lái)源),我們就可以得到Sparse AutoEncoder法。
如圖三,其實(shí)就是限制每次得到的表達(dá)code盡量稀疏。因?yàn)橄∈璧谋磉_(dá)往往比其他的表達(dá)要有效(人腦好像也是這樣的,某個(gè)輸入只是刺激某些神經(jīng)元,其他的大部分的神經(jīng)元是受到抑制的)
假設(shè)我們只有一個(gè)沒(méi)有帶類(lèi)別標(biāo)簽的訓(xùn)練樣本集合
自編碼神經(jīng)網(wǎng)絡(luò)嘗試學(xué)習(xí)一個(gè)
我們剛才的論述是基于隱藏神經(jīng)元數(shù)量較小的假設(shè)。但是即使隱藏神經(jīng)元的數(shù)量較大(可能比輸入像素的個(gè)數(shù)還要多),我們?nèi)匀煌ㄟ^(guò)給自編碼神經(jīng)網(wǎng)絡(luò)施加一些其他的限制條件來(lái)發(fā)現(xiàn)輸入數(shù)據(jù)中的結(jié)構(gòu)。具體來(lái)說(shuō),如果我們給隱藏神經(jīng)元加入稀疏性限制,那么自編碼神經(jīng)網(wǎng)絡(luò)即使在隱藏神經(jīng)元數(shù)量較多的情況下仍然可以發(fā)現(xiàn)輸入數(shù)據(jù)中一些有趣的結(jié)構(gòu)。
稀疏性可以被簡(jiǎn)單地解釋如下。如果當(dāng)神經(jīng)元的輸出接近于1的時(shí)候我們認(rèn)為它被激活,而輸出接近于0的時(shí)候認(rèn)為它被抑制,那么使得神經(jīng)元大部分的時(shí)間都是被抑制的限制則被稱(chēng)作稀疏性限制。這里我們假設(shè)的神經(jīng)元的激活函數(shù)是sigmoid函數(shù)。如果你使用tanh作為激活函數(shù)的話(huà),當(dāng)神經(jīng)元輸出為-1的時(shí)候,我們認(rèn)為神經(jīng)元是被抑制的。
注意到
進(jìn)一步,讓
表示隱藏神經(jīng)元
其中,
為了實(shí)現(xiàn)這一限制,我們將會(huì)在我們的優(yōu)化目標(biāo)函數(shù)中加入一個(gè)額外的懲罰因子,而這一懲罰因子將懲罰那些
這里,
其中
這一懲罰因子有如下性質(zhì),當(dāng)
我們可以看出,相對(duì)熵在
我們的總體代價(jià)函數(shù)可以表示為
其中
為了對(duì)相對(duì)熵進(jìn)行導(dǎo)數(shù)計(jì)算,我們可以使用一個(gè)易于實(shí)現(xiàn)的技巧,這只需要在你的程序中稍作改動(dòng)即可。具體來(lái)說(shuō),前面在后向傳播算法中計(jì)算第二層(
我們將其換成
就可以了。
有一個(gè)需要注意的地方就是我們需要知道
證明上面算法能達(dá)到梯度下降效果的完整推導(dǎo)過(guò)程不再本教程的范圍之內(nèi)。不過(guò)如果你想要使用經(jīng)過(guò)以上修改的后向傳播來(lái)實(shí)現(xiàn)自編碼神經(jīng)網(wǎng)絡(luò),那么你就會(huì)對(duì)目標(biāo)函數(shù)
自編碼器最初提出是基于降維的思想,但是當(dāng)隱層節(jié)點(diǎn)比輸入節(jié)點(diǎn)多時(shí),自編碼器就會(huì)失去自動(dòng)學(xué)習(xí)樣本特征的能力,此時(shí)就需要對(duì)隱層節(jié)點(diǎn)進(jìn)行一定的約束,與降噪自編碼器的出發(fā)點(diǎn)一樣,高維而稀疏的表達(dá)是好的,因此提出對(duì)隱層節(jié)點(diǎn)進(jìn)行一些稀疏性的限值。稀疏自編碼器就是在傳統(tǒng)自編碼器的基礎(chǔ)上通過(guò)增加一些稀疏性約束得到的。這個(gè)稀疏性是針對(duì)自編碼器的隱層神經(jīng)元而言的,通過(guò)對(duì)隱層神經(jīng)元的大部分輸出進(jìn)行抑制使網(wǎng)絡(luò)達(dá)到一個(gè)稀疏的效果。
A,B是增量信號(hào),Z是零位信號(hào),如果不需要零位信號(hào),Z信號(hào)可以不接
增量編碼器一般輸出信號(hào)是兩路正交脈沖信號(hào)和一路參考信號(hào),之所以叫增量是因?yàn)樗奈恢眯盘?hào)是通過(guò)對(duì)脈沖計(jì)數(shù)累加得到,依靠計(jì)數(shù)設(shè)備的內(nèi)部記憶來(lái)記住位置,并且同每圈輸出的參考信號(hào)來(lái)清除累計(jì)誤差. 缺點(diǎn)就是斷電...
分辨率1000P/R,開(kāi)路輸出。
對(duì)于沒(méi)有帶類(lèi)別標(biāo)簽的數(shù)據(jù),由于為其增加類(lèi)別標(biāo)記是一個(gè)非常麻煩的過(guò)程,因此我們希望機(jī)器能夠自己學(xué)習(xí)到樣本中的一些重要特征。通過(guò)對(duì)隱藏層施加一些限制,能夠使得它在惡劣的環(huán)境下學(xué)習(xí)到能最好表達(dá)樣本的特征,并能有效地對(duì)樣本進(jìn)行降維。這種限制可以是對(duì)隱藏層稀疏性的限制。
??如果給定一個(gè)神經(jīng)網(wǎng)絡(luò),我們假設(shè)其輸出與輸入是相同的,然后訓(xùn)練調(diào)整其參數(shù),得到每一層中的權(quán)重。自然地,我們就得到了輸入的幾種不同表示(每一層代表一種表示),這些表示就是特征。自動(dòng)編碼器就是一種盡可能復(fù)現(xiàn)輸入信號(hào)的神經(jīng)網(wǎng)絡(luò)。為了實(shí)現(xiàn)這種復(fù)現(xiàn),自動(dòng)編碼器就必須捕捉可以代表輸入數(shù)據(jù)的最重要的因素,就像PCA那樣,找到可以代表原信息的主要成分。
??當(dāng)然,我們還可以繼續(xù)加上一些約束條件得到新的Deep Learning方法,如:如果在AutoEncoder的基礎(chǔ)上加上L1的Regularity限制(L1主要是約束隱含層中的節(jié)點(diǎn)中大部分都要為0,只有少數(shù)不為0,這就是Sparse名字的來(lái)源),我們就可以得到Sparse AutoEncoder法。
??之所以要將隱含層稀疏化,是由于,如果隱藏神經(jīng)元的數(shù)量較大(可能比輸入像素的個(gè)數(shù)還要多),不稀疏化我們無(wú)法得到輸入的壓縮表示。具體來(lái)說(shuō),如果我們給隱藏神經(jīng)元加入稀疏性限制,那么自編碼神經(jīng)網(wǎng)絡(luò)即使在隱藏神經(jīng)元數(shù)量較多的情況下仍然可以發(fā)現(xiàn)輸入數(shù)據(jù)中一些有趣的結(jié)構(gòu)。
稀疏性可以被簡(jiǎn)單地解釋如下。如果當(dāng)神經(jīng)元的輸出接近于1的時(shí)候我們認(rèn)為它被激活,而輸出接近于0的時(shí)候認(rèn)為它被抑制,那么使得神經(jīng)元大部分的時(shí)間都是被抑制的限制則被稱(chēng)作稀疏性限制。這里我們假設(shè)的神經(jīng)元的激活函數(shù)是sigmoid函數(shù)。如果你使用tanh作為激活函數(shù)的話(huà),當(dāng)神經(jīng)元輸出為-1的時(shí)候,我們認(rèn)為神經(jīng)元是被抑制的。
input_nodes=8*8//輸入節(jié)點(diǎn)數(shù) hidden_size=100//隱藏節(jié)點(diǎn)數(shù) output_nodes=8*8//輸出節(jié)點(diǎn)數(shù)
從mat文件中讀取圖像塊,隨機(jī)生成10000個(gè)8*8的圖像塊。
defsampleImage(): mat=scipy.io.loadmat('F:/ml/code/IMAGES.mat') pic=mat['IMAGES'] shape=pic.shape patchsize=8 numpatches=1000 patches=[] i=np.random.randint(0,shape[0]-patchsize,numpatches) j=np.random.randint(0,shape[1]-patchsize,numpatches) k=np.random.randint(0,shape[2],numpatches) forlinrange(numpatches): temp=pic[i[l]:(i[l] patchsize),j[l]:(j[l] patchsize),k[l]] temp=temp.reshape(patchsize*patchsize) patches.append(temp) returnpatches
defxvaier_init(input_size,output_size): low=-np.sqrt(6.0/(input_nodes output_nodes)) high=-low returntf.random_uniform((input_size,output_size),low,high,dtype=tf.float32)
代價(jià)函數(shù)由三部分組成,均方差項(xiàng),權(quán)重衰減項(xiàng),以及稀疏因子項(xiàng)。
defcomputecost(w,b,x,w1,b1): p=0.1 beta=3 lamda=0.00001 hidden_output=tf.sigmoid(tf.matmul(x,w) b) pj=tf.reduce_mean(hidden_output,0) sparse_cost=tf.reduce_sum(p*tf.log(p/pj) (1-p)*tf.log((1-p)/(1-pj))) output=tf.sigmoid(tf.matmul(hidden_output,w1) b1) regular=lamda*(tf.reduce_sum(w*w) tf.reduce_sum(w1*w1))/2 cross_entropy=tf.reduce_mean(tf.pow(output-x,2))/2 sparse_cost*beta regular# regular sparse_cost*beta returncross_entropy,hidden_output,output
為了使隱藏單元得到最大激勵(lì)(隱藏單元需要什么樣的特征輸入),將這些特征輸入顯示出來(lái)。
defshow_image(w): sum=np.sqrt(np.sum(w**2,0)) changedw=w/sum a,b=changedw.shape c=np.sqrt(a*b) d=int(np.sqrt(a)) e=int(c/d) buf=1 newimage=-np.ones((buf (d buf)*e,buf (d buf)*e)) k=0 foriinrange(e): forjinrange(e): maxvalue=np.amax(changedw[:,k]) if(maxvalue<0): maxvalue=-maxvalue newimage[(buf i*(d buf)):(buf i*(d buf) d),(buf j*(d buf)):(buf j*(d buf) d)]= np.reshape(changedw[:,k],(d,d))/maxvalue k =1 plt.figure("beauty") plt.imshow(newimage) plt.axis('off') plt.show()
通過(guò)AdamOptimizer下降誤差,調(diào)節(jié)參數(shù)。
defmain(): w=tf.Variable(xvaier_init(input_nodes,hidden_size)) b=tf.Variable(tf.truncated_normal([hidden_size],0.1)) x=tf.placeholder(tf.float32,shape=[None,input_nodes]) w1=tf.Variable(tf.truncated_normal([hidden_size,input_nodes],-0.1,0.1)) b1=tf.Variable(tf.truncated_normal([output_nodes],0.1)) cost,hidden_output,output=computecost(w,b,x,w1,b1) train_step=tf.train.AdamOptimizer().minimize(cost) train_x=sampleImage() sess=tf.Session() sess.run(tf.global_variables_initializer()) foriinrange(100000): _,hidden_output_,output_,cost_,w_=sess.run([train_step,hidden_output,output,cost,w], feed_dict={x:train_x}) ifi00==0: print(hidden_output_) print(output_) print(cost_) np.save("weights1.npy",w_) show_image(w_)2100433B
格式:pdf
大?。?span id="xtams1f" class="single-tag-height">1.9MB
頁(yè)數(shù): 23頁(yè)
評(píng)分: 4.7
編碼器基礎(chǔ)入門(mén)
格式:pdf
大?。?span id="ekyy13q" class="single-tag-height">1.9MB
頁(yè)數(shù): 4頁(yè)
評(píng)分: 4.7
該文設(shè)計(jì)了一種低復(fù)雜度編碼器并對(duì)其進(jìn)行了硬件實(shí)現(xiàn)。該編碼器針對(duì)具有準(zhǔn)循環(huán)結(jié)構(gòu)的LDPC碼,利用快速迭代編碼算法,在設(shè)計(jì)中只需簡(jiǎn)單的循環(huán)移位以及異或操作就可實(shí)現(xiàn),因此具有較低的編碼復(fù)雜度。同時(shí)針對(duì)(528,264)的QC-LDPC碼,在Xilinx公司Virtex6系列的xc6vsx130t芯片上實(shí)現(xiàn)了該編碼器設(shè)計(jì),經(jīng)過(guò)ISE軟件布局布線后,結(jié)果顯示編碼器只消耗了280個(gè)slices資源,而編碼吞吐量達(dá)到了147.168Mbps。另外利用時(shí)序仿真軟件Isim進(jìn)行驗(yàn)證,結(jié)果顯示輸出比輸入只延遲了7個(gè)時(shí)鐘,可見(jiàn)該算法的編碼速度比較快。
文| Aaqilb Saeed 譯| 翟向洋
包括完整代碼和數(shù)據(jù)集的 ipython 筆記本可以從閱讀原文鏈接內(nèi)獲得。
在本教程中,我們會(huì)把去噪自編碼應(yīng)用在購(gòu)物籃(market basket)數(shù)據(jù)的協(xié)同濾波上。學(xué)習(xí)模型將根據(jù)用戶(hù)購(gòu)物籃中的商品來(lái)推薦相近的商品。
本教程使用的是 groceries 數(shù)據(jù)集,它包括 9835 次交易(即在購(gòu)物籃中被一起購(gòu)買(mǎi)的商品條目)。我們將數(shù)據(jù)進(jìn)行訓(xùn)練、測(cè)試和驗(yàn)證。圖 1 描述了原始數(shù)據(jù)集,我們需要處理并將其轉(zhuǎn)換為對(duì)輸入模型可用的格式。為此,每一次交易都將被表示為一個(gè)二進(jìn)制向量,其中 1 表示某個(gè)商品在購(gòu)物籃,否則為 0 。讓我們首先讀取該數(shù)據(jù)集并定義幾個(gè)輔助函數(shù),找出單一的商品條目,將他們轉(zhuǎn)換成 One-hot encoded(一位有效編碼的)形式,并從二進(jìn)制向量轉(zhuǎn)換為商品條目。此外,圖 2 提供了 10 項(xiàng)在數(shù)據(jù)集中最頻繁出現(xiàn)的商品條目。
圖一: 購(gòu)物籃數(shù)據(jù)
圖二:數(shù)據(jù)集中出現(xiàn)最多的貨品
自編碼器模型試著(learn)重建它自己的輸入。當(dāng)這樣做的時(shí)候,它學(xué)習(xí)(learn)數(shù)據(jù)的突出表示。因此,它也用來(lái)實(shí)現(xiàn)降維的目的。該模型由兩個(gè)組件組成:一個(gè)編碼器和一個(gè)解碼器。編碼器映射輸入-->,解碼器從降維重新產(chǎn)生輸入,即映射-->。輸入中的噪聲被引入(例如通過(guò)Dropout)到訓(xùn)練集,避免了學(xué)習(xí)一個(gè)恒等函數(shù),由此得名為自編碼降噪。在我們的例子中,在模型訓(xùn)練期間,一些缺少某些物品的嘈雜或損壞的購(gòu)物籃數(shù)據(jù)將被用作輸入。在測(cè)試期間,一位有效編碼的購(gòu)物籃的商品條目將被饋入模型以獲得商品條目預(yù)測(cè)。然后從輸出,我們必須選擇概率比一些閾值更大的商品條目(此例,如果p>=0.1,則為1,否則為0),以轉(zhuǎn)換回一位有效編碼向量。最后,在二進(jìn)制向量中帶有1的商品條目將被推薦給用戶(hù)。
現(xiàn)在讓我們定義一個(gè)4層自編碼降噪模型(例如,4層編碼器和4層解碼器)。軟標(biāo)記激活函數(shù)(the soft sign activation function)用在前三層的編碼器和解碼器,而sigmoid用在第四層。二進(jìn)制交叉熵被用作使用隨機(jī)梯度下降法的變體(通常稱(chēng)為Adam)來(lái)最小化的損失函數(shù)。模型架構(gòu)如圖2所示,可以看出輸入維數(shù)為169(即數(shù)據(jù)集中單一商品條目的數(shù)量)。同樣,神經(jīng)元的數(shù)量在第一、第二、第三和第四層分別是128、64、32和16。在輸入層以0.6的概率引入流失(dropout)(即隨機(jī)流失40%的輸入)。此外,編碼器的權(quán)重使用頻率為0.00001的則正則化。
圖三:降噪模型的結(jié)構(gòu)
這里是所有的代碼:我們需要定義我們的模型。以下提供的代碼會(huì)訓(xùn)練/評(píng)估自編碼器并計(jì)算ROC、AUC的分?jǐn)?shù)。
以下是該模型提供的一些關(guān)于測(cè)試集的推薦結(jié)果:
購(gòu)物車(chē)中的商品條目:火腿、草藥、洋蔥、起泡酒
推薦的商品條目:瓶裝水,其他蔬菜,面包(卷),根蔬菜,購(gòu)物袋,蘇打水,熱帶水果,全脂牛奶,酸奶
購(gòu)物車(chē)中的商品條目:餐巾,香腸,白葡萄酒
推薦的商品條目:其他蔬菜,面包(卷),蘇打水,全脂牛奶,酸奶
購(gòu)物車(chē)中的商品條目:磨砂清潔劑,糖果,雞肉,清潔劑,根蔬菜,香腸,熱帶水果,全脂牛奶,酸奶
推薦的商品條目:牛肉,瓶裝啤酒,瓶裝水,棕色面包,黃油,罐裝啤酒,柑橘類(lèi)水果,咖啡,凝乳,國(guó)產(chǎn)雞蛋,法蘭克福香腸,水果/蔬菜汁,人造黃油,報(bào)紙,其他蔬菜,糕點(diǎn),水果,豬肉,卷餅/饅頭,根蔬菜,香腸,購(gòu)物袋,蘇打水,熱帶水果,鞭打/酸奶油,酸奶
-END-
譯者 | 翟向洋
北京理工大學(xué)研究生一枚,吃瓜群眾,熱愛(ài)學(xué)習(xí)。
后臺(tái)回復(fù) “志愿者”
了解如何加入我們
譯碼器是組合邏輯電路的一個(gè)重要的器件,其可以分為:變量譯碼和顯示譯碼兩類(lèi)。
變量譯碼:一般是一種較少輸入變?yōu)檩^多輸出的器件,一般分為2n譯碼和8421BCD碼譯碼兩類(lèi)。
顯示譯碼:主要解決二進(jìn)制數(shù)顯示成對(duì)應(yīng)的十、或十六進(jìn)制數(shù)的轉(zhuǎn)換功能,一般其可分為驅(qū)動(dòng)LED和驅(qū)動(dòng)LCD兩類(lèi)。
譯碼是編碼的逆過(guò)程,在編碼時(shí),每一種二進(jìn)制代碼,都賦予了特定的含義,即都表示了一個(gè)確定的信號(hào)或者對(duì)象。把代碼狀態(tài)的特定含義"翻譯"出來(lái)的過(guò)程叫做譯碼,實(shí)現(xiàn)譯碼操作的電路稱(chēng)為譯碼器?;蛘哒f(shuō),譯碼器是可以將輸入二進(jìn)制代碼的狀態(tài)翻譯成輸出信號(hào),以表示其原來(lái)含義的電路。
根據(jù)需要,輸出信號(hào)可以是脈沖,也可以是高電平或者低電平。
譯碼器的種類(lèi)很多,但它們的工作原理和分析設(shè)計(jì)方法大同小異,其中二進(jìn)制譯碼器、二-十進(jìn)制譯碼器和顯示譯碼器是三種最典型,使用十分廣泛的譯碼電路。
二進(jìn)制碼譯碼器,也稱(chēng)最小項(xiàng)譯碼器,N中取一譯碼器,最小項(xiàng)譯碼器一般是將二進(jìn)制碼譯為十進(jìn)制碼;
代碼轉(zhuǎn)換譯碼器,是從一種編碼轉(zhuǎn)換為另一種編碼;
顯示譯碼器,一般是將一種編碼譯成十進(jìn)制碼或特定的編碼,并通過(guò)顯示器件將譯碼器的狀態(tài)顯示出來(lái)。