深度學習實現彩色圖像特征提取:線性解碼器


在前面的討論中,用到的激勵函數都是sigmoid函數:

以為最終的輸出層所有輸出的范圍是[0,1],而我們在自編碼學習的動機就是使得輸出等於輸入,於是所有輸入必須調整到[0,1]范圍內,但是問題來了,有些數據集輸入范圍容易調整,比如Minist,但是PCA白化處理的輸入並不滿足[0,1],所以需要找到一種能夠處理非[0,1]范圍內的機制。

為了解決這個問題,我們讓輸出層的輸出和該層輸入相等:a(3) = z(3),這就相等於把激勵函數改為 f(z) = z,稱這個激勵函數為 線性激勵函數,這樣就可以輸出大於1和小於0的值,那么我們就可以用實值作為輸入訓練整個自編碼器,即輸入的范圍不用再限制在[0,1]之內,可以是任意實數。

在這個線性解碼器模型中:\hat{x} = a^{(3)} = z^{(3)} = W^{(2)}a + b^{(2)}.

隨着激勵函數的改變,輸出單元的梯度求法也要隨之改變:


\begin{align}
\delta_i^{(3)}
= \frac{\partial}{\partial z_i} \;\;
        \frac{1}{2} \left\|y - \hat{x}\right\|^2 = - (y_i - \hat{x}_i) \cdot f'(z_i^{(3)})
\end{align}

 

因為輸出層f(z) = z,所以 f'(z) = 1,於是:


\begin{align}
\delta_i^{(3)} = - (y_i - \hat{x}_i)
\end{align}

 

當采用反向傳播計算誤差時,還是和以前一樣:


\begin{align}
\delta^{(2)} &= \left( (W^{(2)})^T\delta^{(3)}\right) \bullet f'(z^{(2)})
\end{align}

這是因為隱層的激勵函數還是sigmoid函數,沒有改變。

下面的練習用線性編碼器學習出彩色圖像的特征,數據集http://ufldl.stanford.edu/wiki/resources/stl10_patches_100k.zip,里面是采樣好的100,00幅8*8的RGB圖像,隨機前100幅采樣得到的圖像:

經過白化處理后:

學習出的特征:

可以看出和灰度圖像類似,學習出的仍然是一些物體的邊緣部分。

實驗代碼:linear_autoencoder.rarminFunc.rar,其中minFunc.rar是用來優化自動編碼代價函數的工具函數包。

 

學習來源:http://deeplearning.stanford.edu/wiki/index.php/Exercise:Learning_color_features_with_Sparse_Autoencoders

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM