本文由 沈庆阳 所有,转载请与作者取得联系!
神经网络(Neural Network)的研究可以追溯到很早的时候,神经网络这门学科交杂着各种不同的领域。在机器学习的问题中,神经网络指的是“神经网络学习”,即机器学习与神经网络相重合的部分。1988年,Kohonen这样定义神经网络:
神经网络是由具有适应性的简单单元组成的广泛并行互连的网络,它的组织能够模拟生物神经系统对真实世界物体所作出的交互反应。
神经元
神经网络的最基本的构成元素是神经元(Neuron),也就是Kohonen的定义中的简单单元。学过生物的都知道,人的大脑中有上亿个神经元构成神经网络,生物神经网络中各个网络之间相互连接,通过神经递质相互传递信息。如果某个神经元接收了足够多的神经递质(乙酰胆碱),那么其点位变会积累地足够高,从而超过某个阈值(Threshold)。超过这个阈值之后,这个神经元变会被激活,达到兴奋的状态,而后发送神经递质给其他的神经元。
现代科学的很多进步都源自于自然界,神经网络也是如此。1943年,McCulloch和Pitts将生物神经网络工作的原理抽象成了一个简单的机器学习模型——MP神经元模型。
MP神经元模型接收来自n个其他神经元传递过来的输入信号(x1~xn),这些输入信号通过带权重(θ或ω来表示权重,上图采用θ)的连接(Connection)进行传递,然后神经元(图示阈值为b)收到的总输入(所有输入和权重的乘积的和)与神经元的阈值b比较,并经由激活函数(Activation Function,又称响应函数)处理之后产生神经元的输出。
理想情况下,激活函数的形式应为阶跃函数(也就是修正线性单元ReLU)。如下图所示:
即输出有0或1两种,0表示神经元不兴奋,1则表示神经元兴奋。但阶跃函数不光滑且不连续,因此对于激活函数的选择通常会选择S函数(Sigmoid Function)。S函数的相关内容,我们在第14章,逻辑回归中层讲到过。
S函数的定义如下所示:
其函数曲线图像如下:
从函数图像可以明显看出,函数的值域是(0,1)。即函数值落在0到1之间。
S函数的性质有可以将较大范围内变化的输入值压缩到(0,1)区间内,因此也被成为挤压函数(Squashing Function)。
通过把很多个神经单元按照一定的层次连接起来,便得到了一个神经网络。
感知机
感知机(Perceptron)是由两层神经元所构成。
如图所示,输入层接收输入信号之后传输给输出层,输出层即阈值逻辑单元(MP神经元)。通过感知机可以轻易地实现逻辑与、或、非运算。
通过感知机实现逻辑运算,在MP神经元模型中,有输出:
假设激活函数为阶跃函数sgn(x):
则逻辑运算实现如下:
·逻辑“与”(x1∧x2):令权重ω1=ω2=1,阈值b=2,则y=f(1*x1 + 1*x2 -2),当且仅当x1=x2=1时,y=1;
·逻辑“或”(x1∨x2):令权重ω1=ω2=1,阈值b=0.5,则y=f(1*x1 + 1*x2 -0.5),当x1 = 1 或 x2=1时,y=1;
·逻辑“非”(﹁x1):令权重ω1=-0.6 ω2=0,阈值b=-0.5,则y=f(-0.6*x1 + 0.5),当x1=1时,y=0,当x1=0时,y=1。
我们通过制定权重和阈值得到了可以进行逻辑运算的感知机,那么如果给定训练数据集,同样我们可以通过学习得到相应地权重和阈值。
阈值b可以看做是一个输入固定为-1.0对应连接权重ωn+1的哑结点。通过这样定义阈值,则可以将学习权重和阈值简化为只学习权重。
感知机的学习规则很简单,对于训练样本(x,y),若感知机当前的输出为y’,则感知机的权重调整如下:
其中,η为学习速率。若感知机对样本的预测正确的话,即y’=y,则感知机不发生任何变化。若其预测错误,则根据错误的程度进行相应权重的调整。
感知机中,只有输出层神经元进行激活函数的处理,也就是说感知机只有一层功能神经元(Functional Neuron),因此感知机的学习能力有限。实际上,通过感知机所实现的逻辑运算都是线性可分问题。
若两类模式是线性可分的,那么存在一个线性超平面能将其分开,则感知机的学习过程一定会收敛从而得到合适的权向量:
否则,感知机在学习的过程中会产生震荡,从而无法得到稳定的权向量,从而使得感知机无法求解。也就是说,感知机无法解决像是“异或XOR”(异或是非线性可分的问题)这样的非线性问题。
如上图中,左面三个是通过线性分割实现,而最右侧的异或则无法通过线性分割实现。
多层网络
若要解决非线性分割的问题,则需要使用多层功能神经元。如使用两层感知机来解决异或问题:
在上图中,我们可以看到输出层和输入层之间存在一层神经元,中间的这层神经元叫做隐藏层(Hidden Layer,或叫做隐含层、隐层),隐藏层和输出层的神经元都是具有激活函数的功能性神经元。
更一般的存在是多层前馈神经网络(Multi-Layer Feedforward Neural Network),多层前馈神经网络的层级结构如下:
其层级结构中,每一层的神经元与下一层神经元完全连接在一起,每一层神经元之间没有连接,也不存在跨层的连接。多层前馈神经网络中的输入层中的神经元负责接收外界的输入,隐藏层和输出层的神经元负责对输入信号进行加工处理,最后通过输出层对处理后的信号进行输出。
输入层的神经元仅仅负责接收信号的功能,不进行函数处理,而隐藏层与输出层的神经元是功能性神经元。只要包含有隐藏层的神经网络就是多层神经网络(多层网络)。
神经网络的学习过程的实质就是通过训练样本来调整神经元之间的连接权值(Connection Weight)以及买个功能性神经元的阈值。
觉得写的不错的朋友可以点一个 喜欢♥ ~
谢谢你的支持!