Do Deep Nets Really Need to be Deep
2017-01-05 15:42
435 查看
今天我们要谈论的文章为:
Lei Jimmy Ba, and Rich Caurana. Do Deep Nets Really Need to be Deep?. ICLR2014
openreview中有下载链接和讨论:
http://openreview.net/document/9a7247d9-d18e-4549-a10c-ca315d84b6db#9a7247d9-d18e-4549-a10c-ca315d84b6db
引言:
神经网络的提出已经有半个多世纪,BP算法的发现也已经过了三十年。但是,直到2006年,大牛Hinton才
成功训练出多层神经网络,并在图像识别和语音识别等领域大放异彩。在各大公开的竞赛中,基于深度神经
网络(DNN)方法的性能稳居头把交椅的位置,并且,甩传统的机器学习方法好几条街。为了区别于之前的
学习算法,Hinton给它取了一个响亮的名字——deep
learning。
据说,相对于传统的神经网络、SVM、adaboost、随机森林等机器学习算法,DNN最大的好处在于其网络结构
是deep的,这种结构和人的视觉感知原理一致,可以提取输入数据不同抽象层次的特征,因而更适合来进行
数据表达。
具体介绍/讨论参见:
1)
pluskid的博客 Deep
Learning and Shallow Learning
2) Bengio Y. Learning deep architectures for
AI. Foundations and trends® in Machine Learning, 2009
3) zouxy09的CSDN:Deep
Learning(深度学习)学习笔记整理系列
但是,如果,有一种方法,使得shallow neural network也可以达到deep neural network的性能,并且,两者
的parameter的个数差不多,是不是很神奇?如果这样,neural network是不是一定需要是deep的呢?
文章内容:
文章在TIMIT数据库上做实验,一共训练了7个neural network。结果如下:
![](http://img.blog.csdn.net/20140429165628984)
其中,SNN代表Shallow Neural Network,是一个只有一个隐含层的神经网络;DNN代表Deep Neural Network,
有三个以全连接层组成的隐含层;CNN代表Convolutional Neural Network,其隐含层包含1个卷积&maxpooling
层,然后接上三个全连接层。SNN-MIMIC是通过model
compression得到的Mimic Shallow Neural Network。
其中,SNN,DNN和CNN用的都是标准的训练算法得到的结果。SNN-MIMIC的具体训练过程如下:
将多个CNN给ensemble起来,形成一个宇宙无敌的super CNN。然后,对于训练集的每一个sample,由这个
super CNN给出一个output,然后,将训练集中的label替换成这个output作为groundtruth,再用标准的BP算法
进行训练。可以把这里的super CNN当做一个函数,然后,我们训练一个Mimic的SNN来逼近这样一个函数,
只要这个Mimic SNN在训练集的临域能近似这个super CNN就可以了。
在训练SNN和SNN-MIMIC的过程中,当隐含层的节点数增多时,训练的过程会变得相当慢。这里可以用低秩矩阵
来近似原来的大的矩阵,加快训练过程。
作者的结论:
通过model compression的方法训练得到的SNN的性能与DNN的差不多,居然,它们的参数的个数也差不多,
那么,是不是有一种训练方法,可以使得SNN直接在训练集里进行,也能达到这个性能?所以,作者的结论是,
当前的BP&随机梯度下降的训练算法对deep的neural net更有效。于是,在这个宇宙中,似乎存在一种算法,
使得SNN能得到更好的训练。
Yoshua Bengio的评论:
这篇文章上传到openreview,得到了大牛Yoshua
Bengio的关注。这位大牛的观点是,
the depth (and convolutions) provide a PRIOR that helps
GENERALIZING better.
第一个证据就是,要得到与CNN性能差不多的SNN-MIMIC,需要比CNN多得多的参数(13M vs 180M),而
CNN当然提供了一个很强的PRIOR;
第二个证据就是训练误差,只需要看看DNN和SNN的训练误差是否差不多就可以了。因为,如果差不多,则
说明这些模型 fit 已知样本(训练样本)的能力差不多,但是 fit 未知样本(测试样本)的能力DNN比SNN强,
说明DNN的generalization的能力更强。
其他的一些知识:
model compression通过一个小的model来逼近一个大的model(或者一个model ensemble)的性能。通常情况
下,需要大量的unlabeled的样本,将这些样本送到大的model里,得到一个输出,然后,将这些样本和对应的
输出组合,用supervised learning得到这个小的model。这里有两个需要注意的地方:第一,unlabeled的样本
不能只是将大的model的训练集中的label去掉而得到的样本,因为大的model往往在这些样本点上有overfitting;
第二,unlabel的样本数需要比大的model的训练集中的样本数要多得多,这样才能更可能的近似原来的这个大
的model。
转载本文请联系原作者获取授权,同时请注明本文来自朱伟科学网博客。
链接地址:http://blog.sciencenet.cn/blog-1583812-845916.html
Lei Jimmy Ba, and Rich Caurana. Do Deep Nets Really Need to be Deep?. ICLR2014
openreview中有下载链接和讨论:
http://openreview.net/document/9a7247d9-d18e-4549-a10c-ca315d84b6db#9a7247d9-d18e-4549-a10c-ca315d84b6db
引言:
神经网络的提出已经有半个多世纪,BP算法的发现也已经过了三十年。但是,直到2006年,大牛Hinton才
成功训练出多层神经网络,并在图像识别和语音识别等领域大放异彩。在各大公开的竞赛中,基于深度神经
网络(DNN)方法的性能稳居头把交椅的位置,并且,甩传统的机器学习方法好几条街。为了区别于之前的
学习算法,Hinton给它取了一个响亮的名字——deep
learning。
据说,相对于传统的神经网络、SVM、adaboost、随机森林等机器学习算法,DNN最大的好处在于其网络结构
是deep的,这种结构和人的视觉感知原理一致,可以提取输入数据不同抽象层次的特征,因而更适合来进行
数据表达。
具体介绍/讨论参见:
1)
pluskid的博客 Deep
Learning and Shallow Learning
2) Bengio Y. Learning deep architectures for
AI. Foundations and trends® in Machine Learning, 2009
3) zouxy09的CSDN:Deep
Learning(深度学习)学习笔记整理系列
但是,如果,有一种方法,使得shallow neural network也可以达到deep neural network的性能,并且,两者
的parameter的个数差不多,是不是很神奇?如果这样,neural network是不是一定需要是deep的呢?
文章内容:
文章在TIMIT数据库上做实验,一共训练了7个neural network。结果如下:
其中,SNN代表Shallow Neural Network,是一个只有一个隐含层的神经网络;DNN代表Deep Neural Network,
有三个以全连接层组成的隐含层;CNN代表Convolutional Neural Network,其隐含层包含1个卷积&maxpooling
层,然后接上三个全连接层。SNN-MIMIC是通过model
compression得到的Mimic Shallow Neural Network。
其中,SNN,DNN和CNN用的都是标准的训练算法得到的结果。SNN-MIMIC的具体训练过程如下:
将多个CNN给ensemble起来,形成一个宇宙无敌的super CNN。然后,对于训练集的每一个sample,由这个
super CNN给出一个output,然后,将训练集中的label替换成这个output作为groundtruth,再用标准的BP算法
进行训练。可以把这里的super CNN当做一个函数,然后,我们训练一个Mimic的SNN来逼近这样一个函数,
只要这个Mimic SNN在训练集的临域能近似这个super CNN就可以了。
在训练SNN和SNN-MIMIC的过程中,当隐含层的节点数增多时,训练的过程会变得相当慢。这里可以用低秩矩阵
来近似原来的大的矩阵,加快训练过程。
作者的结论:
通过model compression的方法训练得到的SNN的性能与DNN的差不多,居然,它们的参数的个数也差不多,
那么,是不是有一种训练方法,可以使得SNN直接在训练集里进行,也能达到这个性能?所以,作者的结论是,
当前的BP&随机梯度下降的训练算法对deep的neural net更有效。于是,在这个宇宙中,似乎存在一种算法,
使得SNN能得到更好的训练。
Yoshua Bengio的评论:
这篇文章上传到openreview,得到了大牛Yoshua
Bengio的关注。这位大牛的观点是,
the depth (and convolutions) provide a PRIOR that helps
GENERALIZING better.
第一个证据就是,要得到与CNN性能差不多的SNN-MIMIC,需要比CNN多得多的参数(13M vs 180M),而
CNN当然提供了一个很强的PRIOR;
第二个证据就是训练误差,只需要看看DNN和SNN的训练误差是否差不多就可以了。因为,如果差不多,则
说明这些模型 fit 已知样本(训练样本)的能力差不多,但是 fit 未知样本(测试样本)的能力DNN比SNN强,
说明DNN的generalization的能力更强。
其他的一些知识:
model compression通过一个小的model来逼近一个大的model(或者一个model ensemble)的性能。通常情况
下,需要大量的unlabeled的样本,将这些样本送到大的model里,得到一个输出,然后,将这些样本和对应的
输出组合,用supervised learning得到这个小的model。这里有两个需要注意的地方:第一,unlabeled的样本
不能只是将大的model的训练集中的label去掉而得到的样本,因为大的model往往在这些样本点上有overfitting;
第二,unlabel的样本数需要比大的model的训练集中的样本数要多得多,这样才能更可能的近似原来的这个大
的model。
转载本文请联系原作者获取授权,同时请注明本文来自朱伟科学网博客。
链接地址:http://blog.sciencenet.cn/blog-1583812-845916.html
相关文章推荐
- [NIPS2014]Do Deep Nets Really Need to be Deep?
- 神经网络压缩:Mimic(一)Do Deep Nets Really Need to be Deep
- "Do Deep Nets Really Need to be Deep?"阅读笔记
- 论文阅读《2018.2-Do deep nets really need weight decay and dropout》
- 《Do Deep Nets Really Need to be Deep?》精读笔记
- 人脸识别 -Do We Really Need to Collect Millions of Faces for Effective Face Recognition?
- 【明哥报错簿】之json转换报错---net.sf.ezmorph.bean.MorphDynaBean cannot be cast to XXXDO
- Do We Really Need to Collect Millions of Faces for effective face recognition
- MLY -- 7.How large do the dev/test sets need to be?
- SQL*Net message to client wait isn’t really what it’s thought to be
- 7. How large do the dev/test sets need to be? 开发集和测试集多大合适(《MACHINE LEARNING YEARNING》翻译)
- Do you really Need an Orchestration?
- Crystal Reports .NET Error - "Access to report file denied. Another program may be using it."
- It is said that wars in the 21st century will be fought over water. Do you agree? What do you think can be done now to alleviate
- NEED TO DO…
- 推荐几个好用的asp.net控件(to be continued)
- be to do, be going to do, be about to do的区别
- GWT in practice: some parts need to be learned later
- What do I need to do to get interrupts working?
- be prepared to do something