无监督学习:自动编码器
Introduction
Auto-encoder本质上就是一个自我压缩和解压的过程
我们想要获取压缩后的code,它代表降维结果,这个过程中我们需要:
- Encoder(编码器),它可以把原先的图像压缩成更低维度的向量
- Decoder(解码器),它可以把压缩后的向量还原成图像
Encoder和Decoder都是Unsupervised Learning,由于code是未知的,对Encoder来说,我们手中的数据只能提供图像作为NN的input,却不能提供code作为output;对Decoder来说,我们只能提供图像作为NN的output,却不能提供code作为input
因此Encoder和Decoder单独拿出一个都无法进行训练,我们需要把它们连接起来,这样整个神经网络的输入和输出都是我们已有的图像数据,就可以同时对Encoder和Decoder进行训练,而降维后的编码结果就可以从最中间的那层hidden layer中获取
Recap: PCA
PCA的过程本质上就是按组件拆分,再按组件重构的过程
Deep Auto-encoder
Structure
中间的hidden layer也可以不止一个,也可以是多个的hidden layer,这种结构就称作deep auto-encoder
PCA vs Deep Auto-encoder
对于下图中的图像(0,1,2,3,4),如果我们使用PCA,只有中间一个hidden layer,先从784维降到30维,再从30维恢复到784维,可以发现图像变得比较模糊;
如果使用deep auto-encoder,先从784到1000,1000到500,500到250,250到300,再使用类似的encoder恢复图像,可以发现结果图像非常清晰
如果我们先使用PCA进行降维,把原图从784降到2维,对二维的数据进行可视化,可以发现不同的digit(不同的颜色代表不同的数字)都叠在一起了;
如果使用deep autoencoder,可以发现这个数字都是分开的
Text Retrieval(文字检索)
下图中蓝色的圆点都表示一个document,我们将输入的query也加入这个document,再计算查询的词汇query和每个document之间的inner product或similarity等,距离最近的document,similarity的值是最大的,因此会retrieval距离红色箭头最近的其他两个蓝色箭头
还有另外一种方法,使用一个vector来表示所有的词汇,vector对应的值就是每个character出现的次数;但这种方式没有考虑原来的语义顺序,每个character都是independent的
在下图中,假设bag里面有2000个词汇,把输入的document或query变成对应的vector,再输入相应的encoder,降维成2维,对这二维的数据进行可视化,如右图所示,不同的颜色代表不同的document
Similar Image Search
以图找图,如果我们只是做pixel上的相似程度,那么我们可以得到以下的结果,大部分显然不符合常理
我们可以把输入的image经过Deep Auto-encoder,变成一个code,再去做搜寻
用Deep Auto-encoder来找类似图片,也可以得到更好的结果
Pre-training DNN
在训练神经网络的时候,我们一般都会对如何初始化参数比较困扰,预训练(pre-training)是一种寻找比较好的参数初始化值的方法,而我们可以用Auto-encoder来做pre-training
在下图中,如果我们要对第一个hidden layer的weight进行初始化,那么我们可以使用Auto-encoder,先将784维到1000维,再进行reconstruct,使1000维降到784维,来使
x
,
x
^
x,\hat{x}
x,x^之间的差值最小
我们可以学习这样的一个Auto-encoder,先将input转化成一个1000维的vector,再把这个vector转化为1000维的code,再把这个code转化为1000维的vector;使input和output越接近越好,把
W
2
W^2
W2的值保存下来
再继续下一个layer,使用第三个Auto-encoder
学习到
W
1
,
W
2
,
W
3
W^1,W^2,W^3
W1,W2,W3之后,就把这个weight作为初始值,
W
4
W^4
W4则进行random init,再使用back propagation进行fine-tune(微调)
De-noising auto-encoder(去噪自动编码器)
对于原来的input x,我们先加入一些noise得到
x
′
x'
x′,进行encode之后再进行decode,使之和最早的input之间的差值最小;encoder现在不仅学习到了encode这件事,还学习到了把noise过滤掉这件事
Auto-encoder for CNN
CNN - Unpooling
在pooling时,会选择四个方框中的最大值,并记住最大值的location;
在upooling时,就会用到上面的location
Deconvolution
Deconvolution其实就是在做convolution
本文图片来自李宏毅老师课程PPT,文字是对李宏毅老师上课内容的笔记或者原话复述,在此感谢李宏毅老师的教导。