1.思路
目的:用神经网络降维,得到低维度code
过程:
1.Encoder编码器
- encoder帮助降维,encoder(编码器)即为很多隐藏层的神经网络。
- 输入:一个28*28的数字图片,经过encoder转化,输出:code(降维后结果)
- 因为我们不知道code什么样子,所以也就没办法训练encoder,故需要训练decoder(解码器)
2.Decoder解码器
- 输入:code(低维),经过decoder转化,输出:类似最初的输入(高维)
- 同样,该结构单独存在时无法学习
3.Encoder编码器-Decoder解码器连接在一起,即可完成学习
2.主成分分析&深度自编码 异同比较
主成分分析:
c
c
c 可视为hidden layer(线性的),若将中间整体当作神经网络来看,我们将中间的层称为Bottleneck layer(因为中间维度小)
深度自编码: 与PCA相比,即多加了几个hidden layer
3.提高训练效果——De-noising auto-encoder
- 为了防止训练并没有真正压缩、理解输入(没训练出良好的code),仅是为了输出更接近于输入的值,引入De-noising auto-encoder
- De-noising auto-encoder即将输入添加噪声
- 通过编码、解码,得到没有噪声的输出
- 目的:要让模型 既要学会压缩,也要将noise消除
4.应用
4.1 数字手写识别
1.仅从pixel图片通过t-SNE,发现4、9分不开
2.先将pixel通过PCA降至32维,再利用t-SNE,结果仍然是4、9分不开
3.训练一个auto-encoder,将其中encoder部分拿出来,将手写数字图片输入,结果如下
4.2 文本检索:即输入query,返回文章
1.传统方法:vector space model向量空间模型
- 将每个query和对应的document全部用一组向量描述,计算query-每个document的角度,相似度越高 则其越可能成为搜寻的结果
- 向量描述的方法:bag-of-word,即高维的向量。缺点:仅能做到字面比对,未考虑到语义
2.我们希望不仅考虑字面意思,还要考虑语义意思。即输入一个词汇不仅将包含该词的文章找出,还希望有关联的文章被找出。 - 将bag-of-word通过auto-encoder降成2维(即每篇文章均为二维空间的点),结果如图
- 此时输入query,经过auto-encoder降维,再计算与文章间的相似度,从而找出同类文章
4.3 Similar Image Search(即以图找图)
如图即为做法,实际还有decoder部分未画出
4.4 Pre-training DNN以获取合理参数
例如做手写数字识别,常规神经网络做法,如图:
现在,我们可以预训练个auto-encoder
-
目标:将预训练学习到的参数,作为上述神经网络的初始参数
-
为了训练效果好,可以加入L1正则化,或是加入噪声(上文提到的de-noising auto-encoder)
-
得到 w 1 w 1 ′ w^1{w^1}' w1w1′,如图:
-
现在利用 w 1 w^1 w1,训练得到新的特征 a 1 a^1 a1
-
训练第二个auto-encoder 得到 w 2 w^2 w2和 a 2 a^2 a2
-
训练第三个auto-encoder 得到 w 3 w^3 w3
-
将 w 1 w^1 w1 w 2 w^2 w2 w 3 w^3 w3当作神经网络的初始参数,再将输出层接上去(随机初始化即可)
-
然后再反向传播算法,训练得到合适参数