深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)

深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


“等到退潮的時候,就能看出誰在裸泳。”


自上一篇自編碼深度學習一個神奇的應用——權重綁定(附自編碼學習資料) 推出後,很多小夥伴都表示有些原理搞得不太清楚,到底效果咋樣也不知道,感覺意猶未盡。今天再來給大家深入聊一聊。


01、卷積神經網絡權重更新與綁定


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


1.卷積神經網絡權重更新


卷積神經網的權重更新是網絡學習的關鍵,這裡面的基本原理就是:正向計算誤差,反向傳播更新權重。


下面來說說卷積層的誤差傳播。


如下圖所示是卷積層的誤差傳播。卷積層要看成只與特定單元相連接的全連接層。卷積核就相當於權重。卷積核的調整和深度前饋網絡相同,也是從上層的連接權重開始逐層調整。


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


具體的計算過程與全連接神經網絡類似的,這裡省略1千字。


2.神經網絡權重綁定


自編碼器是神經網絡的一種,通常包括兩部分:encoder(也稱為識別網絡)將輸入轉換成內部表示,decoder(也稱為生成網絡)將內部表示轉換成輸出。如圖所示。


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


如果一個自編碼器的層次是嚴格軸對稱的(如下圖),一個常用的技術是將decoder層的權重捆綁到encoder層。這使得模型參數減半,加快了訓練速度並降低了過擬合風險。

注意:偏置項不會捆綁。


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


02、權重綁定的效果如何?


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


看一個產品到底咋樣,不能看廣告,要看療效。


下面就來設計一個簡單的實驗。這是一個使用Mnist圖片集進行圖片去噪的實驗。


1.先來說說綁定權重的程序結構。


網絡的結構是這樣的:


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


首先,我們給圖片加上50%的噪聲,就變成了這樣:


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


然後,對整個網絡進行50個迭代的訓練,輸入數據和標籤數據都是噪聲數據。


關鍵代碼是這樣的:


autoencoder.fit(x_train_noisy, x_train_noisy,

epochs=50,

batch_size=128,

shuffle=True,

callbacks=[TensorBoard(log_dir='tmp/autoencoder')])


最後,我們將訓練好的網絡用來預測噪聲圖片。


2.現在,我們來比較一下綁定了權重和沒有綁定權重的效果。


先看看沒有綁定權重的運行效果。


訓練了50個迭代,耗時6422秒。


含噪的圖片和去噪的效果是這樣的:


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


我們來計算一下去噪後的圖片與原圖片之間的PSNR(越大越好):11.09599823, 11.36105018, 12.3519772,11.04931201,11.12839616,11.30604725,11.25429406,11.89961281,11.965045,11.04202353


那最好的效果就是第三張圖,PSNR為12.3519772


再來看看綁定了卷積權重的運行效果。


訓練了50個迭代,耗時4519秒。


含噪的圖片和去噪的效果是這樣的:


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


和前面的效果對比來看,去噪的效果明顯提升了。


我們來計算一下去噪後的圖片與原圖片之間的PSNR:11.55367647,12.20789348,13.90931466,12.03116715,11.72392653,12.17388934,12.27409268, 11.81460505, 11.79203777, 11.41119956


那最好的效果就是第3張圖,PSNR為13.90931466


03 小結


深入瞭解自編碼權重綁定——我用實驗給你看(附代碼)


通過上面的實驗數據,我們可以得出以下結論:


一是使用權重綁定,我們可以節約訓練時間近30%。

二是使用權重綁定,最好的處理效果提高了1.5個PSNR。在去噪效果方面,提高1個PSNR都會有明顯的改善的。從去噪的效果圖片也表明了肉眼可見的效果提升。


所以使用權重綁定的不管從訓練效率和去噪質量上都有了一個提高。


下一步,如果有興趣還可以研究Maxpooling和Upsample之間的神經元共享。


小夥伴們,你覺得權重綁定技術如何呢?歡迎留言討論。


如果喜歡請點贊,或聯繫我交流和獲取源代碼。


分享到:


相關文章: