zoukankan      html  css  js  c++  java
  • 几种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

     

     

     

  • 相关阅读:
    python 之 Multiprocessing 多进程
    python 之 Threading 多线程
    Python实战 -- 利用Flask搭建微电影网站(一)蓝图构建
    R语言学习——作图
    python 之 pandas 总结
    python 之 numpy 总结
    C++使用Jsoncpp源码
    C++左值、左值引用、右值、右值引用
    std::forward
    std::move
  • 原文地址:https://www.cnblogs.com/LarryGates/p/6837338.html
Copyright © 2011-2022 走看看