BP神经网络

基本概念

1、神经元

在这里插入图片描述

在这个模型中,神经元接收到来自n个其他神经元传递来的信号,这些输入信号通过带权的连接进行传递,神经元接收到总输入值,再与阈值进行比较,然后通过“激活函数”处理以产生神经元输出。

2、激活函数

为什么神经网络模型要使用激活函数:

(1)引入非线性因素,解决非线性问题。

(2)可知输出范围,有限的输出范围使得网络对于一些比较大的输入也会比较稳定,这也是为什么早期的激活函数都以此类函数为主,如Sigmoid、TanH。

激活函数的性质要求:

(1)可微性:BP神经网络的优化方法是基于梯度的,所以必须要求激活函数可微

(2)单调性:即导数符号不变。单调性使得在激活函数处的梯度方向不会经常改变,从而让训练更容易收敛。

常见激活函数如下:

(1)ReLu函数

该函数是工程上使用较多的激活函数,其定义为:
y = { 0 ( x ≤ 0 ) x ( x > 0 ) y=\left \{\begin{array} {lr} 0 \qquad(x\le 0)\\ x \qquad(x> 0) \end{array}\right. y={0(x0)x(x>0)
在这里插入图片描述

(2)sigmoid函数
f ( x ) = 1 1 + e − x f(x) = \frac{1}{1+e^{-x}} f(x)=1+ex1
其图像如下:

在这里插入图片描述

Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,可以用作输出层。求导容易,求导结果为 f ( x ) ( 1 − f ( x ) ) f(x)(1-f(x)) f(x)(1f(x)),其最大的局限性在于:当x达到一定值时,其导数值等于0,容易产生梯度消失,导致训练出现问题。

(3)tanh函数
t a n h ( x ) = 1 − e − 2 x 1 + e − 2 x tanh(x) = \frac{1-e^{-2x}}{1+e^{-2x}} tanh(x)=1+e2x1e2x
其图像如下:

在这里插入图片描述

相比Sigmoid函数,其输出以0为中心而且收敛速度快。但他和sigmoid一样,也存在梯度消失问题。

神经网络模型

回顾感知机模型 ,感知机模型也可以理解为一个简单的神经网络模型,由两层神经元组成,如下图所示:
在这里插入图片描述

需要注意的是,感知机只有输出层神经元进行激活函数处理,即只拥有一层功能神经元,其学习能力非常有限。

感知机模型 中也提到过,感知机只能解决简单的二分类问题,如:“与”,“非”,“或”;不能解决异或问题,为了解决非线性问题,需要考虑使用多层功能神经元。如下图所示:

在这里插入图片描述
那么如何训练得到这个神经网络的参数,我们使用误差逆传播(BP)算法进行学习,学习得到的神经网络称为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),\ldots,(x_m,y_m)\},x_i \in \mathbf R^d,y_i \in \mathbf R^l D={(x1,y1),(x2,y2),,(xm,ym)},xiRd,yiRl ,即输入数据有 d d d个属性,输出 l l l维实值向量。隐层神经元个数是 q q q输出层第 j j j个神经元的阈值用 θ j \theta_j θj表示,隐层第 h h h个神经元的阈值用 γ h \gamma_h γh表示。激活函数采用sigmoid函数。

对训练样本 ( x k , y k ) (x_k,y_k) (xk,yk),假定神经网络的输出为 y ^ = ( y ^ 1 k , y ^ 2 k , … , y ^ l k ) \hat {\mathbf y} =(\hat y_1^k,\hat y_2^k,\ldots,\hat y_l^k) y^=(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_j^k - y_j^k)^2 Ek=21j=1l(y^jkyjk)2
我们的目标是最小化这个误差函数。

待求参数:

(1)输入层到隐藏层有 d × q d\times q d×q个参数。

(2) 隐藏层到输出层有 q × l q\times l q×l个参数。

(3)隐层 q q q个神经元的阈值。

(4)输出层 l l l个神经元的阈值。

BP神经网络基于梯度下降策略,以目标的负梯度方向对参数进行调整。不断优化参数。

(1)求 △ w h j \triangle w_{hj} whj

对误差函数 E k E_k Ek,给定学习了 η \eta η,有:
△ w h j = − η ∂ E k ∂ w h j \triangle w_{hj} = -\eta \frac{\partial E_k}{\partial w_{hj}} whj=ηwhjEk
根据链式求导法则:
∂ 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}}} whjEk=y^jkEkβjy^jkwhjβj
β j = ∑ h = 1 q w h j b h \beta_j=\sum_{h=1}^q w_{hj}b_h βj=h=1qwhjbh得:
∂ β 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)(1f(x))

