神经元模型
神经网络是机器学习的一种模型,它试图模仿人脑的工作方式,通过学习数据的模式和结构来进行预测和决策。其最基本的成分是神经元模型,在生物神经网络中,每个神经元与其他神经元相连,当它“兴奋”时, 就会向相连的神经元发送化学物质,从而改变这些神经元内的电位;如果某神 经元的电位超过了一个“阈值”(threshold), 那么它就会被激活,即“兴奋” 起来,向其他神经元发送化学物质。根据这个特性,我们得到了神经元一致沿用至今的MP模型:
这里的
[
x
1
,
x
2
,
.
.
.
,
x
n
]
[x1,x2,...,x_n]
[x1,x2,...,xn]表示的是一个输入样本的n个属性,然后
[
w
1
,
w
2
,
.
.
.
,
w
n
]
[w1,w2,...,w_n]
[w1,w2,...,wn]则表示他们对应权重,最后全部汇总到第i个神经元,随后得到一个值,然后每个神经元都会有一个阈值θ,当这个值超过θ和没超过θ都表示着不同的情况。
激活函数
上述神经元提到最后的输出
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
y=f\left(\sum_{i=1}^n w_ix_i-θ\right)
y=f(∑i=1nwixi−θ)表示激活函数,我们常用的激活函数有两种,分别是阶跃函数和Sigmoid函数
感知机和多层神经网络
感知机
感知机是由两层神经元组成的,其模型结构如下图:
输入层输入参数给输出层的神经元,输出层的神经元得到输入层的数值后,经过激活函数,得到了输出值
y
y
y,输出值为可参考上面的激活函数
y
=
f
(
∑
i
=
1
n
w
i
x
i
−
θ
)
y=f\left(\sum_{i=1}^n w_ix_i-θ\right)
y=f(i=1∑nwixi−θ)
阈值
阈值θ可通过学习得到.一开始阈值θ可看作一个固定输入为-1.0的“哑结点” 所对应的连接权重
w
n
+
1
w_{n+1}
wn+1, 这样,权重和阈值的学习就可统一为权重的学习.感知机学习规则非常简单,对训练样例(x,y),若当前感知机的输出为0,则感知机权重将这样调整:
多层神经网络
对于感知机来说,如果一类样本是线性可分的,也就是说能用一条直线拟合出他们之间的关系,那么通过感知机的学习,就可以保证他们能够收敛,但如果不能完全划分,如下图:
这里的异或问题中,我们无法用一条直线来拟合表示他们之间的关系,所以这时候如果用感知机,效果可能不尽人意。因此我们就提出了多层神经网络。
以异或为例,我们在输入层和输出层多加入了一层神经元,这一层我们称为隐含层,如图:
这里的加入了隐含层后,就相当于一个由3个感知机组合而成的多层神经网络,通过3个感知机,我们可以模拟出and函数,or函数和Not and 函数,通过这三个函数的组合就可以实现异或了
上面这种模型我们还称为单层前馈网络,如果隐含层不止一层,如下图:
如果有两层,则称双层前馈网络,三层则称三隐层前馈网络,以此类推
误差逆传播算法
由于多层网络无论在结构上还是在数量上,都比单层感知机要复杂很多,因此我们不能在依据单层感知机那一套规则进行传播,我们需要一种更能适应这种结构的算法,因此BP算法就诞生了。BP算法也叫误差逆传播算法,它被称为至今为止最成功神经网络算法。
下面我将介绍一下BP算法:
为了方便介绍,我们先给出一系列变量。给定训练集
D
=
{
(
x
1
,
y
1
)
,
(
x
2
,
y
2
)
,
.
.
.
.
.
.
(
x
i
,
y
i
)
}
D=\{(x_1,y_1),(x_2,y_2),......(x_i,y_i)\}
D={(x1,y1),(x2,y2),......(xi,yi)},其中
x
x
x表示的是一个样本中的每一个属性对应的值,以西瓜为例,
x
1
x_1
x1可能表示的是西瓜的色泽,
x
2
x_2
x2可能表示的就是西瓜的甜度属性,西瓜有多少个属性,输入层就有多少个神经元。根据上面的定义,我们也可以类比输出层,
y
y
y有多少个值,输出层就有多少个神经元。然后我们定义
θ
j
θ_j
θj和
γ
h
γ_h
γh表示输出层和隐层的阈值,
w
h
j
w_{hj}
whj和
v
i
h
v_{ih}
vih为隐层
−
>
->
−>输出层的权重和输入层
−
>
->
−>隐层的权重,
α
h
α_h
αh和
β
j
β_j
βj分别为隐层的第h个神经元的值和输出层第j个神经元的值
因此,我们可以得出一个BP网络:
书上给了一大堆公式,以及过程,这里介绍它的误差公式,和迭代公式:
计算误差的公式为:
E
k
=
1
2
∑
j
=
1
l
(
y
^
j
k
−
y
j
k
)
E_k = \frac{1}{2}\sum_{j=1}^l(\hat y_j^k-y_j^k)
Ek=21j=1∑l(y^jk−yjk)
通过这个误差公式,我们不难发现他和我们的求线性回归时的误差分析是一样的
接着是迭代公式,对于迭代公式来说,我们先明确我们要迭代的对象,根据上图的BP神经网络结构图可以得知,我们需要迭代的对象有四个,分别为: w h j w_{hj} whj, v i h v_{ih} vih, θ j θ_j θj, γ h γ_h γh。
它们对应的迭代公式为:
w h j = w h j − η g j b h w_{hj} = w_{hj} - ηg_jb_h whj=whj−ηgjbh
v i h = v i h − η e h x i v_{ih} = v_{ih} - η e_h x_i vih=vih−ηehxi
θ j = θ j − η g j θ_j = θ_j - ηg_j θj=θj−ηgj
γ h = γ h − η e h γ_h = γ_h - η e_h γh=γh−ηeh
符号定义如下:
w h j w_{hj} whj:表示从第 h h h个隐藏层神经元到第 j j j个输出层神经元的权重。
v i h v_{ih} vih:表示从第 i i i个输入层神经元到第 h h h个隐藏层神经元的权重。
θ j θ_j θj:表示第 j j j个输出层神经元的阈值。
γ h γ_h γh:表示第 h h h个隐藏层神经元的阈值。
η η η:是学习率,决定了每次权重更新的步长。
g j g_j gj:表示第 j j j个输出层神经元的梯度,通常是基于损失函数对输出层的输出的偏导数。
e h e_h eh:表示第 h h h个隐藏层神经元的误差,通常是基于损失函数对隐藏层的输出的偏导数。
b h b_h bh:表示第 h h h个隐藏层神经元的输出。
x i x_i xi:表示第 i i i个输入层神经元的输入。
误差传播算法的整体流程:
BP算法的目标其实是使得训练集上的累积误差最低
即得到:
min
E
=
1
m
∑
k
=
1
m
E
k
\min E=\frac{1}{m}\sum_{k=1}^mE_k
minE=m1k=1∑mEk