几种Autoencoder的深入理解和思考

 

最近一直做用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

 

 

 

 

posted @ 2017-05-10 18:00  LarryGates  阅读(7354)  评论(0编辑  收藏  举报