神经网络(Artificial Neural Networks):人工神经网络的简称,是一种应用类似于大脑神经突触联接的结构或网络,进行信息处理的数学模型。神经网络是一门重要机器学习技术,它是目前最火热的研究方向—深度学习之基础。
神经网络算法是一类模拟生物大脑的算法,以物体识别为例,人脑工作过程大致为:摄入原始信号(从瞳孔摄入像素,靠人脑神经元进行感知) -> 初步处理(大脑皮层某些细胞发现边缘和方向) -> 抽象(大脑判定眼前物体和形状) -> 进一步抽象(大脑进一步判定物体是什么)。即:信息获取、特征提取和传递,从最底层(神经元)开始,分级、逐步到达高层。抽象层面越高也越利于分类,存在不确定性或猜测性也越少。图像处理与感知的过程,其实也是模拟大脑处理眼睛获得外界信息的过程。
而人脑中神经网络是一个非常复杂的组织:成人大脑中估计有1000亿个神经元之多。1904年生物学家就已经知晓了神经元组成结构,一个神经元通常具有多个树突,主要用来接受传入信息;而轴突只有一条,轴突尾端有许多轴突末梢可以给其他多个神经元传递信息。轴突末梢跟其他神经元树突产生连接,从而传递信号。这个连接位置在生物学上叫做“突触”。这些神经元是我们“人造”神经网络的起点。
1943 年,心理学家McCulloch和数学家Pitts参考了生物神经元结构,发表了抽象MP神经元模型。神经元模型是一个包含输入,输出与计算功能的模型。输入可以类比为神经元树突,而输出可以类比为神经元轴突,计算则可以类比为细胞核。
一个简单神经元模型中每一个有向箭头线称为连接;每一个连接上有一个值,称为权值或权重。一般每条线路上的信号都是输入乘以权重,Sum代表着对所有输入线路信号求和然后减去一个固定阈值T,有些时候T可以取0值。激活函数的作用是加入非线性因素,用于提升神经元分类能力,在神经网络之中非线性激活函数可以让神经网络解决更复杂任务。很多地方也会把Sum和激活函数合在一起,把神经元看成一个整体,这个神经元可以用一个公式来表示。
神经元可以看作一个计算与存储单元。计算是神经元对输入进行计算功能;存储是神经元会暂存计算结果,并传递到下一层。早期神经元模型中权值是预先设定的,不能够学习。Hebb于1949年提出了Hebb学习率,认为神经细胞突触上强度是可变的。于是科学家们开始考虑用调整权值来让机器学习,这为后面机器学习算法奠定了基础。
1958年,计算科学家Rosenblatt提出了由两层神经元组成神经网络,并给它起了一个名字“感知器”(Perceptron);这才有了第一个真正意义的神经网络。在“感知器”中有两层:输入层和输出层。输入层只负责数据传输,不做计算;输出层需要对前一层输入进行计算。需要计算的层称为“计算层”,拥有一个计算层的网络称之为“单层神经网络”。一些文献会按照网络拥有层数来命名,例如把“感知器”称为两层神经网络,本文根据计算层数来命名。
Minsky指出虽然单层神经网络解决不了异或问题,但是增加一个计算层以后,两层神经网络不仅能够解决异或问题,而且还具有非常好的非线性分类特性,但两层神经网络计算变成了另外一个难题。1986 年,Rumelhar 和 Hinton 等人提出了反向传播(Back Propagation,BP)算法,解决了两层神经网络复杂计算量问题,带动了业界使用两层神经网络开展研究以及应用热潮。
2006年,Hinton 在《Science》和相关期刊上发表了论文,提出了“深度信念网络”的概念。“深度信念网络”具备了一个“预训练”过程,这可以让神经网络中权重找到一个接近最优解,然后再使用“微调”技术来对优化训练整个网络。这两个技术大幅度减少了训练多层神经网络的时间。他给多层神经网络相关学习方法起了一个新名词“深度学习”。在两层神经网络输出层后面,继续添加层次。原来输出层变成中间层,新加层成为新的输出层。
多层神经网络中,输出也是按照一层一层的方式来计算。从最外面层开始,算出所有单元值以后,再继续计算更深一层。只有当前层所有单元值都计算完毕以后,才会算下一层。有点像计算向前不断推进地感觉。所以这个过程叫做“正向传播”。
增加更多层次有什么好处?随着网络层数增加,每一层对于前一层抽象更深入。也就是每一层神经元学习到的是对前一层神经元值更加抽象表示。如果第一个隐藏层学习图像“边缘”的特征,第二个隐藏层学习由“边缘”上升到组成“形状”特征,第三个隐藏层学习的是由第二个隐藏层“形状”组成的“图案”特征,最后隐藏层学习的是由“图案”构成“目标”特征。通过抽取逐级抽象的特征来对事物进行区分,可以获得更好区分与分类能力。