1. AutoEncoder
AutoEncoder是一種特殊的三層神經網絡, 其輸出等於輸入:\(y^{(i)}=x^{(i)}\), 如下圖所示:
亦即AutoEncoder想學到的函數為\(f_{W,b} \approx x\), 來使得輸出\(\hat{x}\)比較接近x. 乍看上去學到的這種函數很平凡, 沒啥用處, 實際上, 如果我們限制一下AutoEncoder的隱藏單元的個數小於輸入特征的個數, 便可以學到數據的很多有趣的結構. 如果特征之間存在一定的相關性, 則AutoEncoder會發現這些相關性.
2. Sparse AutoEncoder
我們可以限制隱藏單元的個數來學到有用的特征, 或者可以對網絡施加其他的限制條件, 而不限制隱藏單元的個數. 特別的, 我們可以對隱藏單元施加稀疏性限制. 具體的, 一個神經元是激活的當且僅當其輸出值比較接近1, 一個神經元是不激活的當且僅當其輸出值比較接近0. 我們可以限制神經元在大多數時間下都是不激活的(亦即Sparse Filtering中的Lifetime Sparsity概念).
定義\(a_j^{(2)}\)為AutoEncoder中隱藏單元的激活值, 我們形式化的定義如下的限制:$${\hat{\rho}}_j=\frac{1}{m}\sum_{i=1}^{m}[a_j^{2}(x^{(i)})]=\rho$$
其中\(\rho\)是稀疏性參數, 一般取值為一個比較接近0的數, 比如0.05.
為了使得學到的AutoEncoder達到上述的稀疏性要求, 我們在優化目標里添加了新的一項, 用於懲罰那些偏離\(\rho\)太多的\(\hat{\rho}_j\). 可以使用KL Divergence:$$\sum_{j=1}^{s_2} \rho log \frac{\rho}{\hat{\rho}_j}+(1-\rho)log\frac{1-\rho}{1-\hat{\rho}_j}$$
上式可也以寫作:$$\sum_{j=1}^{s_2}KL(\rho||\hat{\rho}_j)$$
下圖展示了KL Divergence的特性: \(\hat{\rho}_j\)越接近\(\rho\)(此處為0.2), 則KL Divergence越小.
所以, Sparse AutoEncoder的損失函數為:$$\mathit{J}_{sparse}(\mathit{W},\mathit{b})=\mathit{J}(\mathit{W},\mathit{b}) + \beta\sum_{j=1}^{s_2}KL(\rho||\hat{\rho}_j)$$
其中$$\mathit{J}(\mathit{W},\mathit{b})=\left[\frac{1}{m}\sum_{i=1}^{m}\mathit{J}(\mathit{W},\mathit{b};\mathit{x}^{(i)},\mathit{j}^{(i)})\right]+\frac{\lambda}{2}\sum_{l=1}^{n_l-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}\left(\mathit{W}_{ji}^{(l)}\right) ^2=\left[\frac{1}{m}\sum_{i=1}^{m}\left(\frac{1}{2}\left|\left|h_{\mathit{W,b}}(x^{(i)})-y^{(i)}\right|\right| ^2\right)\right]+\frac{\lambda}{2}\sum_{l=1}^{n_l-1}\sum_{i=1}^{s_l}\sum_{j=1}^{s_l+1}\left(\mathit{W}_{ji}^{(l)}\right) ^2$$
添加KL Divergence后的cost function后的偏導數為:
有個新的偏導數之后, 使用Back Propagation來優化整個神經網絡:
參考文獻:
[1]. Sparse AutoEncoder. Andrew Ng.