模型概述
神经网络中最基本的成分是神经元(neuron)模型,即上述定义中的“简单单元”.在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”(threshold),那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质.
最经典的神经元神经元模型是MP神经元模型
在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重的连接(connection)进行传递,神经元接收到的总输入值将与神经元的阈值进行比较,然后通过“激活函数”(activation function)处理以产生神经元的输出.
理想中的激活函数是阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0”对应于神经元抑制.然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid函数作为激活函数.具体可参考之前的文章:机器学习笔记(三)——逻辑回归/对率回归
感知机
感知机(Perceptron)由两层神经元组成,输入层接收外界输入信号后传递给输出层,输出层是M-P神经元。
感知机能容易地实现逻辑与、或、非运算。假定感知机网络中的激活函数用的是跃阶函数。
与运算: ( x 1 ∧ x 2 ) : 令 w 1 = w 2 = 1 , θ = 2 , 则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 2 ) , 仅 在 x 1 = x 2 = 1 时 , y = 1 ; (x_1\wedge x_2 ):令w_1= w_2 = 1,\theta=2,则y= f(1 ·x_1+ 1·x_2 - 2),仅在x_1=x_2= 1时, y = 1; (x1∧x2):令w1=w2=1,θ=2,则y=f(1⋅x1+1⋅x2−2),仅在x1=x2=1时,y=1;
或运算: ( x 1 ∨ x 2 ) : 令 w 1 = w 2 = 1 , θ = 0.5 , 则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 0.5 ) , 当 x 1 = 1 或 x 2 = 1 时 , y = 1 ; (x_1 \vee x_2):令w_1= w_2= 1,\theta = 0.5,则y= f(1·x_1+ 1·x_2 -0.5),当x_1=1或x_2=1时, y = 1; (x1∨x2):令w1=w2=1,θ=0.5,则y=f(1⋅x1+1⋅x2−0.5),当x1=1或x2=1时,y=1;
非运算: ( ¬ x 1 ) : 令 w 1 = − 0.6 , w 2 = 0 , θ = − 0.5 , 则 y = f ( − 0.6 ⋅ x 1 + 0 ⋅ x 2 + 0.5 ) , 当 x 1 = 1 时 , y = 0 ; 当 x 1 = 0 时 , y = 1 (\neg x_1):令w_1= -0.6, w_2 = 0,\theta =-0.5,则y = f(-0.6·x_1+0·x_2+0.5),当x_1=1时, y=0; 当x_1=0时,y = 1 (¬x1):令w1=−0.6,w2=0,θ=−0.5,则y=f(−0.6⋅x1+0⋅x2+0.5),当x1=1时,y=0;当x1=0时,y=1
感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。事实上,上述与、或、非问题都是线性可分的问题。可以证明,若两类模式是线性可分的,即存在一个线性超平面能将它们分开,则感知机的学习过程一定会收敛。否则感知机学习过程将会发生振荡,例如感知机甚至不能解决异或这样简单的非线性可分问题。
要解决非线性可分问题,需考虑使用多层功能神经元。两层感知机就能解决异或问题。输出层与输入层之间的一层神经元,被称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
前馈神经网络
常见的神经网络是每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。这样的神经网络结构通常称为多层前馈神经网络
“前馈”并不意味着网.络中信号不能向后传,而是指网络拓扑结构上不存在环或回路
反向传播算法(BackPropagation)——BP算法
给定数据集 D = { ( x 1 , y 1 ) , ( x 2 , y 2 ) , … , ( x m , y m ) } , x i ∈ R d , y i ∈ R l D = \{ ({x_1},{y_1}),({x_2},{y_2}), \ldots ,({x_m},{y_m})\} ,{x_i} \in {
{\Reals }^d},{y_i} \in {
{\Reals }^l} D={
(x1,y1),(x2,y2),…,(xm,ym)},xi∈Rd,yi∈Rl
输入示例由 d d d个属性描述,输出 l l l维实值向量。
为了方便讨论,如上图给出一个拥有 d d d个输入神经元, l l l个输出神经元, q q q个隐藏层神经元的多层前馈神经网络结构,其中隐藏层第 h h h个神经元的阈值用 γ h {\gamma _h} γh表示,输出层第 j j j个神经元的阈值用 θ j \theta_j θj表示。输入层第 i i i个神经元与隐藏层第 h h h个神经元之间的连接权重为 v i h v_{ih} vih,隐藏层第 h h h个神经元与输出层第 j j j个神经元之间的连接权重为 w h j w_{hj} whj。记隐藏层第 h h h个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i {\alpha _h} = \sum\limits_{i = 1}^d {
{v_{ih}}{x_i}} αh=i=1∑dvihxi。记 b h b_h bh是隐藏层第 h h h个神经元的输出,输出层第 j j j个神经元接收到的输入为 β j = ∑ h = 1 q w h j b h {\beta _j} = \sum\limits_{h = 1}^q {
{w_{hj}}{b_h}} βj=h=1∑qwhjbh,假设神经网络中隐藏层和输出层神经元都是用Sigmoid激活函数。
对于训练样本 ( x k , y k ) ({x_k},{y_k}) (xk,yk),假定神经网络的输出为 y ^ k = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) {
{\hat y}_k} = (\hat y_1^k,\hat y_2^k, \ldots ,\hat y_l^k) y^k=(y^1k,y^2k,…,y^lk),且 y ^ j k = f ( β j − θ j ) \hat y_j^k = f({\beta _j} - {\theta _j}) y^jk=f(βj−θ