人工神经网络(Artificial Neural Network,ANN) 使一种受人脑生物神经网络信息处理方式启发而诞生的一种计算模型,得益于语音识别、计算机视觉和文本处理方面的许多突破性成果,人工神经网络在机器学习研究和工业领域引起了强烈反响。本篇博客将对人工神经网络算法进行介绍。
神经元是神经网络的最基本单元,它接收一个外部输入数据或其他神经元节点的输出作为输入,经过计算后将产生一个输出。每个神经元节点都有一个权重和偏置参数,权重象征着对应的输入相对于其他输入的重要程度,而偏置则是用于对权重与输入的计算结果进行校正,如图1所示:
![228b46354b9f2383943995727eca192a.png](https://i-blog.csdnimg.cn/blog_migrate/8d60b85957890827a301ccca9fdea745.jpeg)
图1 神经元节点
图1中的神经元节点接受xixi作为输入,然后与相关联的权重参数wiwi相乘后求和,加上偏置bb后使用函数ff进行变换输出获得yy作为这一神经元节点的输出值。对于函数ff,通常我们称之为激活函数,其作用是添加一个非线性变换,这是至关重要的一步操作,因为现实世界中的绝大多数数据都不会是呈线性分布,如果没有为网络中的神经元节点添加激活函数,整个网络只不过是多个线性分类器的组合,依然只能完成线任务。所以,神经元节点中的数学运算我们可以更一般化得表达为:y=Activation(N∑iwi⋅xi+b)y=Activation(∑iNwi⋅xi+b)
激活函数接受一个数值作为输入,对该数值进行非线性运算之后输出一个数值作为结果。下面说说常见的几个激活函数。
(1)sigmod函数f(x)=11+e−xf(x)=11+e−xsigmoid函数可以将整个实数范围的的任意值映射到[0,1]范围内,当输入值较大时,sigmoid将返回一个接近于1的值,而当输入值较小时,返回值将接近于0。sigmod函数图像如图2所示。
![4cbdcfbbb93ac695d94088fca1742a3d.png](https://i-blog.csdnimg.cn/blog_migrate/7808282b3a7e32b82ff429cfd54b810b.jpeg)
图2 sigmod函数图像
(2)Relu函数f(x)=max(0,x)f(x)=max(0,x)relu(Rectified Linear Units修正线性单元),是目前被使用最为频繁的激活函数,relu函数在x<0时,输出始终为0。由于x>0时,relu函数的导数为1,即保持输出为x,所以relu函数能够在x>0时保持梯度不断衰减,从而缓解梯度消失的问题,还能加快收敛速度,还能是神经网络具有稀疏性表达能力,这也是relu激活函数能够被使用在深层神经网络中的原因。由于当x<0时,relu函数的导数为0,导致对应的权重无法更新,这样的神经元被称为"神经元死亡"。relu函数图像如图3所示。
![51054c988e001003b08786cff46355a2.png](https://i-blog.csdnimg.cn/blog_migrate/3aef1c208e81b71746742c80f9d3a96e.jpeg)
图3 relu函数图像
(3)softmax函数f(xi)=exi∑iexif(xi)=exi∑iexisoftmax函数是sigmoid函数的进化,在处理分类问题是很方便,它可以将所有输出映射到成概率的形式,即值在[0,1]范围且总和为1。例如输出变量为[1.5,4.4,2.0],经过softmax函数激活后,输出为[0.04802413, 0.87279755, 0.0791784 ],分别对应属于1、2、3类的概率。
前馈神经网络是的最原始也是最简单的一种人工神经网络。前馈神经网络由多个层组成,每一层包含多个神经元节点,相邻层直接神经元节点相互连接,每一条连接都有一个权重参数ww与之关联,如图4所示。
![c7b6f5b3ac24f153222b0bb2cb52640d.png](https://i-blog.csdnimg.cn/blog_migrate/62021e15fb441c57f3208b04e9155646.jpeg)
图4 前馈神经网络结构
前馈神经网络中层节点可以分为3类。
(1)输入层节点。输入层节点是前馈神经网络的第一层节点,作为外部数据到神经网络的入口而存在,输入层节点不负责进行任何技术,只是将外部输入的数据传递到隐藏层节点。
(2)隐藏层节点。隐藏层节点是前馈神经网络的中间部分,它不与外界进行直接接触(这也是为什么成为隐藏层的原因)。隐藏层节点负责对输出层节点传递过来的数据进行一定运算,然后传递给输出层。前馈神经网络可以零个或多个隐藏层。
(3)输出层节点。输出层节点是整个前馈神经网络结构上最末尾上一层的节点,负责将隐藏层中传递过来的信息进行整合并输出到外界。
在前馈网络中,信息仅在一个方向上向前移动,即从输入节点到隐藏节点(如果有)再到输出节点不存在循环或回路的情况。我们可以粗略地将前馈神经网络分为两类:
(1)单层感知机模型。单层感知机模型是最简单的一种神经网络模型,不包含隐藏层,也只能处理线性任务。关于单层感知机模型,请参考我的另一篇博客。
(2)多层感知机。多层干自己是单程感知机的进化版,其组成结