定义 g i g_i gi
g i = − ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j = − ( y ^ j k − y j k ) f ′ ( β j − θ j ) = − ( y ^ j k − y j k ) f ( β j − θ j ) ( 1 − f ( β j − θ j ) ) = y ^ j k ( 1 − y ^ j k ) ( y j k − y ^ j k ) \begin{aligned} g_i &= - \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 - y_j^k)f(\beta_j - \theta_j)(1-f(\beta_j - \theta_j))\\ &=\hat{y}_j^k(1-\hat{y}_j^k)(y_j^k-\hat{y}_j^k) \end{aligned} gi=y^jkEkβjy^jk=(y^jkyjk)f(βjθj)=(y^jkyjk)f(βjθj)(1f(βjθj))=y^jk(1y^jk)(yjky^jk)
g j g_j gj为输出神经元得梯度

所以:
△ w h j = η g j b h \triangle w_{hj} = \eta g_j b_h whj=ηgjbh
(2)求 △ θ j \triangle \theta_j θj
Δ θ j = − η ∂ E k ∂ θ j \Delta \theta_j = -\eta \cfrac{\partial E_k}{\partial \theta_j} Δθj=ηθjEk

∂ E k ∂ θ j = ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ θ j = ∂ E k ∂ y ^ j k ⋅ ∂ [ f ( β j − θ j ) ] ∂ θ j = ∂ E k ∂ y ^ j k ⋅ f ′ ( β j − θ j ) × ( − 1 ) = ∂ E k ∂ y ^ j k ⋅ f ( β j − θ j ) × [ 1 − f ( β j − θ j ) ] × ( − 1 ) = ∂ E k ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = ∂ [ 1 2 ∑ j = 1 l ( y ^ j k − y j k ) 2 ] ∂ y ^ j k ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = 1 2 × 2 ( y ^ j k − y j k ) × 1 ⋅ y ^ j k ( 1 − y ^ j k ) × ( − 1 ) = ( y j k − y ^ j k ) y ^ j k ( 1 − y ^ j k ) = g j \begin{aligned} \cfrac{\partial E_k}{\partial \theta_j} &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial \hat{y}_j^k}{\partial \theta_j} \\ &= \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot\cfrac{\partial [f(\beta_j-\theta_j)]}{\partial \theta_j} \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f^{\prime}(\beta_j-\theta_j) \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot f\left(\beta_{j}-\theta_{j}\right)\times\left[1-f\left(\beta_{j}-\theta_{j}\right)\right] \times (-1) \\ &=\cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{\partial\left[ \cfrac{1}{2} \sum\limits_{j=1}^{l}\left(\hat{y}_{j}^{k}-y_{j}^{k}\right)^{2}\right]}{\partial \hat{y}_{j}^{k}} \cdot \hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=\cfrac{1}{2}\times 2(\hat{y}_j^k-y_j^k)\times 1 \cdot\hat{y}_j^k\left(1-\hat{y}_j^k\right) \times (-1) \\ &=(y_j^k-\hat{y}_j^k)\hat{y}_j^k\left(1-\hat{y}_j^k\right) \\ &= g_j \end{aligned} θjEk=y^jkEkθjy^jk=y^jkEkθj[f(βjθj)]=y^jkEkf(βjθj)×(1)=y^jkEkf(βjθj)×[1f(βjθj)]×(1)=y^jkEky^jk(1y^jk)×(1)=y^jk[21j=1l(y^jkyjk)2]y^jk(1y^jk)×(1)=21×2(y^jkyjk)×1y^jk(1y^jk)×(1)=(yjky^jk)y^jk(1y^jk)=gj

