前馈神经网络—BP算法
简要介绍:
-
神经元模型:一个神经元接受多个输入,其自身有一个阈值,输入的强度达到阈值,便会兴奋,输出1,达不到便不兴奋输出0. 其数学模型是
y = f ( ∑ i = 1 n w i x i − θ ) y=f(\sum_{i=1}^nw_ix_i-\theta) y=f(i=1∑nwixi−θ)
其中 f f f为激励函数,有多种,1 .sigmod函数 f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^-x} f(x)=1+e−x1
2 .Relu函数 f ( x ) = m a x ( x , 0 ) f(x)=max(x,0) f(x)=max(x,0)
3 .softmax函数 f ( x ) = e y i ∑ e y i f(x)=\frac{e^{y_i}}{\sum e^{y_i}} f(x)=∑eyieyi
-
神经网
包括输入层:只负责输入,不负责运算
隐层:运算
输出层:运算且输出,输出层和隐层算上层数
神经元之间是全连接,用突触连接,每个突触有一个权重
-
参数
对于一个神经网络而言,每个神经元的阈值 θ \theta θ,每一条突触的权重 W W W都是参数
-
神经网络的本质
个人理解,从外表看,神经网络接收输入得到一个分类,是映射关系,故可以看做一个函数,该函数将输入映射到要分类的类别上,从内部看,神经网络拥有众多的参数,通常可达上万个参数,如此多的参数构造出来得函数可以非常复杂以及准确,这就是神经网络的魅力。
BP算法
BP算法(Back Propagation)是训练神经网络参数的算法,基本思想在神经网络里一层一层先向前传播,得到结果与真实结果比较一层一层后向后更新。
在推导过程中激励函数我们使用sigmod函数
给出数学符号和最终结论
符号 | 含义 |
---|---|
W h i k W_{hi}^k Whik | 第k-1层神经元中的第h个神经元与第k+1层第i个神经元之间的突触的权重 |
θ i k \theta_i^k θik | 第k层神经元中的第i个神经元的阈值 |
b h k b_h^k bhk | 第k层第h个神经元的输出(0~1) |
N k N_k Nk | 第k层的神经元个数 |
y h y_h yh | 理想情况下输出层第h个神经元的输出结果 |
y h ^ \hat{y_h} yh^ | 输出层第h个神经元的输出结果 |
结 论 : 对 于 第 k 层 神 经 元 的 第 h 个 神 经 元 , 定 义 梯 度 e h k = ∑ i = 1 N k + 1 ( e i k + 1 W h i k + 1 ) b h k ( 1 − b h k ) , 如 果 该 层 是 隐 层 e h k = y h ^ ( 1 − y h ^ ) ( y h − y h ^ ) , 如 果 该 层 是 输 出 层 则 有 以 下 结 果 W i h k = W i h k + η e h k b i k − 1 θ i k = θ i k − η e i k 结论:对于第k层神经元的第h个神经元,定义梯度\\ e_h^k=\sum_{i=1}^{N_{k+1}}(e_i^{k+1}W_{hi}^{k+1})b_h^k(1-b_h^k),\space\space\space\space\space\space\space如果该层是隐层\\ e_h^k=\hat{y_h}(1-\hat{y_h})(y_h-\hat{y_h}),\space\space\space\space\space\space\space如果该层是输出层\\ 则有以下结果\\ W_{ih}^k=W_{ih}^k+\eta e_h^kb_i^{k-1}\\ \theta_i^k=\theta_i^k-\eta e_i^k 结论:对于第k层神经元的第h个神经元,定义梯度ehk=i=1∑Nk+1(eik+1Whik+1)bhk(1−bhk), 如果该层是隐层ehk=yh^(1−yh^)(yh−yh^), 如果该层是输出层则有以下结果Wihk=Wihk+ηehkbik−1θik=θik−ηeik
推导过程:
首先 f ( z ) = 1 1 − e − z , f , ( z ) = f ( z ) ( 1 − f ( z ) ) , 其 中 z = ∑ i = 1 n w i b i − θ f(z)=\frac{1}{1-e^{-z}},f^,(z)=f(z)(1-f(z)),其中z=\sum_{i=1}^nw_ib_i-\theta f(z)=1−e−z1,f,(z)=f(z)(1−f(z)),其中z=∑i=1nwibi−θ
损失函数
E
=
1
2
∑
h
=
1
l
(
y
h
^
−
y
h
)
2
E=\frac{1}{2}\sum_{h=1}^l(\hat{y_h}-y_h)^2
E=21∑h=1l(yh^−yh)2,我们的目标是求得参数使得损失函数达到最小值,采用梯度下降的方法,首先考虑输出层的参数,说明由于是输出层故不再给出参数的上标表示层数
∂
E
∂
W
h
j
=
∂
E
∂
y
j
^
∗
∂
y
j
^
∂
W
h
j
=
(
y
j
^
−
y
j
)
∗
f
/
(
∑
i
=
1
N
k
−
1
W
i
j
b
i
−
θ
j
)
b
h
=
(
y
j
^
−
y
j
)
y
j
^
(
1
−
y
j
^
)
b
h
=
−
e
j
b
h
\frac{\partial E}{\partial W_{hj}}=\frac{\partial E}{\partial \hat{y_j}}*\frac{\partial \hat{y_j}}{\partial W_{hj}}\\ =(\hat{y_j}-y_j)*f^/(\sum_{i=1}^{N_{k-1}}W_{ij}b_i-\theta_j)b_h\\ =(\hat{y_j}-y_j)\hat{y_j}(1-\hat{y_j})b_h=-e_jb_h
∂Whj∂E=∂yj^∂E∗∂Whj∂yj^=(yj^−yj)∗f/(i=1∑Nk−1Wijbi−θj)bh=(yj^−yj)yj^(1−yj^)bh=−ejbh
同样有
∂
E
∂
θ
j
=
∂
E
∂
y
j
^
∗
∂
y
j
^
∂
θ
j
=
(
y
j
^
−
y
j
)
f
/
(
∑
i
=
1
N
k
−
1
W
i
j
b
i
−
θ
j
)
∗
(
−
1
)
=
−
(
y
j
^
−
y
j
)
y
j
^
(
1
−
y
j
^
)
=
e
j
\frac{\partial E}{\partial \theta_j}=\frac{\partial E}{\partial \hat{y_j}}*\frac{\partial \hat{y_j}}{\partial \theta_j}\\ =(\hat{y_j}-y_j)f^/(\sum_{i=1}^{N_{k-1}}W_{ij}b_i-\theta_j)*(-1)\\ =-(\hat{y_j}-y_j)\hat{y_j}(1-\hat{y_j})=e_j
∂θj∂E=∂yj^∂E∗∂θj∂yj^=(yj^−yj)f/(i=1∑Nk−1Wijbi−θj)∗(−1)=−(yj^−yj)yj^(1−yj^)=ej
故有输出层的参数更新
对于隐层同样的推导过程,我们考虑类似数学归纳法的方法
假设我们已知第k+1层的一些信息,如损失函数 E E E对第k+1层的突触权重的导数是已知的,据此递推的求得损失函数 E E E对第k层的突触权重的导数,详细过程不写了