也没啥原创,就是在学习深度学习的过程中丰富一下我的博客,嘿嘿。
不喜勿喷!
Hinton是深度学习方面的大牛,跟着大牛走一般不会错吧……
来源:A fast learning algorithm for deep belief nets
看着引用次数,什么时候我也能来一篇(不要笑我这个学渣)。
摘要中出现的几个词就让我有点茫然:
complementary priors,这是一个启发规则还是什么鬼的
explaining away effects,没听说过这个效应捏
据说他的这种快速的贪心算法(fast, greedy algorithm)能够一次训练一层的深度直接信任网络(deep, directed belief networks)
而这种快速的贪心算法是为了给后面的利用较慢的wake-sleep algorithm精细调节权重的过程进行初始化。最后得到一个具有很
好泛化性能的网络,而且效果还要比最好的分类学习算法(the best discriminative learning algorithms)还好。(反正我用神经网
络都是单隐层的,一般说法是多隐层具有很好的拟合效果,但是会造成过拟合,即over fitting,但是这里又能快速训练,而且文
中也说多层的效果也很好)。文中也是主要利用这个deep belief nets来做图片的分类。
首先Hinton是建立了一个模型,这个模型如下图所示,我也要好好看看这个模型:
这个模型的有三个隐含层,最上面两个隐含层形成了一个undirected associative memory(没有直接相关联的记忆?),剩下的隐含层
则形成了一个directed acyclic graph将相关记忆(associative memory)转化为可观测的变量,例如图片的像素。接着谈到了建立一个
这样的混合的模型的好处(反正我是没有很好的理解这个模型的):
1)即使对于有上百万个参数和很多隐含层的深度网络中,对于这样的模型也存在着很快的贪心算法,找到相当好的参数;
2)这个模型的训练算法是unsupervised,但是又可以用于labeled data,是因为该训练算法可以训练模型生成label和data(第2点的
意思是不是,这个模型不仅能产生label,还能反推会data);
3)有精细的训练算法能调节参数的模型使得模型具有很好的泛化性能,而且分类能力要比一般的分类方法强;
4)训练好的模型能够很好的解释深度隐含层的分布表示(distributed representations);
5)The inference required for forming a percept is both fast and accurate(目前还不知道这个该怎么理解);
6)该学习算法是局部的,也就是说调节参数只会根据前驱突触和后继神经元突触的强度;
7)(神经元之间的)交流也特别简单,神经元之间只需要交流它们随机的二进制状态。
第2部分介绍了消除explaining away现象的方法,即complementary prior。
第3部分说明restricted Boltzmann machines和infinite directed networks with tied weights之间是等价的。
第4部分介绍了那个快速的贪心算法(一次训练一层数据,这样来看是不是就训练一层就完了,不会从头训练吧),随着新的隐含层加入,
模型整体的泛化能力提高了。The greedy algorithm bears some resemblance to boosting in its repeated use of the same weak learner, but
instead of reweighting each data-vector to ensure that the next step learns something new, it represents it(这里他不是每次都重新调整权重,
而是重新表示,是这个意思吗?)。
第5部分介绍了经过快速贪心算法初始化之后的权重,怎么利用wake-sleep算法进行fine-tune。
第6部分展示了包含3个隐层1.7 million个权重的网络对MNIST set of handwriting digits模式识别性能(我擦,这么多参数)。没有提供这
些手写体的任何几何信息,也没有经过任何的预处理,所建立网络的识别误差是1.25%,比最好的back-propagation的网络的1.5%要好,同
时也比支持向量机的1.4%的误差稍好。
第7部分我们要看看这个网络是在想什么,如果没有对可视输入进行约束。从这个网络的高层表示生成一张图片(我感觉这个牛叉,就像人眼
看到一幅图片,然后经过大脑的抽象之后,刻在脑子里,也就是突触之间的权重会保存信息,然后我们在根据这些信息重构一张图么?)。
讲到这里,首先是一个具有很多特性的网络结构提出来了,它有很多的隐含层,而且这些变量的值都是二进制(也可以说是二元的,binary),
然后我们得对模型提出某个训练算法,让它能够学习,训练的过程大体上分为两个阶段,第一个阶段是fast greedy algorithm来对每一层的参数
进行训练,这个过程很快。第二阶段就是一个fine-tune的wake-sleep算法,由于没有具体的去看算法,目前也就只能从整体上把握这个过程,
现在就具体的去看看怎么实现的吧!(启发:一直以来的印象就是多隐层的泛化效果不好,偏偏就有人反其道而行之,要多整几层;网络结构上
也有改变,算法上也有新的)。
2 Complementary priors
explaining away现象是什么?