所以:
Δ θ j = − η g j \Delta \theta_j = -\eta g_j Δθj=ηgj
(3)求 Δ v i h \Delta v_{ih} Δvih

因为
Δ v i h = − η ∂ E k ∂ v i h \Delta v_{ih} = -\eta \cfrac{\partial E_k}{\partial v_{ih}} Δvih=ηvihEk

所以:
∂ E k ∂ v i h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ ∂ b h ∂ α h ⋅ ∂ α h ∂ v i h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ ∂ b h ∂ α h ⋅ x i = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ f ′ ( α h − γ h ) ⋅ x i = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ w h j ⋅ f ′ ( α h − γ h ) ⋅ x i = ∑ j = 1 l ( − g j ) ⋅ w h j ⋅ f ′ ( α h − γ h ) ⋅ x i = − f ′ ( α h − γ h ) ⋅ ∑ j = 1 l g j ⋅ w h j ⋅ x i = − b h ( 1 − b h ) ⋅ ∑ j = 1 l g j ⋅ w h j ⋅ x i = − e h ⋅ x i \begin{aligned} \cfrac{\partial E_k}{\partial v_{ih}} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot \cfrac{\partial \alpha_h}{\partial v_{ih}} \\&= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} \cdot x_i \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\&= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\&= \sum_{j=1}^{l} (-g_j) \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot x_i \\&= -f^{\prime}(\alpha_h-\gamma_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i\\&= -b_h(1-b_h) \cdot \sum_{j=1}^{l} g_j \cdot w_{hj} \cdot x_i \\&= -e_h \cdot x_i\end{aligned} vihEk=j=1ly^jkEkβjy^jkbhβjαhbhvihαh=j=1ly^jkEkβjy^jkbhβjαhbhxi=j=1ly^jkEkβjy^jkbhβjf(αhγh)xi=j=1ly^jkEkβjy^jkwhjf(αhγh)xi=j=1l(gj)whjf(αhγh)xi=f(αhγh)j=1lgjwhjxi=bh(1bh)j=1lgjwhjxi=ehxi
e h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ ∂ b h ∂ α h e_h= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \alpha_h} eh=j=1ly^jkEkβjy^jkbhβjαhbh为隐层神经元得梯度项

所以:
Δ v i h = − η ∂ E k ∂ v i h = η e h x i \Delta v_{ih} =-\eta \cfrac{\partial E_k}{\partial v_{ih}} =\eta e_h x_i Δvih=ηvihEk=ηehxi
(4)求 Δ γ h \Delta \gamma_h Δγh

