“等到退潮的時候,就能看出誰在裸泳。”
自上一篇自編碼深度學習一個神奇的應用——權重綁定(附自編碼學習資料) 推出後,很多小夥伴都表示有些原理搞得不太清楚,到底效果咋樣也不知道,感覺意猶未盡。今天再來給大家深入聊一聊。
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之間的神經元共享。
小夥伴們,你覺得權重綁定技術如何呢?歡迎留言討論。
如果喜歡請點贊,或聯繫我交流和獲取源代碼。