你们都清楚神经网络在上个世纪七八十年代是着实火过一回的,尤为是后向传播BP算法出来以后,但90年代后被SVM之类抢了风头,再后来你们更熟悉的是SVM、AdaBoost、随机森林、GBDT、LR、FTRL这些概念。究其缘由,主要是神经网络很难解决训练的问题,好比梯度消失。当时的神经网络研究进入一个低潮期,不过Hinton老人家坚持下来了。html
功夫不负有心人,2006年Hinton和学生发表了利用RBM编码的深层神经网络的Science Paper:Reducing the Dimensionality of Data with Neural Networks,不过回头来看,这篇paper在当今的实用性并不强,它的更大做用是把神经网络又推回到你们视线中,利用单层的RBM自编码预训练使得深层的神经网络训练变得可能,但那时候Deep learning依然争议不少,最终真正爆发是2012年的ImageNet的夺冠,这是后话。算法
如图中所示,这篇paper的主要思想是使用受限RBM先分层训练,受限的意思是不包含层内的相互链接边(好比vi*vj或hi*hj)。每一层RBM训练时的目标是使得能量最小:网络
能量最小其实就是P(v, h)联合几率最大,而其余v’相关的p(v’, h)较小,后面这个是归一化因子相关。这块若是理解有问题的,须要补一下RBM相关知识,目前网上资料很多了。函数
大体的过程为,从输入层开始,不断进行降维,好比左图中的2000维降到1000维, 降维时保证能量最小,也就是输出h和输入v比较一致,而和其余输入v’不一致,换句话说,输出尽可能保证输入的信息量。降维从目标上比较相似于PCA,但Hinton在文章说这种方法比PCA效果会好不少,尤为是通过多层压缩的时候(好比784个像素压缩到6个实数),从原理应该也是这样的,RBM每一层都尽可能保留了输入的信息。学习
预训练结束后,就会展开获得中间的解码器,这是一个叠加的过程,也就是下一层RBM的输出做为上一层RBM的输入。优化
最后再利用真实数据进行参数细调,目标是输入图片通过编码解码后尽可能保持原图信息,用的Loss函数是负Log Likelihood:编码
这篇在今天看来实用性不太大,难度也不大,但在当时这篇文章看起来仍是晦涩的,不少原理没有细讲。为什么能中Science?我的认为,毕竟Hinton是神经网络的泰斗,换我的名不见经传的人估计中不了,另外这篇文章也确实使得之前不可能的深层神经网络变得可能了,在今天依然有不少能够借鉴的地方,细心的同窗会发现上百或上千层的ResNet的思想在必定程度上和这篇论文是神似的。ResNet也是意识到深层(152层)很差直接训练,那就在单层上想办法,将原来直接优化H(x)改成优化残差F(x) = H(x)-x,其中H(X)是某一层原始的的指望映射输出,x是输入,至关于输入x有个直通车到达该层输出,从而使得单层的训练更加容易。htm
参考资料:图片
[1] Paper:http://www.cs.toronto.edu/~hinton/science.pdfci
[2] 代码:http://www.cs.toronto.edu/~hinton/MatlabForSciencePaper.html
本文只是简单回顾,疏漏之处敬请谅解,感兴趣的能够加QQ群一块儿学习:252085834