因为:
Δ γ h = − η ∂ E k ∂ γ h \Delta \gamma_h = -\eta \cfrac{\partial E_k}{\partial \gamma_h} Δγh=ηγhEk
所以:
∂ E k ∂ γ h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ ∂ b h ∂ γ h = ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ ∂ β j ∂ b h ⋅ f ′ ( α h − γ h ) ⋅ ( − 1 ) = − ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ w h j ⋅ f ′ ( α h − γ h ) = − ∑ j = 1 l ∂ E k ∂ y ^ j k ⋅ ∂ y ^ j k ∂ β j ⋅ w h j ⋅ b h ( 1 − b h ) = ∑ j = 1 l g j ⋅ w h j ⋅ b h ( 1 − b h ) = e h \begin{aligned} \cfrac{\partial E_k}{\partial \gamma_h} &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot \cfrac{\partial b_h}{\partial \gamma_h} \\ &= \sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot \cfrac{\partial \beta_j}{\partial b_h} \cdot f^{\prime}(\alpha_h-\gamma_h) \cdot (-1) \\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot f^{\prime}(\alpha_h-\gamma_h)\\ &= -\sum_{j=1}^{l} \cfrac{\partial E_k}{\partial \hat{y}_j^k} \cdot \cfrac{\partial \hat{y}_j^k}{\partial \beta_j} \cdot w_{hj} \cdot b_h(1-b_h)\\ &= \sum_{j=1}^{l}g_j\cdot w_{hj} \cdot b_h(1-b_h)\\ &=e_h \end{aligned} γhEk=j=1ly^jkEkβjy^jkbhβjγhbh=j=1ly^jkEkβjy^jkbhβjf(αhγh)(1)=j=1ly^jkEkβjy^jkwhjf(αhγh)=j=1ly^jkEkβjy^jkwhjbh(1bh)=j=1lgjwhjbh(1bh)=eh
所以:
Δ γ h = − η ∂ E k ∂ γ h = − η e h \Delta \gamma_h=-\eta\cfrac{\partial E_k}{\partial \gamma_h} = -\eta e_h Δγh=ηγhEk=ηeh
注:学习了 η ∈ ( 0 , 1 ) \eta \in (0,1) η(0,1) 控制每一轮迭代中得更新步长,太大容易震荡太小收敛速度很慢。

误差逆传播算法如下:

输入:训练集 D = { ( x k , y k ) } k = 1 m D=\{(\mathbf x_k,\mathbf y_k)\}_{k=1}^m D={(xk,yk)}k=1m ,学习率 η \eta η

输出:连接全与阈值确定的多层前馈神经网络。

过程:

  1. 在(0,1)范围内随机初始神经网络中得所有连接权和阈值

  2. repeat:

    ​ for all ( x k , y k ) (\mathbf x_k,\mathbf y_k) (xk,yk) do

    ​ 根据当前参数计算当前得样本输出 y k ^ \hat {\mathbf y_k} yk^

    ​ 计算输出神经元梯度项 g j g_j gj

    ​ 计算隐层神经元得梯度项 e h e_h eh

    ​ 根据求导的最终结果:
    △ w h j = η g j b h Δ θ j = − η g j Δ v i h = η e h x i Δ γ h = − η e h \triangle w_{hj} = \eta g_j b_h \\ \Delta \theta_j = -\eta g_j \\ \Delta v_{ih} =\eta e_h x_i \\ \Delta \gamma_h = -\eta e_h whj=ηgjbhΔθj=ηgjΔvih=ηehxiΔγh=ηeh
    ​ 更新权值 w h j , v i h w_{hj},v_{ih} whj,vih 与阈值 θ j , γ h \theta_j,\gamma_h θj,γh

    ​ end for

    util 达到条件

这个过程中,需要注意BP算法的目标是要最小化训练集D上的累计误差:
E = 1 m ∑ k = 1 m E k E = \frac{1}{m} \sum_{k=1}^mE_k E=m1k=1mEk
最小化并非累积误差为0,若累积误差为0,会导致过拟合现象;因此通常采用“正则化”的策略,即在误差目标函数中增加一项用于描述网络复杂度的部分,例如连接权与阈值的平方和;则误差目标函数可以改为:
E = λ 1 m ∑ k = 1 m E k + ( 1 − λ ) ∑ i w i 2 E = \lambda \frac{1}{m} \sum_{k=1}^mE_k + (1-\lambda) \sum_{i} w_i^2 E=λm1k=1mEk+(1λ)iwi2
其中 λ ∈ ( 0 , 1 ) λ ∈(0,1) λ(0,1),其作用是对经验误差与网络复杂度这两项进行折中。 由上式可知,误差E是连接权和阀值的函数,此时,神经网络可以看做一个参数寻优的过程,即在参数空间中寻找一组最优的参数使得误差最小。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值