deep auto-encoder

1. auto-encoder

     encoder就是把一张图片做编码,使得编码后的size比原始图片小,起到压缩的效果。encoder的过程可以是一个network的架构,

    但是一个unsupervised learning问题,还没办法学习。

    再考察encoder的逆过程decoder,就是把经过encoder过程得到的压缩了的图像数据还原回去(可能无法做到和原始图像绝对

     一致)。同样的,decoder过程也是一个unsupervised learning 的network,单独也是无法学习的。

     

       怎么解决encoder、decoder单独都无法学习的问题呢?那就把两个network接到一起,让它们一起学

       

      联系到之前学习过的降维方法PCA,PCA是做dimension reduction,架构如下

      

        把input x乘上一组weight w,得到c(c的维度较低),把c乘上另一组weight w‘ 就可以还原为x(并不是真正的x,只是与x很

        接近)。中间那一层就是PCA的hidde layer,把hidden layer的output取出来,把它作为x降维后的结果。

        PCA的hidden layer只有一层,我们当然可以把这一层hidden layer扩展成很多层hidden layer。,这就是deep auto-encoder

要做的事。

            

       在Hinton的一篇paper里对PCA和deep auto-encoder的效果做了对比,可以发现deep auto-encoder在还原能力上要比PCA

       要好。

       


2.  auto-encoder—text retrival

     如何把一篇文章压缩成一个code?为什么要这么做?用途有很多,比如现在要做文字的搜寻(判断一个词属于哪篇document)

    通常的做法是把每一片document都表示成一个vector,也把该词表示成一个vector。然后计算cosime similarity

    

     那怎么把document表示成一个vector呢?最trival的方法是bag-of-words,

     

         缺点:bag-of-words无法考虑语义、语序,对bag-of-words来说每个词汇都是independent。

         用auto-encoder来代替bag-of-words。把document压缩成一个vector。Hinton的实验结果如下(把docuemnt压缩成二维)

         注:在Hinton的语料里,每一个document都带标签(属于哪一类文章),图中可见每一类文章对应的二维向量基本在一条放射状的带上。

         

          如果用LSA的话效果则差了很多

          

         

3. auto-decoder—similar image search 

      原始做法是利用pixle算欧式距离,但这样做的效果很差。下图中,计算结果显示马蹄铁居然和迈克尔杰克逊很像。。。

      

         用auto-encoder可以大大改进效果。

         架构如下

         

        相似度效果如下

        


4. auto-encoder—pre-traning DNN

      很多时候深度学习的训练(尤其是几年前计算能力受限的时候),受到参数初始化的影响较大。

     

       比如你要train左边的DNN,可以一步步去train小的网络,然后把得到的矩阵W固化,一步步向前推进。如右上图所示,train一个auto-encoder

       网络,实现了把一个784维的input转成了1000维的向量,中间产物w1保留下来,1000维的向量也固定下来作为新的input,去train下一个                           auto-encoder。

       注:右上这个网络,输入是784维,中间是1000维,对于这种网络,在训练的时候有失效的风险,即网络没有真正的学习,而是直接把784维的input

       直接装进了中间层的1000维。为了防止这种“假学习”的情况发生,可以在这一层加正则(严厉的L1正则),使生成的1000维向量很稀疏。

       

       在得到了W1、W2、W3之后,随机初始化W4,然后再用back propagation去调整W1、W2、W3、W4(这时W1、W2、W3其实已经很好了,只

       需微调)。

       过去training技术不太好的时候pre-training还是很有用的,现在一般很少用这招了。还有一个地方pre-training可以大显身手的。如果你有大量的             unlabeled data,可以用这些unlabeled data去train出W1、W2、W3,然后用少量的labled data去微调W1、W2、W3、W4。

     

猜你喜欢

转载自blog.csdn.net/u010859324/article/details/78463841