神经元模型
神经网络是具有适应性的简单 单元组成的广泛并行互连的网络。它的组织能后模拟生物神经系统对真实世界物体所作出的交互反应。
生物神经网络中,每个神经元兴奋的时候就会向其他神经元发送化学物质;当神经元的电位超过一个阈值,他就会被激活,向其他神经元发送化学物质。
将上述情况抽象成模型,就是M-P神经元模型。如图:
这个模型中,神经元接收来自n个其他神经元传递来的信号,这些输入信号通过带权重的连接传递信息,神经元接收到的总输入将与这个神经元的阈值比较,再通过激活函数处理后产生神经元的输出。
理想中的激活函数是阶跃函数
s
g
n
sgn
sgn产生0或1输出,但是这个函数不连续、不光滑,性质不好,因此用sigmoid函数代替。
s
g
n
(
x
)
=
1
,
x
≥
0
;
sgn(x)=1,x≥0;
sgn(x)=1,x≥0;
s
g
n
(
x
)
=
0
,
x
<
0
sgn(x)=0,x<0
sgn(x)=0,x<0
s
i
g
m
o
i
d
(
x
)
=
1
1
+
e
−
x
sigmoid(x)=\frac{1}{1+e^{-x}}
sigmoid(x)=1+e−x1
神经元按一定结构连接起来,就是神经网络。
感知机和神经网络
感知机
感知机是两层神经元组成的模型,输入层接收信号传递给输出层。输入层接收信号,输出层是M-P神经元,也就是阈值逻辑单元。因此它可以实现逻辑与或非运算。具体来讲就是给定w1,w2和θ的取值,然后代入 y = f ( ∑ i w i x i − θ ) y=f(\sum_iw_ix_i-\theta) y=f(∑iwixi−θ);比如与运算可以令 w 1 = w 2 = 1 , θ = 2 w_1=w_2=1,\theta=2 w1=w2=1,θ=2求得。
对于模型中的参数,权重w和阈值θ都能通过学习得到。
权重的学习方式:
对于样本
(
x
,
y
)
(x,y)
(x,y),其通过感知机模型的输出为
y
^
\hat y
y^,则感知机权重的调节如下:
w
i
←
w
i
+
△
w
i
w_i\leftarrow w_i+\bigtriangleup w_i
wi←wi+△wi
△
w
i
=
η
(
y
−
y
^
)
x
i
\bigtriangleup w_i=\eta(y-\hat y)x_i
△wi=η(y−y^)xi
其中
η
\eta
η是学习率,介于0到1之间。通过
△
w
i
\bigtriangleup w_i
△wi的公式可以看出,当
y
=
y
^
y=\hat y
y=y^时感知机才会稳定,否则就会根据错误的程度慢慢调整。
然而感知机的问题是,感知机只在输出层神经元进行激活函数处理,只有一层功能神经元,学习能力有限。当问题变成线性不可分的时候,感知机就没什么作用了。
因此如果是线性可分的问题,感知机很容易收敛;如果是非线性可分问题,就需要多层感知机协同工作,对数据进行多步处理,也就是需要多层功能神经元。而功能神经元在神经网络中处于隐藏层和输出层位置。
神经网络
神经网络中采用层级结构,每层中的神经元和下一层全连接,相同层的神经元之间无连接,跨层间不存在连接。这种神网就是多层前缀神经网络。
其中,输入层神经元接收输入数据,隐藏层和输出层神经元对数据进行处理加工,最终结果由输出层神经元输出。也就是,输入层只是接收数据,数据的处理交给隐藏层和输出层的功能神经元。而神经网络的学习过程其实就是调节权重和阈值的过程。
反向传播算法
然而对于更复杂的问题,我们需要更多层的隐藏层进行数据的学习。简单的感知机显然不能满足我们更复杂的需求。因此,反向传播(BackPropagation,简称BP)算法是更好的选择。
下面我们来看看BP算法是怎么工作的:
给定训练集:
D
=
{
(
x
1
,
y
1
)
,
.
.
.
,
(
x
m
,
y
m
)
}
,
x
i
∈
R
d
,
y
i
∈
R
l
D=\left \{(x_1,y_1),...,(x_m,y_m) \right \},x_i\in R^d,y_i\in R^l
D={(x1,y1),...,(xm,ym)},xi∈Rd,yi∈Rl
总计M个数据组,每个数据d个属性,输出是l维向量,隐藏层神经元q个。
输出层中第j个神经元的阈值为
θ
j
\theta_j
θj;
隐藏层中第h个神经元的阈值为
γ
h
\gamma_h
γh;
输入层第i个神经元和隐藏层第h个神经元间的连接权为
v
i
h
v_{ih}
vih;
隐藏层第h个神经元与输出层第j个神经元间的连接权为
w
h
j
w_{hj}
whj;
隐藏层第h个神经元接收到的输入为:
α
h
=
∑
i
=
1
d
v
i
h
x
i
\alpha_h=\sum_{i=1}^dv_{ih}x_i
αh=∑i=1dvihxi
输出层第j个神经元接收到的输入为:
β
j
=
∑
h
=
1
d
w
h
j
b
h
,
\beta_j=\sum_{h=1}^dw_{hj}b_h,
βj=∑h=1dwhjbh,其中
b
h
b_h
bh是隐藏层第
h
h
h个神经元的输出;
假定输出是
y
^
k
=
(
y
^
1
k
,
.
.
.
,
y
^
l
k
)
,
\hat y_k=(\hat y_1^k,...,\hat y_l^k),
y^k=(y^1k,...,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_j^k-y_j^k)^2.
Ek=21∑j=1l(y^jk−yjk)2.
BP基于梯度下降法负梯度方向更新参数,根据均方误差给定学习率,对于均方误差
E
k
E_k
Ek,给定学习率
η
,
\eta,
η,有:
Δ
w
h
j
=
−
η
∂
E
k
∂
w
h
j
\Delta w_{hj}=-\eta\frac{\partial E_k}{\partial w_{hj}}
Δwhj=−η∂whj∂Ek
根据求导法则我们知道:
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
\frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y_j^k}\cdot \frac{\partial \hat y_j^k}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}}
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj
其中,
∂
β
j
∂
w
h
j
=
b
h
,
\frac{\partial \beta_j}{\partial w_{hj}}=b_h,
∂whj∂βj=bh,而对于sigmoid函数有
f
′
(
x
)
=
f
(
x
)
(
1
−
f
(
x
)
)
,
f'(x)=f(x)(1-f(x)),
f′(x)=f(x)(1−f(x)),将这两个式子代入
∂
E
k
∂
w
h
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
⋅
∂
β
j
∂
w
h
j
\frac{\partial E_k}{\partial w_{hj}}=\frac{\partial E_k}{\partial \hat y_j^k}\cdot \frac{\partial \hat y_j^k}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial w_{hj}}
∂whj∂Ek=∂y^jk∂Ek⋅∂βj∂y^jk⋅∂whj∂βj
有:
g
j
=
∂
E
k
∂
y
^
j
k
⋅
∂
y
^
j
k
∂
β
j
=
−
(
y
^
j
k
−
y
j
k
)
f
′
(
β
j
−
θ
j
)
=
y
^
j
k
(
1
−
y
^
j
k
)
(
y
j
k
−
y
^
j
k
)
g_j=\frac{\partial E_k}{\partial \hat y_j^k}\cdot \frac{\partial \hat y_j^k}{\partial \beta_j}=-(\hat y_j^k-y_j^k)f'(\beta_j-\theta_j)=\hat y_j^k(1-\hat y_j^k)( y_j^k-\hat y_j^k)
gj=∂y^jk∂Ek⋅∂βj∂y^jk=−(y^jk−yjk)f′(βj−θj)=y^jk(1−y^jk)(yjk−y^jk)
所以:
Δ
w
h
j
=
η
g
j
b
h
\Delta w_{hj}=\eta g_jb_h
Δwhj=ηgjbh
同理可得:
Δ
θ
j
=
−
η
g
j
,
\Delta \theta_{j}=-\eta g_j,
Δθj=−ηgj,
Δ
v
i
h
=
η
e
h
x
i
,
\Delta v_{ih}=\eta e_hx_i,
Δvih=ηehxi,
Δ
γ
h
=
−
η
e
h
\Delta \gamma_{h}=-\eta e_h
Δγh=−ηeh
其中:
e
h
=
−
∂
E
k
∂
b
h
⋅
∂
b
h
∂
α
h
=
=
∑
j
=
1
l
∂
E
k
∂
β
j
⋅
∂
β
j
∂
b
h
f
′
(
α
h
−
γ
h
)
=
b
h
(
1
−
b
h
)
∑
j
=
1
l
w
h
j
g
j
e_h=-\frac{\partial E_k}{\partial b_h}\cdot\frac{\partial b_h}{\partial \alpha_h}==\sum_{j=1}^l\frac{\partial E_k}{\partial \beta_j}\cdot\frac{\partial \beta_j}{\partial b_h}f'(\alpha_h-\gamma_h)=b_h(1-b_h)\sum_{j=1}^lw_{hj}g_j
eh=−∂bh∂Ek⋅∂αh∂bh==j=1∑l∂βj∂Ek⋅∂bh∂βjf′(αh−γh)=bh(1−bh)j=1∑lwhjgj
BP的目标是最小化累积误差 E , E, E,而上面的推导每次仅针对一个训练样本更新权重和阈值。如果将其推广为基于累积误差最小化的更新规则,就是累积误差反向传播算法。
BP神经网络遭遇过拟合的解决方法:
1.提前停止:出现训练集误差降低但是验证集误差升高就停止
2.正则化:在误差函数中增加一个用于描述网络复杂度的部分,例如连接权和阈值的平方和,用
w
i
w_i
wi表示。误差函数就可以表示为:
E
=
λ
1
m
∑
k
=
1
m
+
(
1
−
λ
)
∑
i
w
i
2
E=\lambda \frac{1}{m}\sum_{k=1}^m+(1-\lambda)\sum_iw_i^2
E=λm1k=1∑m+(1−λ)i∑wi2
其中的
λ
\lambda
λ可以通过交叉验证法进行估计
前馈神经网络
待补充