8 神经网络初步
人工神经网络的结构及其算法模拟自生物神经系统的组织和运转机能,具有悠久的历史。学术界对人工神经网络算法的研究几经浮沉。今年来,深度学习(Deep learning)算法的突破又将神经网络推向了一个新的高峰。当然,今天的“神经网络”已是一个庞大的学科领域,我们在机器学习中谈论神经网络时指的是“神经网络学习”。
8.1 神经网络简史
起源与早期发展
人工智能网络算法的思想来源于人类对自身的探索,即对大脑认知能力的研究和模仿。19世纪末,意大利解剖学家C.Golgi使用银染法发现了神经元,包括其胞体、树突和轴突。到了20世纪40年代,人们融合当时生物物理和数学的相关知识,试图创造一个机器,能够模拟神经元的基本机能。Mccullocb和Pirts在1943年提出了第一个神经网络的模型——MP模型。1958年,F.Rosenblan提出了著名的感知器模型,同时他还证明了两层感知器的收敛定理。这是世界上第一个有使用价值的神经网络模型,成为现代神经网络的出发点。
中期发展
20世纪80年代,科学家提出了各种神经网络。1981,Kohen教授提出了自组织神经网络。1982年和184年,物理学家John Hopfield提出了模拟人脑的神经网络,即著名的Hopfield网络。1986年,Hinton、Rumelhart和Williams提出多层前馈神经网络的学习算法,即BP算法。1988年,Broomhead和Lowe还提出了RBF网络(径向基网络)。在1995年,Corinna Cortes和Vapnik提出了支持向量机(SVM)。
当前的发展
如今,深度学习算法将神经网络带入一个新时代。通过深度学习,人们可以解决图像识别、声音识别中的绝大多数问题,以及自然语言处理方面的某些问题。深度学习将人工智能带入了一个新时代!
8.2 使用神经网络的意义
我们这里讲解的神经网络,主要是在机器学习中充当分类器的,但在之前的章节中,我们已经学习了线性回归和Logistic回归了,他们已经能进行二分类,甚至是多分类,那么,为什么还要学习研究神经网络呢?
针对这个问题,我门举个简单的例子说明。
先看图1,在样本空间中,使用颜色将样本标注为不同类别,这样样本点所构成的集合之间没有交集,或者说交集的样本可以忽略,类似这种情况都被称为线性可分。直觉上,线性可分的两类样本集合之间存在的决策平面(超平面)是线性的,即它是一个n元一次的方程。在二维空间中,如图一所示,一条直线就能把它们分开。这类问题,就是我们前几节内容所讲解的线性回归和Logister回归。
在观察图2,主观上,红色和蓝色的样本点不能被一条直线分隔开,即决策边界(分割超平面)不是线性的,因此线性不可分。而此类情况,其决策边界应该是一个n元m次的方程(m>1)。
也许,你会说,Logistic回归也能解决非线性的问题。但是,如果直接使用Logistic回归解决,当中的将会很复杂,且容易出现过拟合,当特征向量维度很大的时候,即含有多个x项,运算量会很大,不利于算法的快速实现。针对运算量大这一点,举个例子。一个入门级的机器学习项目,手写数字识别,使用的数据集一般是28*28pix的手写数字,则这个分类问题中特征空间的唯度数为784,如果我们使用二次多项式去拟合,则有大概30万的特征需要运算。因此,简单的增加项的次数的Logistic回归并不能很好地解决复杂的非线性问题。
此时,为了解决这个问题,我们就需要研究神经网络。
8.3 神经网络结构
我们之前介绍的梯度下降法,其实是最简单的神经网络——感知器网络。
从神经网络的角度,它可以分为以下几个部分:
输入层:样本向量的维度
激活函数:Logistic
误差函数:实际分类标签-预测分类
输出层:类别标签向量
迭代公式
但感知器网络存在的问题是无法处理线性不可分的情况。于是就引入了BP神经网络,引入新的分层和逻辑,基本解决了非线性的分类问题。单个神经元的结构,如下图所示:
在神经网络中,输入层由数据集中的某个 向量 和一个偏置b(常取1),该向量需要乘以同维度的 权重向量
,累加得到 下一层神经元的一个输入标量
神经网络的基本结构
神经网络的基本结构:输入层、隐含层和输出层。
(1) 输入层(Input Layer)
输入向量:,通常还包含偏置
输入层与隐含层连接权值:
输入层就是输入的数据集所构成的向量集合。第一列为偏置值,第二列到最后一列为特征向量。输出是输入层和权重的点积,然后该值与激活函数的计算结果。
(2) 隐含层(Hidden Layer)
同样,隐含层包含输入向量,输出向量,当然,还有阈值,激活函数以及隐含层和输出层的连接权值。
隐含层可以是一层,也可以是多层。它的输入是上一层的输出和权重的点积向量,输出是该标量于激活函数的计算结果。
(3) 输出层(Output Layer)
包含输入向量,输出向量和阈值。
输出层只有一层,它的输入是上一层的输出和权重的点积;输出层的计算和隐含层相同,计算的结果是最终预期的分类权值。
8.4 神经网络的具体计算
注:通常还包含一个偏置,这里记作x0
针对上图,我们假设:
这里我们使用Logistic作为激励函数则有:
针对连接权重矩阵的讨论
如果网络中在第j层中有个单元,在j+1层中有
个单元,则连接权重矩阵的维度为:
。则如上图,输入层到隐含层的连接权重维度为3×4,隐含层到输出层则是1×4。
向量化运算
将运算向量化,就是用矩阵进行运算,这样,运算更为简洁高效。
结合上面的神经网络和假设,我们进行向量化,则有:
,
,同时,我们一般假设
,这样同样能求出第三层的z值,结合Logisitc函数,就能求出假设函数的值了。
这整个过程,计算值从前传到后,称为前向传播过程。
总结一下:
隐含层节点的输入:
隐含层节点的输出:
输出层节点的输入:
输出层节点的输出:
实例化神经网络计算
exp1:利用神经网络实现“与”运算
假如我们对神经网络分配连接权重,由上至下为-30,+20,+20,则有:
,这里的g(z)就是sigmoid函数。这样,就有:
显然,成功实现了“与”的功能,同样,只要修改将权值改为-10,20,20,即可实现“或”运算,而与或运算是最简单的非线性运算,同时,使用神经网络不需要引入多次项就可以拟合出来,通过这个简单的例子,可以看出神经网络在处理非线性问题上的优势。
exp2:利用神经网络实现“同或运算”
上一例只是使用了两层神经网络,exp2将会使用三层神经网络,可以体会到隐含层的作用。
计算结果如下表所示:
显然,神经网络成功实现同或运算。exp2表明,多层的神经网络能完成更复杂的非线性运算。
以上是神经网络的初步认知,关于参数的求解,权重的确定等等,将在下一章节讲解。