最近一直做用autoencoder解決句子編碼的問題,一般來說,見得比較多的就是下面幾種autoencoder
- sparse autoencoder
- denoising autoencoder
- variational autoencoder(VAE)
其實如果理解deep belief network的話,各種autoencoder可以很好的理解,下面總結一下我對這幾種autoencoder以及DBN的理解
1: autoencoder
輸入一列向量或者一個矩陣x,經過單層或者多層full connected network, encode成一個向量z,再由這個向量z還原成輸入的向量x,也是通過全連接層,
然后自定義loss函數,可以用歐式距離或者cross entropy,通過BP訓練;
2:denoising autoencoder
autoencoder + dropout
3: sparse autoencoder
autoencoder + L0_normalization(sparsity penalty)
4: variational autoencoder
跟autoencoder沒太大關系,引入hidden state,最大化p(x),即實際的x在這套體系出現的概率,采用KL divergence的方法,將目標轉換成最大化兩部分,見下圖
右邊的第一部分為decoder的誤差, 第二部分為z的先驗分布(標准高斯分布)和z的后驗分布之間的kl divergence;
從代碼的角度來講,把x通過全連接或者其他網絡映射成一個均值u和一個方差v,Gaussian(u, v)即是Q(z/x), 然后根據這個分布sample出一個hidden state, 根據這個hidden state來來通過神經網絡映射成x的預測值x_predict, 比較x和x_predict作為第一部分的loss, 當然這個只是右邊第一個式子的估計值,大概是因為用mcmc很麻煩>_<
5:deep belief network
要理解這個首先得理解restricted boltzmann machine, 比較麻煩,下班了,有時間再寫;
附: monte carlo simulation algorithm