首页 > 程序人生 > 有关深度学习领域的几点想法
2016
03-16

有关深度学习领域的几点想法


今天早上吃完饭,在去往实验室的路上,脑袋了突然冒出一个奇怪的想法,就是万一将来有机会去心仪神往的百度、阿里这些深度学习的尖端企业去工作的话,人家公司的HR问我“既然你是做DeepLearning研究的,那你对深度学习有什么个人体会?”,我该怎么说呢?不要觉得自己将来进不了百度、进不了阿里,一切皆有可能,因此为了这一丢丢的可能性,我就在食堂去往实验室的路上,用这二十分钟的时间稍稍把自己脑子中的想法总结总结,现在到了实验室了,写篇博客和大家交流交流,这篇博客纯属我个人一时的头脑风暴,没有图没有代码,稍显枯燥,麻烦大家多给点耐心吧。搞了一年多的深度学习理论,回过头来想想,有三点值得一提:深度学习的特征提取能力为什么会强?深度学习应该用什么设备?深度学习和人工智能有何紧密联系?

1、深度学习的特征提取能力为何如此之强?

这个问题困扰着很多深度学习的领域的大牛,很多人都希望能够解决这个问题,对应的就是试图从理论层面解读深度学习结构的优势所在以及产生这种优势的原因。毕竟ImageNet都快被完烂了,CNN的参数也几乎被调遍了,但本质问题依然没有解决,人类的求知本能迫使我们去想:“DeepLearning为什么 这样厉害”?我觉得有一篇文章堪称DeepLearning理论探索的代表之作,那就是汤晓鸥教授团队的“DeepID三部曲”中的第三篇文章,文章中对卷积神经网 络中各个卷积核的形式、卷积层输出特征的特点都做了很详细的研究分析,可以算是卷积神经网络理论分析的开端。不过由于我目前没有硬件条件去运行一个一二十 层的CNN,但这并不能阻止我去思考问题的本质,因此我准备从我的研究生课题“子空间方法深度化改造”的角度来对这个问题进行一点点解读。
子空间深度化是2015年才提出的一个概念,目的就是将经典的子空间特征提取方法和识别方法(如Eigenface和Fisherface)进行堆叠, 重点对比分析深度化改造前后的模型在特征提取能力方面的改进,这个研究方向的鼻祖当属鲁继文和马毅两位深度学习领域的大牛,他们提出的PCANet算法一 鸣惊人,提醒了我们深度学习原来还可以这样研究,他们在《PCANet: A Simple Deep Learning Baseline for Image Classification?》一文中说的明白“我们提出一个简单的深度学习框架,为后续的深度学习研究提供一个基准”,我也是在这篇文章的启发下开始做这个方向。
我个人认为子空间深度化改进研究得出的研究成果(PCANet、LDANet、RandNet)虽然在识别率方面与卷积神经网络相比没有明显的优势,但其更容易去回答“深度学习的特征提取能力为何如此之强?”这个问题。因为单层的PCA、Fisher特征识提取识别模型大家都再熟悉不过,深度化改造之 后,加深了结构(两层或者多层),但基本的映射核、映射方式都没变,从单一变量法的角度分析,改造之后模型特征提取能力的提升只能归功于改造之后的深度结 构。至于模型的特征提取能力到底提升了多少,大家可以查阅那篇文献,我这里给出一个通俗的比喻,改造前,这个单层模型只是Eigenface和 Fisherface,改造之后它们就摇身一变,成了能够在某些领域甚至可以与CNN媲美的DeepLearning。因此我认 为,DeepLearning之所以强,很大程度上就是得益于它的深度结构,这也正好印证了Hinton的观点:多隐层神经网络具有更为优异的特征学习能力。

2、深度学习应该用什么设备?

做深度学习就得想办法加速,这个没得商量(当然PCANet这样的模型除外),加速的手段有两个,一是专用神经网络芯片,而是英伟达的N卡。
想想当时自己之所以关注这个加速问题,说真的主要还是羡慕。由于我刚刚入手深度学习时,也是一腔热血,立志研究CNN,调得一手好试,但很快发现我目前的硬件条件是达不到的,没有一两块泰坦级别的显卡(必须是英伟达的),一切都是浮云。人就是这样,越羡慕什么就越想了解什么。因此在平时看到有关神经网络加速方面的资料时都会格外注意,一个偶然的机会看了一本CCF的专刊,题名就叫《类脑计算与神经网络加速》,从而对深度学习的加速设备问题有了一定的、系统的理解。
首先,神经网络加速的手段有两个,一是专用神经网络芯片,二是英伟达的N卡。说实话这两个手段都是双刃剑,各有利弊。神经网络芯片的加速比非常高,实验证明其加速比是同品级英伟达N卡的2.5倍甚至更高,对应的缺点就是神经网络芯片对算法的要求比较苛刻,具体说就是一种型号的神经网络芯片只能加速几种甚至一种神经网络算法,这也是芯片的硬件结构限制。相应的英伟达的GPU虽然在加速性能上比神经网络芯片差一点,但是其泛化性能巨强,一块GPU几乎可以加速所有的神经网络算法,毕竟有CUDA编程,GPU本身并不直接接触DeepLearning,因此无论何种神经网络算法,在GPU看来都是一样的,加速矩阵运算就可以了。综上,我个人认为,在算法研究开发、调试的过程中可以用GPU加速,在产品实用阶段就考虑用神经网络芯片了。举个例子,2014年谷歌的VGG模型,主题是“把CNN搞得更深”,8层到16层层层测试,在这个测试过程中显然要用GPU来干,等测试完成了,知道多少层最优,什么参数设置最合理,再放到专用神经网络芯片上生产就可以了。

3、深度学习与人工智能的关系?

之所以提这一点,主要是受最近阿尔法狗人机大战的影响。在我写这篇博客的时候阿尔法狗已经以4:1的比分赢得胜利。当年IBM的深蓝,靠着大规模集群的超级计算能力,用暴力搜索的方式在国际象棋上战胜了人类,如今阿尔法狗靠着深度学习在围棋上战胜了人类。不得不说,21世纪DeepLearning成为了人工智能的核心,说到这里就可以扯一点点类脑计算的知识。深度学习火了,就有人开始想用它来造机器人,来模拟人脑。其中在类脑计算过程中给我印象最深的就是神经拟态计算机。所谓神经拟态,就是最原始、最大化的模拟人脑的神经元,但是生物系统是模拟的,没错,人脑也是模拟系统,所以神经拟态计算机也抛弃了数字形式,改用模拟计算机。你人脑中的神经元怎么连我这里的模拟神经元就怎么连,你人脑有多少神经元我这里就造多少神经元,因此有大牛推测:假如规模是唯一瓶颈的话,机器人将会把人类当宠物。原因很明确:人类经过几万年的进化才达到现在的脑容量,而计算机中芯片的规模只需几年就可以翻番。而且这里我也发现了一个有趣的现象:只要什么技术火了,总会有人第一时间把它往人工智能方面用,当年的超级计算机、现在的极深层DeepLearning,看来只要是人工智能不统治世界,人类就永远不会放弃研究。

注:各位有什么好的想法可以来探讨下,大家共同进步!


文章地址:http://mp.weixin.qq.com/s?__biz=MzA5MzY4NTQwMA==&mid=403118056&idx=1&sn=6e892f5633f8010115685f3fd96e31de&scene=23&srcid=0316H3Ff

编程技巧