"阅读花书第一章解读(上)"的基础是机器学习,而这篇文章的阅读基础是深度学习。其中涉及深度学习的各种模型与术语,若不甚明白,暂时不必细究。主要希望大家感受下,在历史发展过程中,当初知识发现时的模样,与我们今天看到的是有很大不同的。今天看到的样子是一点一点累积出来的。文末列出的参考文献,我并未全部读懂,只是借机整理下,供日后细读。
在上篇文章深度学习概述中,我们了解到为了解决机器智能中的挑战问题,大概经历了知识库、机器学习、表示学习、深度学习几个阶段。在这篇文章中,我们集中介绍深度学习/神经网络的发展历史,其经历了控制论、联结主义、深度学习三个阶段。在每个阶段中,数据、算力、模型、模型训练、应用价值等是相互依存发展的。
1. 感知机--控制论时代
mark-I 感知机
1946年,人类历史上第一台真正意义的电子计算机被发明了。1956年夏天,在达特茅斯学院,以香农为首的计算机科学家们开了一场头脑风暴研讨会,称之为“达特茅斯夏季人工智能研究会议“。人工智能的提法便是在这次会议上提出的。在这样的大背景下,1957年感知机由Frank Rosenblatt提出。当时它并不是一段程序,而是一台机器。感知机的提出,主要受到神经元的启发,来解决分类问题。
上半部分是动物/人的神经元, 下半部分是感知机模型
感知机是一个线性模型,可以解决分类问题。但后来人们发现,线性模型有很大的局限性。感知机连XOR(异或)这样简单的分类任务都无法解决。XOR问题如下图,当a与b相同时,样本为圆圈类别;当a与b不同时,样本为三角类别,试着找到一条直线将两类分开?显而易见,无论你怎么划分 ,都无法找到一条直线把圆圈和三角完全分开。随即,以感知机为代表的神经网络第一次进入低谷,直到多层感知机/浅层神经网络的出现。
能否用一条直线将三角和圆圈分开呢?
2. 浅层神经网络-联结主义20世纪八十年代,一个被称为“联结主义“的思潮兴起。大意是大量计算单元一起相互作用会产生智能,而单个或少量一起相互作用的计算单元是不具备这样的能力的。把神经元看作计算单元,也就意味着大量神经元在一起相互作用才会产生智能。目前所知,人脑的神经元数量大约1000亿,平均每个神经元与10K个神经元相连接,这种现象可以看作是联结主义的一种佐证吧。
大象的神经元数量更大,是大象脑的体积大的缘故
浅层神经网络,如下图所示,可以很容易地解决XOR问题。在深度学习概述(上) 中表示学习部分,我们以预测房屋价格为例对浅层神经网络做了介绍。样本在输入层的表示,经过多个隐藏层的变换,在每个隐藏层中都得到了新的表示。基于最后一个隐藏层的表示,简单线性模型的输出层,就能实现最终的分类目标。反向传播[1] (Back Propagation)算法的出现,再配合随机梯度下降算法(Stochastic Gradient Descent),使得训练浅层神经网络成为了可能。
浅层神经网络模型示意图
这里有个段子,Rumelhart与Hinton等在1982年发明了BP算法,并于1986年在nature发表。七八十年代,在其他几个领域,也有人或早或晚独立地发明了BP算法,毕竟求导的链式法则早就是基本常识了。但是、但是,LeCun在读博期间(1985年)也独立地发明了BP算法,用来训练神经网络。Hinton等发表的nature文章特殊之处在于,指出了利用BP算法训练神经网络,可以达到学习特征/表示的目的,并为分布表示(distributed representation)埋下了种子。
LeCun 是Hinton的博士后
20世纪八九十年代,人们发展出了很多神经网络模型,如卷积神经网络(CNN)和循环神经网络(RNN)。受大脑处理视觉信号方式的启发,1980年Fukushima [2]提出一种多层结构的模型(Neocognitron)来处理图像,其中的重要特性是 平移不变性。1987年Hinton等 [3]为了解决语音识别问题,提出一种新的网络结构,即时延神经网络(TDNN - Time Delay Neural Networks) ,其本质上是1D的卷积网络。1989年LeCun [4]正式提出卷积神经网络(CNN)来解决手写体的识别,即模型中引入卷积层做为先验知识,从而减少模型权重的数量,而又不失泛化能力。
段子又来了。看到这,你是不是有个疑问?CNN模型不就是TDNN网络在2D的推广吗?其实,Hinton也是多次这样公开表达的。尴尬!!!那么,为什么CNN的发明归于LeCun呢?我想大概有几个原因:其一是他首次构建并使用该网络解决图像识别的问题;其二是他 [5]构建了更好的CNN网络(LeNet-5),且该网络实现了商业化部署。其三是TDNN在语音识别上的效果,事后表明并未出奇地好。
除卷积网络外,另一大类就是循环神经网络(RNN)。RNN网络是描述序列数据中不同元素间相互依赖关系的模型,类似于物理学中描述系统演化的方程。由于早期RNN中状态演化方式太过简单,它无法描述长距离依赖(long term dependence),训练时反向传播过程中又存在梯度消失等问题。为了解决这些问题,1997年Hochreiter和Schmidhuber [6]提出了著名的长短期记忆模型(LSTM - Long Short Term Memory)
Schmidhuber
在这一历史阶段,数据集规模(MNIST-6W)与算力(1M flops)都不是很大的情况下,只有隐藏层数量较少的浅层神经网络才能被训练好。期间有两个典型应用,LetNet-5 [5]和神经语言模型及词向量 [7, 8]。LeNet-5是为了解决手写体识别而提出的一种浅层卷积神经网络,包含三个卷积层与一个全连接层作为隐藏层。隐藏层的激活函数为tanh,不是今天CNN中常用的ReLU。它包含的神经元数量是10K, 权重数量在60K左右。2001年Bengio等 [7]提出了神经语言模型,包含两个隐藏层的浅层神经网络。在训练语言模型的同时,得到了词的一种新表示,即词向量。相比词的onehot表示,词向量是一种高效的低维分布表示。
AT&T BELL LAB时,LeCun是组长,Bengio是他的下属
只有更复杂(多层)的模型,才能解决更复杂的问题。但这种复杂模型若不能被很好地训练,那么它的潜力就无法发挥出来。 但在这一历史阶段,人们没能训练出性能好且更深层的DNN或更大号LeNet-5等深层模型。相比竞品(SVM和概率图模型),在很多应用领域,浅层神经网络的性能并未出奇地好,故进入第二次低谷。直到,Hinton等 [9]在2006年找到了一种新的方法,无监督预训练,才能训练出性能不错的深层神经网络DNN。
看到这里,你可能会觉得很突兀,为什么无监督的神经网路突然冒了出来。其实,在联结主义时代,神经网络还有另外一个分支,即利用神经网络结合概率图解决无监督问题。通过神经网络拟合概率分布(如图片在像素空间32x32x1中的概率分布),得到图片更好的表示。其中,涉及的主要模型是玻尔兹曼机(BM)与受限玻尔兹曼机(RBM),以及它们的训练和推断算法。而这些关键贡献几乎都来自Hinton与其同事。除了反向传播算法,老先生的主要精力似乎都集中在这里。也正是由于这些积累,才有了2006年神经网络以深度学习之名再次起飞,一直到今天。
再多说两句,玻尔兹曼机等模型、及其训练和推断算法借鉴了统计物理学中诸多概念与方法,如配分函数、平均场近似等。20世纪七十年代,物理学界有一种思潮兴起,即more is different (MID)。MID大概是说,单个粒子的动力学特性已知,但当大量粒子在一起相互作用后,在宏观上会产生许多新物理特性,如超导现象。MID的思想与联结主义有着惊人的相似性,所以神经网络借鉴了很多物理学中的结构,也就并不为奇了。另外,由于神经认知科学发展缓慢,它慢慢地只是作为神经网络发展的灵感来源之一,其他来源有工程、数学、物理等等。
3. 深层神经网络 - 无监督预训练2006年Hinton等[9]发现,在同样的MNIST数据集上,通过layer wise greedy training对深度信任网络(一种无监督模型)进行了很好地训练。他们用得到的权重值对DNN网络(监督模型)的权重进行了初始化,再利用样本的label通过反向传播对DNN网络进行fine tuning。这样就首次实现了对DNN网络模型的训练,且分类效果超过SVM。注意,此时使用的数据集仍是原来的数据集,算力的提升也不是很多,模型(DNN)也没变,只是在训练方法上找到了新的突破。
既然部分深层神经网络可以被成功训练,人们便开始研究为什么深层神经网络难训练?为什么好的初始化方法,有时能训练出性能优异的模型?目前常用的初始化方法之一,Xavier初始化 [10]就是在这个阶段发现的。在2010年LeCun [11]写的一篇关于CNN的综述文章中,他仍在探讨如何利用无监督预训练的方法来训练更大号的LeNet-5模型。但在2012年,Hinton与其徒弟Alex等 [12]发现根本无需无监督预训练,直接通过反向传播就能实现对深层CNN模型的训练。AlexNet的成功,又一次改变了人们对如何训练深层神经网络的认知。
4. 深度学习 - AlexNet横空出世2012年的AlexNet是第一次无需借助无监督预训练,直接通过反向传播训练的深层CNN模型,且效果远超其他方法。该模型包含五个卷积层与三个全连接层,神经元数量约650K,参数量约60M。对比LeNet-5,神经元数量多了65倍,参数数量多了1000倍。再想想联结主义的思想,确实有点意思。论文 [12]中阐述了几个关键点:
4.1 数据集
ImageNet是2009年由李飞飞牵头提出的,包含1500万样本和22000个物体分类。为了解决复杂的问题,如在高分辨率图片中进行物体识别,大数据集是非常重要的。基于小数据集,如CIFAR-10/100(6W样本),训练AlexNet这样复杂的模型,肯定会由于过拟合造成分类效果差。同时,论文还采用了Data Augmentation的方法得到了几千上万倍更大的样本量。总之,数据集的规模是八九十年代的成百上千倍。
4.2 算力
首次使用了两个GTX 580 3GB GPU,训练了五六天。单个GTX 580的算力大概是1.5T flops,去年发布的1080Ti的算力是11.3T flops。时至今日,CPU Core i7 920的算力才40G flops,可想而知八九十年代的CPU算力是要多么低。除了算力,GPU的显存也非常重要,之所以用两个GPU来训练,是因为3G的GPU装不下AlexNet的mini-batch迭代。总之,算力至少提升了几千上万倍,甚至更多。
4.3 模型与tricks
AlexNet的网络结构与LeNet-5是基本一致的,只是每层的神经元数量与隐藏层数量增加了。在上篇文章的表示学习部分,我们知道隐藏层的数量对模型的表达能力是有非常大影响的。只有深层网络模型才能实现从像素层级到语义层级的转换。
论文[12]中还指出了两个关键tricks,即激活函数ReLU和dropout技术。AlexNet隐藏层的非线性激活函数由tanh改为ReLU,缓解了反向传播中的梯度消失问题,且加速了优化算法的收敛速度。人们在很长一段时间内都觉得ReLU在原点处不可微分,不会是好的激活函数,这种想法直到2009年[13]才发生了改变。同时,AlexNet为了防止过拟合,除了使用数据扩充的方法增加了样本量,还使用了dropout技术,而dropout是2012年才由hinton等[14, 15]提出的。一脸懵B?别担心,在后续文章中,我们将对这些技术的细节进行介绍,直到大家明白为止。
综上所述,规模庞大的ImageNet数据集与算力强劲的GPU是AlexNet出现的必要条件,没有这些是无法训练好模型的。若不能成功地训练出AlexNet,人们的思想仍然停留在上一个阶段。任何时候都不要高估人类的想象力与创造力。下图是Hinton在英国的一场演讲中的一页PPT,其中提到的四条原因,我们已经详细阐述过了。
5. 深度学习 - AlexNet 至今
AlexNet在图像识别中发挥出来的强大威力,吸引了越来越多相关领域的研究者来关注深度学习这个工具,并不断挖掘它在各个领域的价值。所以,这几年,在语音识别(2009-2012,其实早于AlexNet),计算机视觉,自然语言处理,强化学习等领域都有了新的进展。
5.1 语音识别与合成
在智能手机、智能音响等终端设备中,语音识别系统[16] 基本都是以深度学习技术为基础,准确率相比之前的GMM-HMM技术得到了大大地提升。近两年DeepMind团队,研发了WaveNet生成模型技术用于语音合成(TTS - Text to Speech),其合成效果更加逼真。2017年10月Google宣布,已经将WaveNet的性能优化版部署到谷歌智能助理的TTS系统中了[17, 18]。
5.2 计算机视觉
在基于ImageNet的图像识别比赛ILSVRC中,2012年AlexNet之后,每年的冠军都由CNN模型获得。总体趋势是模型网络层数逐年增加,错误率逐年下降。其中,2015年的残差网络ResNet有152层,错误率为3.6%,低于人眼水平(约5%)。计算机视觉领域,除了物体识别,还有很多任务,如人脸识别,目标检测,图像理解等等。我们将在NG课程四《卷积神经网路》中详细介绍相关模型。这些模型基本是最近三五年发明的,目前在很多场景中进行商业化落地,如无人驾驶、安防领域等等。
5.3 自然语言处理
近几年来,在使用深度学习技术解决NLP的诸多问题中,基于神经网络的机器翻译公认是比较大的突破与创新。2014年Bengio等[19] 构建了基于注意力的编码解码模型(attention based encoder-decoder model),机器翻译的效果得到了很大地提升。2016年Google把该系统部署到谷歌翻译中,将基于短语的翻译模型升级为基于注意力的神经翻译模型[20]。我们将会在NG课程五《序列模型》中详细介绍相关模型,你也可以参考斯坦福课程CS224n,了解更多深度学习在自然语言处理领域的应用。
5.4 强化学习
在结合了深度学习技术后,强化学习领域近几年也有诸多突破,其中最为人所知的当然是alphaGo。尤其是2017年,alphaGo Zero的出现,使得系统无需借助人类棋谱,从零学起,很快就能超过之前的alphaGo系统。这方面入门的经典在线课程是,David Silver的强化学习入门 和 伯克利的深度强化学习入门。经典入门书籍是Sutton的强化学习简介 第二版,目前仍在撰写中,但基本写完了,今年应该会出版。
近五六年来,除了上述进展与突破,无监督学习领域也有很大进展,如生成对抗网络(GAN/WGAN)等。对机器学习工程师、深度学习工程师来说,能follow上相关进展是非常挑战的。工程师的价值更多是使用合适的模型,解决实际业务中的问题。在工业界的线上生产系统中,由于深度学习模型计算量非常大, 为了满足性能要求,不得不采取降低模型的复杂度(模型压缩)等技术。当在各种智能终端上部署模型推断系统时,模型压缩等性能优化技术就显得更为突出。
雄关漫道真如铁,而今迈步从头越。好了,让我们从NG课程一《神经网络与深度学习》开始吧。下篇文章,我们将解读NG的课程一,并参考DL花书第六章,必要时撸代码写demo,以辅助对概念的理解。
参考资料
[0] Deep learning 第一章,第六章6.6节,第九章9.11节,第十二章12.4.6节
[1] Rumelhart, D., Hinton, G., and Williams, R. (1986). Learning representations by back-propagating errors. Nature, 323, 533–536 发明反向传播的论文, 除了BP外,文章还展示了神经网络的表示学习能力
[2] Fukushima, K. (1980). Neocognitron: A self-organizing neural network model for a mechanism of pattern recognition unaffected by shift in position. Biological Cybernetics, 36, 193–202
[3] Waibel, A., Hanazawa, T., Hinton, G. E., Shikano, K., and Lang, K. (1989). Phoneme recognition using time-delay neural networks. IEEE Transactions on Acoustics, Speech, and Signal Processing, 37, 328–339 这篇文章于1987年首次提出了TDNN,其实就是1D的卷积神经网络。
[4] LeCun, Y. (1989). Generalization and network design strategies. Technical Report CRG-TR-89-4, University of Toronto CNN最初来自于这篇文章,里面讲了很多动机,并非我们今天课堂里学的那样简单。
[5] LeCun, Y., Bottou, L., Bengio, Y., and Haffner, P. (1998). Gradient based learning applied to document recognition. Proc. IEEE LeNet-5来自于这篇文章
[6] Hochreiter, S. and Schmidhuber, J. (1997). Long short-term memory. Neural Computation, 9(8), 1735–1780
[7] Bengio, Y., Ducharme, R., and Vincent, P. (2001). A neural probabilistic language model. In T. K. Leen, T. G. Dietterich, and V. Tresp, editors, NIPS’2000 , pages 932–938. MIT Press
[8] Bengio, Y., Ducharme, R., Vincent, P., and Jauvin, C. (2003). A neural probabilistic language model. JMLR, 3, 1137–1155 相较上面2001年那篇文章,这篇比较易读。
[9] Hinton, G. E., Osindero, S., and Teh, Y. (2006). A fast learning algorithm for deep belief nets. Neural Computation, 18, 1527–1554
[10] Glorot, X. and Bengio, Y. (2010). Understanding the difficulty of training deep feedforward neural networks. In AISTATS’2010
[11] LeCun, Y., Kavukcuoglu, K., and Farabet, C. (2010). Convolutional networks and applications in vision. In Circuits and Systems (ISCAS), Proceedings of 2010 IEEE International Symposium on, pages 253–256. IEEE
[12] Krizhevsky, A., Sutskever, I., and Hinton, G. (2012). ImageNet classification with deep convolutional neural networks. In NIPS’2012 AlexNet出自这篇论文
[13] Jarrett, K., Kavukcuoglu, K., Ranzato, M., and LeCun,Y. What is the best multi-stage architecture for object recognition? In Proc. International Conference on Computer Vision (ICCV’09). IEEE, 2009
[14] G.E. Hinton, N. Srivastava, A. Krizhevsky, I. Sutskever, and R.R. Salakhutdinov. Improving neural networks by preventing co-adaptation of feature detectors. arXiv preprint arXiv:1207.0580, 2012
[15] Srivastava, N., Hinton, G., Krizhevsky, A., Sutskever, I., and Salakhutdinov, R. (2014). Dropout: A simple way to prevent neural networks from overfitting. Journal of Machine Learning Research, 15, 1929–1958
[16] https://www.zhihu.com/question/20398418/answer/18080841 知乎这个回答简单介绍了语音识别的原理,其中列的参考文献很好,这里间接做记录。
[17] Oord, Aaron van den; Dieleman, Sander; Zen, Heiga; Simonyan, Karen; Vinyals, Oriol; Graves, Alex; Kalchbrenner, Nal; Senior, Andrew; Kavukcuoglu, Koray (2016-09-12). "WaveNet: A Generative Model for Raw Audio". 1609. arXiv:1609.03499
[18] https://deepmind.com/blog/wavenet-launches-google-assistant/
[19] Bahdanau, D., Cho, K., and Bengio, Y. (2015). Neural machine translation by jointly learning to align and translate. In ICLR’2015, arXiv:1409.0473
[20] https://research.googleblog.com/2016/11/zero-shot-translation-with-googles.html
,