神经网络简介
神经网络中最基本的成分是神经元(neuron)模型,在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时,就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神经元的电位超过了一个“阈值”(threshold), 那么它就会被激活,即“兴奋”起来,向其他神经元发送化学物质.
类似的“M-P 神经元模型”,在这个模型中,神经元接收到来自n个其他神经元传递过来的输入信号,这些输入信号通过带权重
w
\bm{w}
w的连接(connection)进行传递,神经元接收到的总输入值
x
1
,
x
2
,
.
.
.
x
n
\bm{x_1,x_2,...x_n}
x1,x2,...xn将与神经元的阀值
θ
\bm{\theta}
θ进行比较,即:
(
∑
i
=
1
n
w
i
x
i
−
θ
)
\left(\sum_{i=1}^{n} w_{i} x_{i}-\theta\right)
(i=1∑nwixi−θ)然后通过激活函数(activation function) 处理以产生神经元的输出.
即:
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
,
其
中
f
为
激
活
函
数
;
y=f\left(\sum_{i=1}^{n} w_{i} x_{i}-\theta\right),其中f为激活函数;
y=f(i=1∑nwixi−θ),其中f为激活函数;理想中的激活函数是图(a)所示的阶跃函数,它将输入值映射为输出值“0”或“1”,显然“1”对应于神经元兴奋,“0” 对应于神经元抑制. 然而,阶跃函数具有不连续、不光滑等不太好的性质,因此实际常用Sigmoid 函数作为激活函数.典型的Sigmoid函数如图(b)所示,它把可能在较大范围内变化的输入值挤压到(0,1)输出值范围内,因此有时也称为“挤压函数”,把许多个这样的神经元按照一定的层次结构连接起来,就得到了神经网络。
感知机
下面先来了解一下简单的神经网络结构
感知机由两层神经元组成,输入层接收外界输入信号后传递给输出层。
举例:
- 不同的连接将产生不同的神经网络结构,
- 权重和阙值是神经网络的参数
一般地:给定训练数据集,权重
w
(
i
=
1
,
2...
,
n
)
w (i= 1,2...,n)
w(i=1,2...,n)以及阙值θ(又称为偏置bias)可通过学习得到,阙值θ可看作一个固定输入为-1.0的“哑结点" (dummy node)所对应的连接权重
w
n
+
1
w_{n+1}
wn+1,即:
θ
=
−
1
∗
w
n
+
1
\theta=-1*w_{n+1}
θ=−1∗wn+1
这样,权重和阈值的学习就可统一为权重的学习 ,感知机学习规则非常简单,对训练样例(x,y),若当前感知机的输出为
y
^
\hat{y}
y^,则感知机权重将这样调整:
w
i
←
w
i
+
Δ
w
i
Δ
w
i
=
η
(
y
−
y
^
)
x
i
\begin{array}{c}{w_{i} \leftarrow w_{i}+\Delta w_{i}} \\ {\Delta w_{i}=\eta(y-\hat{y}) x_{i}}\end{array}
wi←wi+ΔwiΔwi=η(y−y^)xi其中
η
∈
(
0
,
1
)
,
通
常
为
一
个
小
正
数
,
\eta \in(0,1),通常为一个小正数,
η∈(0,1),通常为一个小正数,称为学习率(learning rate).从式中可看出,若感知机对训练样例(x,y)预测正确,即
y
^
=
y
\hat{y}=y
y^=y,则感知机不发生变化,否则将根据错误的程度进行权重调整.
需注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元(functional neuron), 其学习能力非常有限.事实上,上述与、或、非问题都是线性可分(linearly separable)的问题.例:
- 与, ( 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 \left(x_{1} \wedge x_{2}\right),令w_{1}=w_{2}=1, \theta=2, 则y=f\left(1 \cdot x_{1}+1 \cdot x_{2}-2\right),仅在x_{1}=x_{2}=1 \text { 时}, 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 \left(x_{1} \vee x_{2}\right) : 令w_{1}=w_{2}=1, \theta=0.5,则y=f\left(1 \cdot x_{1}+1 \cdot x_{2}-0.5\right),当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 \left(\neg x_{1}\right),令w_{1}=-0.6, w_{2}=0, \theta=-0.5,则y=f\left(-0.6 \cdot x_{1}+0\right.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+0x2+0.5),当x1=1时,y=0,当x1=0时,y=1
若两类模式是线性可分的,即存在一个线性超平面能将它们分开,如图a-c所示,则感知机的学习过程一定会收敛(converge)而求得适当的权向量 w = ( w 1 ; w 2 ; . . ; w n + 1 ) w = (w_1;w_2; .. ;w_{n+1}) w=(w1;w2;..;wn+1);否则感知机学习过程将会发生振荡(fuctuation), w难以稳定下来,不能求得合适解,例如感知机甚至不能解决如图(d)所示的异或这样简单的非线性可分问题.即感知机是一个线性分类模型。
要解决异或问题需要用到多层神经网络或多层感知机。
多层前馈神经网络
- 隐层和输出层神经元都是有激活函数的功能性神经元
- 神经元之间不存在同层连接也不存在跨层连接
例如:
多层神经网络有输入层(Input Layer),隐层(HiddenLayers),输出层(Output Layer)构成。
可以解决异或问题的两层感知机,箭头表示第二层感知机。
神经网络学习的过程,是根据训练数据来调整神经元之间的“连接权”,以及每个功能神经元(隐层和输出层包含功能神经元)的阙值,简而言之,神经网络学习到的东西蕴含在连接权和阙值中(即不断的根据训练集来调整权重 w 和 阙 值 θ \bm{w}和阙值\bm{\theta} w和阙值θ).