文章目录
一.BP神经网络简介
1.发展背景
B P ( B a c k w a r d P r o p a g a t i o n ) BP(Backward Propagation) BP(BackwardPropagation)神经网络是一种按照误差逆向传播算法训练的多层前馈神经网络,是深度学习算法的基础。感知器的结构简单,只有输入层和输出层,不能解决非线性问题的,能够求解非线性问题的网络应该具有隐藏层,但是对隐藏层神经元的学习规则还没有完善。感知器的学习规则,其权值的调整取决于期望输出与实际输出之差: Δ w i = η ( t − y ) x i \Delta w_i = \eta(t-y)x_i Δwi=η(t−y)xi,但是对于各个隐藏层的节点来说,不存在已知的期望输出,因而该学习规则不能用于隐藏层的权值调整,这时候就要用到 B P BP BP 神经网络的学习规则来调整隐藏层的权值。
2.算法思想
B P BP BP 算法学习过程由信号的正向传播和误差的反向传播两个过程组成。
正向传播时,把样本的特征从输入层进行输入,信号经各个隐藏层处理后,通过逐层计算,最后从输出层传出。反向传播时,对于网络的期望输出与实际输出之间的误差,把误差从最后一层逐层反传,从而获得各个层的误差学习信号,再根据误差学习信号来修正各个层神经元的权值。
这种信号正向传播与误差反向传播,然后各个层调整权值的过程是周而复始的进行的,权值不断调整的过程也就是网络训练学习的过程。此过程直到网络输出误差减小到预先设置的阈值以下,或者是达到预先设置的最大训练次数就算学习结束。
3.BP网络模型
不同于简单的感知器结构, B P BP BP 算法是在Delta学习规则基础上进一步的推广,是对多层神经网络定义了计算流程和代价函数,然后使用梯度下降法来最小化代价函数。 B P BP BP 网络由输入层、输出层、隐藏层、组成,下面为简单神经网络示意图。
4.BP神经网络更深的意义
在一定范围内,使用更“深”的网络模型,主要由以下两点原因。
-
在神经元数量相同的情况下,深层网络结构具有更大容量,分层组合可以带来指数级的表达空间,能够组合成更多不同类型的子结构,这样可以更容易地学习和表达各种特征。
-
隐藏层增加就意味着,只要由激活函数带来的非线性变换的层数越多,网络就能构造更复杂的映射关系。
二.Delta学习规则
δ ( D e l t a ) δ (Delta) δ(Delta) 学习规则是一种利用梯度下降法来最小化代价函数的学习规则,也可以称为连续感知器学习规则,本质就是利用梯度下降法来最小化代价函数, B P BP BP 网络的训练就是采用这种规则。
假设样本的代价函数为均方差 M S E MSE MSE:
E = 1 2 ( T − Y ) 2 = 1 2 ( t − y ) 2 = 1 2 ( t − f ( W X ) ) 2 E = \frac{1}{2}(T-Y)^2 = \frac{1}{2}(t-y)^2 = \frac{1}{2}(t-f(WX))^2 E=21(T−Y)2=21(t−y)2=21(t−f(WX))2
误差 E E E 是关于 W W W 的函数,使用梯度下降法来最小化 E E E 的值,权值矩阵变化 Δ W \Delta W ΔW 等于负学习率 − η -\eta −η 乘以 E E E 对 W W W 求导:
矩 阵 形 式 : Δ W = − η E ′ = η X T ( t − y ) f ′ ( W X ) = η X T δ 矩阵形式:\Delta W = -\eta E' = \eta X^T(t-y)f'(WX) = \eta X^T \delta 矩阵形式:ΔW=−ηE′=ηXT(t−y)f′(WX)=ηXTδ
代 数 形 式 : Δ w i = − η E ′ = η x i ( t − y ) f ′ ( W X ) = η x i δ 代数形式:\Delta w_i = -\eta E' = \eta x_i(t-y)f'(WX) = \eta x_i \delta 代数形式:Δwi=−ηE′=ηxi(t−y)f′(WX)=ηxiδ
其中 δ \delta δ 表示 ( t − y ) f ′ ( W X ) (t-y)f'(WX) (t−y)f′(WX),没有特殊意义, f ′ ( W X ) f'(WX) f′(WX) 表示激活函数求导的值。
回顾一下感知器,其学习规则为 Δ w i = η ( t − y ) x i \Delta w_i = \eta (t-y)x_i Δwi=η(t−y)xi,不难发现对应的 f ′ ( W X ) = 1 f'(WX)=1 f′(WX)=1 ,是因为感知器中最常用的激活函数为 y = x y=x y=x 线性激活函数。那么对于复杂的深层次的 B P BP BP 神经网络,采取什么样的激活函数才合适呢?
三.激活函数
激活函数(Activate Function)是在神经网络的神经元上运行的函数,功能类似于生物神经元信号在轴突上进行的线性或非线性的变化,负责将神经网络神经元的输入以某种形式映射到输出端。
1.激活函数的意义
- 激活函数对模型学习、理解非常复杂和非线性的函数具有重要作用。
- 激活函数可以引入非线性因素。如果不使用激活函数,输出信号只是一个简单的线性函数,线性功能从数据中学习复杂函数映射的能力很小,如果没有激活函数,神经网络将无法学习和模拟其他复杂类型的数据,例如语音、图像、视频等。
- 激活函数可以把当前特征空间通过一定的线性映射转换到另一个空间,让数据能够更好的被分类。
2.非线性激活函数的意义
神经网络中的激活函数一般都是非线性的,主要有两个原因。
- 假设网络中全都是线性元件,那么组合之后依然是线性的,与一个单独的线性网络毫无区别,这样神经网络就无法逼近任意函数了。
- 使用非线性激活函数,可以使网络更加强大,可以学习更加复杂的事物,更加复杂的数据,可以使输入与输出之间生成非线性映射。
4.激活函数的选取
- 隐藏层:优先 R e l u Relu Relu,其次 L e a k y R e l u LeakyRelu LeakyRelu,可以 t a n h tanh tanh,不能使用 s i g m o i d sigmoid sigmoid
- 输出层:
- 二分类: s i g m o i d sigmoid sigmoid
- 多分类: s o f t m a x softmax softmax
- 回归:线性
- 其他: t a n h tanh tanh
- 遇到死神经元问题:使用 L e a k y R e l u LeakyRelu LeakyRelu
四.BP网络模型和公式推导
1.简单网络模型计算
假设现在有如下所示的一个BP网络结构:
网络的参数如下:
- X = ( x 0 , x 1 , x 2 , . . . , x n ) X=(x_0,x_1,x_2,...,x_n) X=(x0,x1,x2,...,xn):输入向量, x 0 = 1 x_0=1 x0=1 表示输入层的偏置。
- Y 1 = ( y 0 1 , y 1 1 , y 2 1 , . . . , y m 1 ) Y^1=(y_0^1,y_1^1,y_2^1,...,y_m^1) Y1=(y01,y11,y21,...,ym1):隐藏层的输出向量, y 0 1 = 1 y_0^1=1 y01=1 表示隐藏层的偏置。
- Y 2 = ( y 1 2 , y 2 2 , . . . , y l 2 ) Y^2=(y_1^2,y_2^2,...,y_l^2) Y2=(y12,y22,...,yl2):输出层的输出向量。
- T = ( t 1 , t 2 , . . . , t l ) T=(t_1,t_2,...,t_l) T=(t1,t2,...,tl):真实期望输出。
- W 1 W^1 W1:输入层到隐藏层的权重; W i j 1 W_{ij}^1 Wij1: W 1 W^1 W1矩阵中第 i i i 行第 j j j 列的权值。
- W 2 W^2 W2:隐藏层到输出层的权重; W j k 2 W_{jk}^2 Wjk2: W 2 W^2 W2矩阵中第 j j j 行第 k k k 列的权值。
- f f f:激活函数。
再定义:
- n e t 1 net^1 net1:隐藏层中权值 W 1 W^1 W1 乘以输入信号 X X X 的总和。
- n e t j 1 net_j^1 netj1:隐藏层中第 j j j 个神经元得到的输入信号 X X X 的总和。
- n e t 2 net^2 net2:输出层中权值 W 2 W^2 W2 乘以隐藏信号 Y 1 Y^1 Y1 的总和。
- n e t k 2 net_k^2 netk2:输出层中第 k k k 个神经元得到的输入信号的总和。
可以得出:
-
对于隐藏层:
- n e t j 1 = ∑ i = 0 n w i j 1 x i j = 1 , 2 , . . . , m net_j^1=\sum_{i=0}^{n}w_{ij}^1x_i \quad j=1,2,...,m netj1=∑i=0nwij1xij=1,2,...,m
- y j 1 = f ( n e t j 1 ) j = 1 , 2 , . . . , m y_j^1=f(net_j^1) \quad j=1,2,...,m yj1=f(netj1)j=1,2,...,m
-
对于输出层:
- n e t k 2 = ∑ j = 0 m w j k 2 y j 1 k = 1 , 2 , . . . , l net_k^2=\sum_{j=0}^{m}w_{jk}^2y_j^1 \quad k=1,2,...,l netk2=∑j=0mwjk2yj1k=1,2,...,l
- y k 2 = f ( n e t k 2 ) k = 1 , 2 , . . . , l y_k^2=f(net_k^2) \quad k=1,2,...,l yk2=f(netk2)k=1,2,...,l
2.算法推导
(1).当网络输出与期望输出不同时,会存在输出误差 E E E。假定单个样本的均方误差为:
E = 1 2 ( T − Y 2 ) 2 = 1 2 ∑ k = 1 l ( t k − y k 2 ) 2 ( 注 意 Y 2 和 y k 2 是 上 文 网 络 模 型 计 算 中 的 含 义 , 并 不 是 平 方 的 意 思 ) E=\frac{1}{2}(T-Y^2)^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-y_k^2)^2 \\(注意Y^2和y_k^2是上文网络模型计算中的含义,并不是平方的意思) E=21(T−Y2)2=21k=1∑l(tk−yk2)2(注意Y2和yk2是上文网络模型计算中的含义,并不是平方的意思) (2).将以上误差公式展开到隐藏层:
E = 1 2 ∑ k = 1 l ( t k − f ( n e t k 2 ) ) 2 = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 y j 1 ) ) 2 E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(net_k^2))^2=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2y_j^1))^2 E=21k=1∑l(tk−f(netk2))2=21k=1∑l(tk−f(j=0∑mwjk2yj1))2 (3).再进一步展开到输入层:
E = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 f ( n e t j 1 ) ) ) 2 = 1 2 ∑ k = 1 l ( t k − f ( ∑ j = 0 m w j k 2 f ( ∑ i = 0 n w i j 1 x i ) ) ) 2 E=\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(net_j^1)))^2=\\\frac{1}{2}\sum_{k=1}^{l}(t_k-f(\sum_{j=0}^{m}w_{jk}^2f(\sum_{i=0}^{n}w_{ij}^1x_i)))^2 E=21k=1∑l(tk−f(j=0∑mwjk2f(netj1)))2=21k=1∑l(tk−f(j=0∑mwjk2f(i=0∑nwij1xi)))2 从公式(6)可以看出,网络的误差 E E E 和 网络各层的权值 w i j 1 , w i j 2 w_{ij}^1,w_{ij}^2 wij1,wij2 相关,因此调整各层的权值就可以改变误差的值。调整的目的是得到较小的误差 E E E,所以可以采用梯度下降法来进行调整,根据梯度下降法可以得到: Δ w i j 1 = − η ∂ E ∂ w i j 1 i = 0 , 1 , . . . , n ; j = 1 , 2 , . . . , m \Delta w_{ij}^1=-\eta\frac{\partial E}{\partial w_{ij}^1}\\i=0,1,...,n;j=1,2,...,m Δwij1=−η∂wij1∂Ei=0,1,...,n;j=1,2,...,m Δ w j k 2 = − η ∂ E ∂ w j k 2 j = 0 , 1 , . . . , m ; k = 1 , 2 , . . . , l \Delta w_{jk}^2=-\eta\frac{\partial E}{\partial w_{jk}^2}\\j=0,1,...,m;k=1,2,...,l Δwjk2=−η∂w