1. 程式人生 > >生成模型--降噪自編碼器(denoising autoencoder,DAE)

生成模型--降噪自編碼器(denoising autoencoder,DAE)

降噪自編碼器(denoising autoencoder,DAE)

  這裡不是通過對損失函式施加懲罰項,而是通過改變損失函式的重構誤差項來學習一些有用資訊。   向輸入的訓練資料加入噪聲,並使自編碼器學會去除這種噪聲來獲得沒有被噪聲汙染過的真實輸入。因此,這就迫使編碼器學習提取最重要的特徵並學習輸入資料中更加魯棒的表徵,這也是它的泛化能力比一般編碼器強的原因。目的是使特徵很魯棒。   denoising autoencoder的表現好像比sparse autoencoder要強一些。   降噪自編碼模型避免了一般的自編碼模型可能會學習得到無編碼功能的恆等函式和需要樣本的個數大於樣本的維數的限制,嘗試通過最小化降噪重構誤差,從含隨機噪聲的資料中重構真實的原始輸入。

具體實現和訓練

  denoising其實就是在autoencoder的基礎上,給輸入的x加入噪聲,就相當於dropout用在輸入層。就是以一定概率分佈(通常使用二項分佈)去擦除原始input矩陣,即每個值都隨機置0, 這樣看起來部分資料的部分特徵是丟失了。   以這丟失的資料x’去計算y,計算z,並將z與原始x做誤差迭代,這樣,網路就學習了這個破損(原文叫Corruputed)的資料,這也就是所謂的改變損失函式的重構誤差項。   例如,在toolbox中的實現非常簡單:   batch_x = batch_x.*(rand(size(batch_x))>nn.inputZeroMaskedFraction)   也就是隨即把大小為(nn.inputZeroMaskedFraction)的一部分x賦成0。   這種結構可以通過梯度下降演算法來訓練。

與dropout的比較

  當在訓練深度網路時,且採用了無監督方法預訓練權值,通常,Dropout和Denoise Autoencoder在使用時有一個小地方不同:   1)Dropout在分層預訓練權值的過程中是不參與的,只是後面的微調部分引入;而Denoise Autoencoder是在每層預訓練的過程中作為輸入層被引入,在進行微調時不參與。   2)另外,一般的重構誤差可以採用均方誤差的形式,但是如果輸入和輸出的向量元素都是位變數,則一般採用交叉熵來表示兩者的差異。