神经网络起源于生物神经元,学过生物的应该都知道生物神经元主要由细胞体、树突、轴突和突触4个部分构成。受生物神经元的启发,有了人工神经元模型,称之为M-P模型。
AN是神经网络中最小的信息处理单元,AN对数据的处理分为两个阶段:第一阶段为接收其他神经元传递过来的输入信号,然后对这些输入信号与相应的权重进行加权求和传递给下一阶段,这一阶段称为预激活阶段:
h=b+(w*x)
第二阶段是把预激活的加权结果传递给激活函数,经过激活函数的处理后,预激活的数值被压缩到一个范围区间内,数值的大小将决定神经元到底是处于活跃状态还是抑制状态,最后将输出结果传递给下一层的神经元:
a=f(h) 其中f是激活函数。
单层感知机
单层感知机是最早被提出的最简单的神经网络模型,它仅有输入层和输出层构成。单层感知机首先在输入层接受输入数据,把输入数据与相应权重参数累加。然后把累加结果输入到激活函数中,单层感知机的输出层可以采用Logistic或者softmax函数作为最后的结果输出。
下面分析感知机的工作原理:单层感知机本质上是在高维空间中,构造出合理的边界超平面,把不同类别的数据集分离,因此,对于线性可分,或者近似线性可分的数据集有很好的效果,但对于线性不可分数据集,由于没有一个超平面来分离数据,因此效果不理想,也导致单层感知机的学习能力非常有限,它甚至不能解决简单的异或问题。
多层感知机
由于单层感知机对于非线性分类数据的效果不太理想,所以在输入层和输出层引入的隐藏层,让网络又了更强大的学习能力。对于含有一个隐藏层的前馈神经网络,如果隐藏层可以由任意多的神经元构成,神经网络能够逼近实数范围内的任意连续函数。对于分类问题,隐藏层的作用就是把线性不可分的数据,通过线性变换(预激活阶段)和非线性的激活(激活阶段)的操作,使得数据在输出层变得线性可分。
从理论上来说,神经网络中包含的隐藏层越深,隐藏层包含的神经元越多,它能提取的特征也就越丰富,也就具备更强大的学习能力,但实际效果却不是这样,随着网络变得越来越深,神经网络的性能在达到一个极值后,很快就停止提升,甚至出现下降的情况。
激活函数
激活函数是神经网络设计的一个核心单元,在神经网络中,把处在活跃状态的神经元称为激活状态,处在非活跃状态的神经元称为抑制态,激活函数赋予了神经元自我学习和适应的能力。
激活函数的作用是为了在神经网络中引入非线性学习和处理能力,单层感知机之所以学习能力非常有限,是因为模型只能解决线性可分问题。而多层引入隐藏层,使得模型能够处理非线性数据,从而有效提高模型的学习能力,但是注意的是,模型提升的能力,并不是因为添加了隐藏层,而是在于隐藏层神经元中引入了激活函数。因为当隐藏层激活函数为线性函数时,多层感知机等价于单层感知机。
常用的激活函数(阶跃函数、sigmoid、tanh和ReLU)
阶跃函数:是最理想的激活函数,它直接将输入数据映射为0或1,1代表当前神经元处于激活状态,但它具有不连续、不光滑、不可导的特点,所以在实际应用中,通常不会采用它作为激活函数。
sigmoid:把输入数据压缩到[0,1]范围内,处在中间部分的数据变化大,成为活跃区,处于两侧的微抑制的状态,它的不足主要为:第一:利用反向传播来训练神经网络时,会产生梯度消失问题,导致训练深层网络的效果不理想。第二:经过sigmoid处理后的输出数据是一个非负值。
tanh:把数值区间压缩到了[-1,1]的范围内,可以把它看成对sigmoid函数进行了按比例的伸缩,与sigmoid函数相比,它具有更稳定的梯度,此外,tanh函数的导数区间为[0,1],比sigmoid函数的导数区间要大,在反向传播的过程中,衰减速度要比sigmoid函数慢。但由于tanh函数的导数小于1,因此利用反向传播来最优化神经网络模型时,同样无法避免梯度消失问题。
ReLU:单侧抑制:当输入小于0时,神经元处于抑制态;相对宽阔的兴奋边界:只要输入大于0,神经元都会处于激活态;稀疏激活性:ReLU直接把抑制态的神经元置为0,使得这些神经元不再参与到后续计算过程中,导致他在实际应用中,收敛速度要远远快于其他激活函数。但是它的处理方法也带来了一些缺点,最主要的缺点是导致神经网络的训练在后期变得脆弱,主要是因为ReLU对抑制态的处理过于极端,导致在后续的训练中,抑制态神经元经不会参与后面运算。Leaky-ReLU是ReLU的改进版,它的主要改变是在抑制侧,把原来的直接置为0重新置为一个很小的实数a,这个改动能有效缓解稀疏性导致的训练脆弱问题。
后续会详细介绍上文提到的反向传播和梯度消失的内容。