1943年,神经科学家麦卡洛克(W.S.McCilloch) 和数学家皮兹(W.Pitts)建立了神经网络和数学模型,称为M-P模型,即两个人的名字的合称McCulloch-Pitts。
这个模型是对生物神经元的一个建模。当时是希望能够用计算机来模拟人的神经元反应的过程,该模型将神经元简化为了三个过程:输入信号线性加权、求和和非线性激活(阈值法)。人工神经网络(ANN: Artificial Neural Network)以此为开端,不过这个模型直到1958年,才开始有了实用价值。
M-P人工神经元模型
1958年,计算机科学家罗森布拉特( Rosenblatt)提出了一个由两层神经元组成的神经网络,称之为“感知器”(Perceptrons),第一次将M-P模型用于机器学习的分类(classification)问题。
人工智能先驱Marvin Minsky
1969年,美国数学家及人工智能先驱 Marvin Minsky 在其著作中证明了感知器本质上是一种线性模型(linear model),只能处理线性分类问题,就连最简单的XOR(异或)问题都无法正确分类。由此,神经网络的研究也陷入了将近20年的停滞,进入了第一个寒冬期。
1986年,神经网络之父 Geoffrey Hinton 发明了适用于多层感知器(MLP)的BP(Back Propagation)算法,并采用Sigmoid函数进行非线性映射,有效解决了非线性分类和学习的问题。这种方法引起了神经网络的第二次热潮。
Sigmoid函数
多层感知器:至少有一个隐藏层
当神经网络的规模增大时,使用BP算法会出现“梯度消失”的问题。当梯度消失发生时,接近于输出层的隐藏层由于其梯度相对正常,所以权值更新时也就相对正常,但是当越靠近输入层时,由于梯度消失现象,会导致靠近输入层的隐藏层权值更新缓慢或者更新停滞。
梯度消失问题限制了ANN结构的层数(规模)
90年代中期,以SVM为代表的其它浅层机器学习算法被提出,并在分类、回归问题上均取得了很好的效果,而ANN则相形见绌,人工神经网络的发展再次进入瓶颈,迎来了第二个寒冬期。
2006年,Geoffrey Hinton 和他的学生 Ruslan Salakhutdinov 在顶尖学术刊物《科学》上发表了一篇文章,该文章提出了深层网络训练中梯度消失问题的解决方案:无监督预训练对权值进行初始化+有监督训练微调。这个方案的提出,为基于ANN的深度学习(DL:Deep Learning)提供了可能性。
造成梯度消失的一个主要原因就是激活函数Sigmoid。Sigmoid的导数的取值范围在0~0.25之间,初始化的网络权值通常都小于1,当层数增多时,小于0的值不断相乘,最后导致梯度消失的情况出现。因此解决梯度消失的一个办法是替换激活函数。2011年,ReLU激活函数被提出,该激活函数能够有效地抑制梯度消失问题。
2011年以来,微软首次将DL应用在语音识别上,取得了重大突破。微软研究院和google的语音识别研究人员先后采用深度神经网络(DNN)技术降低语音识别错误率20%~30%,是语音识别领域十多年来最大的突破性进展,人工神经网络终于证明了自己的实用价值。
2012年,Hinton课题组为了证明深度学习的潜力,首次参加了ImageNet图像识别比赛,其构建的卷积神经网络(CNN)模型AlexNet一举夺得冠军。深度学习算法在世界大赛的脱颖而出,也再一次吸引了学术界和工业界对于深度学习领域的关注。
通过ImageNet图像识别比赛,DL的网络结构、训练方法、GPU硬件的不断进步,促使DNN在其他领域也在不断地征服战场。
2014年,Facebook基于深度学习技术的DeepFace项目,在人脸识别方面的准确率已经能达到97%以上,跟人类识别的准确率几乎没有差别。
2016年,随着谷歌旗下Deepmind公司基于深度学习开发的AlphaGo以4:1的比分战胜了国际顶尖围棋高手李世石,深度学习的热度一时无两。后来,AlphaGo又接连和众多世界级围棋高手过招,均取得了完胜。
AlphaGo战胜李世石,再次证明了深度学习的能力
正是由于DL在理论上的成功以及GPU硬件的发展,DL在工程实践上开始证明价值,催生了一批以人工智能(机器视觉为主)的科技公司,比如国内耳熟能详的AI四小龙:商汤、云从、依图和旷世,都有将AI技术应用于实际的落地案例。
全连接DNN
如上图所示,全连接DNN的结构里相邻两层的神经元之间都能够形成连接,从而导致参数数量膨胀。这不仅容易过拟合,而且极容易陷入局部最优。
由于图像中存在固有的局部模式(如人脸中的眼睛、鼻子、嘴巴等),所以将图像处理和神经网络结合引出卷积神经网络CNN。CNN是通过卷积核将相邻层进行链接,大幅降低了输入层到隐藏层的参数。
另外DNN无法对时间序列上的变化进行建模,而样本的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。为了适应这种需求,就出现了另一种神经网络结构:循环神经网络RNN。
在RNN中,神经元的输出可以在下一个时刻作用到自身,即第i层神经元在m时刻的输入,除了(i-1)层神经元在该时刻的输出外,还包括其自身在(m-1)时刻的输出。
神经元按照时间展开
RNN可以看成一个在时间上传递的神经网络,它的深度是时间的长度,“梯度消失”现象又要出现了,只不过这次发生在时间轴上。
为解决上述长时依赖问题,又提出了LSTM(长短时记忆单元),通过神经元的门开关实现时间上的记忆功能,并防止梯度消失。
LSTM
除了RNN和LSTM以外,还有很多网络结构可以用于序列信号分析中,比如双向RNN、双向LSTM,这些结构可以同时利用历史和未来的信息。在实际应用中,我们往往不会使用单一的结构,经常混合着使用。
我会持续更新关于物联网、云原生以及数字科技方面的文章,用简单的语言描述复杂的技术,也会偶尔发表一下对IT产业的看法,欢迎大家关注,谢谢。