五、神经网络
(neural networks)
5.1 神经元模型
(neuron)
神经元接收到来自n个其他神经元传递的输入信号,这写信号通过带权重的连接进行传递,神经元接受到的总输入值与神经元的阈值进行比较后,通过激活函数处理产生神经元的输出。
激活函数
理想的激活函数是阶跃函数,但是阶跃函数步连续,不光滑。实际使用Sigmoid函数。
将一个神经网络视为包含了许多参数的数学模型,这个模型有若干个函数。例如 y i = f ( ∑ i w i x i − θ j ) y_i = f(\sum_iw_ix_i-\theta_j) yi=f(∑iwixi−θj)
10个神经元两两连接,有100个参数:90个连接权和10个阈值
5.2 感知机
感知机(Perceptron):由两层神经元组成,输入层接受外界输入信号后传递给输出层,输出层是M-P神经元(阈值逻辑单元(threshold logic unit))
假定 f f f是阶跃函数,有
- ”与“( x 1 ∧ x 2 x_1\wedge x_2 x1∧x2):令 w 1 = w 2 = 1 , θ = 2 w_1=w_2=1,\theta=2 w1=w2=1,θ=2,则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 2 ) y=f(1·x_1+1·x_2-2) y=f(1⋅x1+1⋅x2−2),仅在 x 1 = x 2 = 1 x_1=x_2=1 x1=x2=1时, y = 1 y=1 y=1
- “或”( x 1 ∨ x 2 x_1 \vee x_2 x1∨x2):当 w 1 = w 2 = 1 , θ = 0.5 w_1=w_2=1,\theta=0.5 w1=w2=1,θ=0.5,则 y = f ( 1 ⋅ x 1 + 1 ⋅ x 2 − 0.5 ) y=f(1·x_1+1·x_2-0.5) y=f(1⋅x1+1⋅x2−0.5),当 x 1 = 1 x_1=1 x1=1或 x 2 = 1 x_2=1 x2=1时 y = 1 y=1 y=1
- ”非“( ¬ x 1 \neg x_1 ¬x1):当 w 1 = − 0.6 , w 2 = 0 , θ = − 0.5 w_1=-0.6,w_2=0,\theta=-0.5 w1=−0.6,w2=0,θ=−0.5,则 y = f ( − 0.6 ⋅ x 1 + 0 ⋅ x 2 + 0.5 ) y=f(-0.6·x_1+0·x_2+0.5) y=f(−0.6⋅x1+0⋅x2+0.5),当 x 1 = 1 , y = 0 x_1=1,y=0 x1=1,y=0;当 x 1 = 0 x_1=0 x1=0时 y = 1 y=1 y=1
一般的,给定训练数据集,权重 w i ( i = 1 , 2 , . . . , n ) w_i(i=1,2,...,n) wi(i=1,2,...,n)以及阈值 θ \theta θ可通过学习得到。阈值 θ \theta θ可看作一个固定输入为-1.0的”哑结点“(dummy node)所对应的连接权重 w n + 1 w_{n+1} wn+1,权重和阈值的学习可以同一为权重的学习。
感知机学习规则:对训练样例
(
x
,
y
)
(x,y)
(x,y),若当前感知机的输出为
y
^
\hat{y}
y^,则感知机权重可以调整为:
w
i
←
w
i
+
Δ
w
i
Δ
w
i
=
η
(
y
−
y
^
)
x
i
\begin{aligned} w_i &\leftarrow w_i+\Delta w_i \\ \Delta w_i &= \eta(y-\hat{y})x_i \end{aligned}
wiΔwi←wi+Δwi=η(y−y^)xi
其中
η
∈
(
0
,
1
)
\eta \in (0,1)
η∈(0,1)为学习率(一般设置为小整数,例如0.1)
如果感知机对训练样例 ( x , y ) (x,y) (x,y)预测正确,即 y ^ = y \hat{y}=y y^=y,则感知机不会发生变化,否则将根据错误的程度进行权重调整。
感知机只有输出层神经元进行激活函数处理,只拥有一层功能神经元,学习能力有限。
【**线性可分:**若两类模式是线性可分的,即存在一个线性超平面能将他们分开】
若两类模式是线性可分的【图(a~c)】,则感知机的学习过程一定是收敛(converge)的,从而求得适当的权向量 w = ( w 1 , w 2 , . . . , w n + 1 ) w=(w_1,w_2,...,w_{n+1}) w=(w1,w2,...,wn+1);否则感知机学习过程会发生震荡(fluctuation), w w w难以稳定,不能求得合适解。
5.3 多层网络
解决非线性问题
图(a),输出层与输入层之间的一层神经元,称为隐层或隐含层(hidden layer),隐含层和输出层神经元都是拥有激活函数的功能神经元。
多层前馈神经网络(multi-layer feedforward neural networks)
每层神经元与下一层神经元全互连,神经元之间不存在同层连接,也不存在跨层连接。
输入层神经元接受外界输入,隐层与输出层神经元对信号进行加工,最终结果由输出层神经元输出。
神经网络的学习过程,就是根据训练数据来调整神经元之间的”连接权“(connection weight)以及每个功能神经元的阈值
5.4 误差逆传播算法(BP)
(error 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),...,(x_m,y_m)},x_i \in \mathbb{R}^d,y_i\in\mathbb{R}^l D=(x1,y1),(x2,y2),...,(xm,ym),xi∈Rd,yi∈Rl
即:输入实例又 d d d 个属性描述,输出 l l l 维实值向量
图5.7:
-
d d d 个输入神经元,
-
l l l 个输出神经元,
-
q q q 个隐层神经元的多层前馈网络结构,
-
输出层的第 j j j 个神经元的阈值用 θ j \theta_j θj 表示,
-
隐层第 h h h 个神经元的阈值用 γ h \gamma_h γh表示
-
输入层第 i i i 个神经元与隐层第 h h h 个神经元之间的连接权为 v i h v_{ih} vih
-
输出层第 i i i 个神经元之间的连接权为 w h j w_{hj} whj
-
隐层第 h h h 个神经元接收到的输入为 α h = ∑ i = 1 d v i h x i \alpha_h=\sum_{i=1}^d v_{ih}x_i αh=∑i=1dvihxi
-
输出层第 j j j 个神经元接收的输入为 β j = ∑ h = 1 q w h j b h \beta_j = \sum_{h=1}^qw_{hj}b_h βj=∑h=1qwhjbh, b h b_h bh为隐层第 h h h个神经元的输出
假设隐层和输出层神经元都使用Sigmoid函数 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+e−x1
对训练例
(
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}^k_1,\hat{y}^k_2,...,\hat{y}^k_l)
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−θj)
则网络在
(
x
k
,
y
k
)
(x_k,y_k)
(xk,yk)上的均方误差为:
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
2
E_k = \frac{1}{2}\sum_{j=1}^l(\hat{y}^k_j-y_j^k)^2
Ek=21j=1∑l(y^jk−yjk)2