(1)自编码模型
基本概念:给定一个Input(vector),通过Encoder(neural network),得到code(vector)的过程(通常情况下code的维度小于input的维度)
如何训练:可以将code,连接Decoder(neural network),得到Output(与input相同),通过训练input和output之间的损失函数最小,达到最优效果。
与PCA对比:
PCA实际上是通过矩阵变换,将input达到降维的目的
当然,Auto-encoder也可以是一个深层的网络,两边的参数可以是一样的,可以节省训练的参数,但是也可以不一样,因为没有理由说明这是必要的。
从下图可以看出,Deep Auto-encoder的结果比PCA更好
(2)基本应用
1 文本挖掘(Text Retrieval)
通常用词袋模型(one-hot编码)来将文本表示成一个向量空间模型(VSM),但是这种表示方法维度较高,同时没有考虑到语义信息,通过自编码方式则可以将高维向量映射到低维空间。如下图,可以将2000维的文章映射到2维空间,图中的类别边界清晰,相比于LSA模型效果更好(主题聚类模型LDA)
2 搜寻相似图像(Similar Image Search)
在搜寻某个图像的相似图像时,若用pixel(32×32=8192)维来比较相似度时,则结果可能很不可靠,但是若先进行训练自编码器,然后将每个图像都得到code,再通过比较code的相似度来搜寻相似的图像,这样得到的结果更加可靠。
3 DNN的预训练(参数初始化 Pre-training DNN)
当label的数据较少,并且存在大量的unlabel标签时,则可以考虑用自编码模型来预训练模型的参数,若有足够的数据用来训练,则不必通过这种方式来预训练。
预训练时需要一层一层的训练,将每一层都当做是一个Auto-encoder,每训练完一层hidden layer,则得到该层的参数,直到训练完所有的层,最后通过BP作一次微调即可。
注意:一般情况下code的维数要小于input,因此若hidden layer的维数如下图所示(1000>784),此时则需要考虑regularization,保证只有少许的神经元有参数,若不加正则化,模型则很可能未经训练,直接按1:1的方式输出。