神经网络-误差反向传播算法 BP算法

BP算法学习笔记

1 学习基础–神经网络的基本原理和前向过程

​ 如下图所示,这时一个简单的神经网络模型,通过这样一个模型我们就可以完成一些工作。例如我们输入三个数据,a1表示一个公司的银行存款,a2表示所拥有的固定资产估值,a3表示这个人最近一个月的利润,out1表示这是状态良好,out2表示它状态不好。现在我们要通过这个网络来判断,我们是否给这个公司发放贷款。

在这里插入图片描述
​ 现在我们先明确一下图中参数的意义:w表示权重,b表示偏置,下面是基本计算步骤。
z 1 1 = a 1 w 1 , 1 1 + a 2 w 2 , 1 1 + a 3 w 3 , 1 1 + b 1 1 z 2 1 = a 1 w 1 , 2 1 + a 2 w 2 , 2 1 + a 3 w 3 , 2 1 + b 2 1 h 1 1 = g ( z 1 1 ) h 2 1 = g ( z 2 1 ) z 1 2 = h 1 1 w 1 , 1 2 + h 2 1 w 1 , 2 2 + b 1 2 z 2 2 = h 1 1 w 2 , 1 2 + h 2 1 w 2 , 2 2 + b 2 2 o u t 1 = g ( z 1 2 ) o u t 1 = g ( z 2 2 ) z^1_1=a_1*w^1_{1,1}+a_2*w^1_{2,1}+a3*w^1_{3,1} +b^1_1 \\ z^1_2=a_1*w^1_{1,2}+a_2*w^1_{2,2}+a3*w^1_{3,2} +b^1_2 \\ h^1_1 = g(z^1_1) \\ h^1_2 = g(z^1_2) \\ z^2_1=h^1_1*w^2_{1,1}+h^1_2*w^2_{1,2}+b^2_1 \\ z^2_2=h^1_1*w^2_{2,1}+h^1_2*w^2_{2,2}+b^2_2 \\ out_1 = g(z^2_1) \\ out_1 = g(z^2_2)
​ 其中 g ( x ) g(x) 是激活函数,激活函数有多种可以选择,其数学意义是使我们的网络从线性网络到非线性网络,因为多数问题都是非线性的,至于详细原因分析见:未完成,在MINST数据集判断在我们使用ReLU函数作为激活函数。
f ( x ) = { x i f x > 0 0 i f x 0 f(x) = \begin{cases} x & if & x >0 \\ 0 & if & x \leqslant 0 \end{cases}
​ 现在通过这个网络设置一组合理的偏置和权重就能使用这个网络帮我们做出决定。最长用到的比如我们有一组手写数组的照片,我们可以设定一组合适的值来判断这个数字是多少。这个就是新手入门必学的MINST手写数据集判断了。在下一篇中会用Python和这个数据集来实现。

​ 那我们的问题就是找到这样一组合适的数据。这个方法就是BP算法了(Error Back Propagation 误差反向传播算法)

2反向传播的基本原理

​ 反向传播中主要用到两个原理,链式求导法则和偏导数。

2.1概述

​ 反向传播算法的全称是误差反向传播算法,其本质通过总的误差函数对每一个权重和偏置求偏导数,再通过偏导数更新权值和偏置,多次重复此步骤以找到最佳的偏置和权重值。(其原理是偏导数反应了某个函数值对整体的影响程度,同时两个偏导数刚好构成我们误差函数的梯度,而沿梯度方向函数最容易找到最小值,误差函数的最小值可不就是误差最小了吗,误差最小不就是我们找到最佳的一组权值和偏置了吗)

2.2误差函数

​ 误差函数也是有多种可以选择的,至于详细分析见:未完成 。在MINST数据集判断在我们使用均方误差函数作为误差函数。其形式如下:
L = 1 2 i ( o u t i t a r g e t i ) 2 L=\frac 1 2 \sum_i (out_i - target_i)^2
​ target 表示已知的真确结果。

2.3偏导数和梯度

​ 现在我们再看误差函数 L ,此时我们将此函数的w(权值)和 b (偏置)作为变量(其他值都是系数)。则我们有构成函数:
L = f ( W , B ) L=f(W,B)
​ 依照上图给出的示例,此时有一个由10个权值和4个偏置作为变量构成的函数。现在来明确一下梯度的概念:对于二位函数 f ( x , y ) f(x,y) 他的梯度表示为 = ( f x , f y ) \nabla = (\frac {∂f}{∂x}, \frac {∂f}{∂y}) ,而我们都知道,沿着梯度方向函数值下降速度最快。关于导数,偏导数,梯度的具体分析见未完成。那么对于误差函数,我们自然是希望它的函数值为0最好了,所以我们就要求误差函数的梯度,然后沿着梯度方向更新变量取值(即选择权值和偏置的值)。则误差函数的梯度为:
= ( L w 1 , 1 1 , L w 2 , 1 1 , L w 3 , 1 1 , L w 1 , 2 1 , L w 2 , 2 1 , L w 3 , 2 1 , L w 1 , 1 2 , L w 2 , 1 2 , L w 1 , 2 2 , L w 2 , 2 2 , L b 1 1 , L b 2 1 , L b 1 2 , L b 2 2 ) \nabla=(\frac {∂L}{∂w^1_{1,1}},\frac {∂L}{∂w^1_{2,1}},\frac {∂L}{∂w^1_{3,1}},\frac {∂L}{∂w^1_{1,2}},\frac {∂L}{∂w^1_{2,2}},\frac {∂L}{∂w^1_{3,2}},\frac {∂L}{∂w^2_{1,1}},\frac {∂L}{∂w^2_{2,1}},\frac {∂L}{∂w^2_{1,2}},\frac {∂L}{∂w^2_{2,2}},\frac {∂L}{∂b^1_{1}},\frac {∂L}{∂b^1_{2}},\frac {∂L}{∂b^2_{1}},\frac {∂L}{∂b^2_{2}})

2.4 BP算法

​ 现在我们学习BP算法的前置知识都具备了,我们开始推到整个过程。

2.4.1 输出层推导

​ 输出层需要计算的偏导 L w 1 , 1 2 , L w 2 , 1 2 , L w 1 , 2 2 , L w 2 , 2 2 , L b 1 2 , L b 2 2 \frac {∂L}{∂w^2_{1,1}},\frac {∂L}{∂w^2_{2,1}},\frac {∂L}{∂w^2_{1,2}},\frac {∂L}{∂w^2_{2,2}},\frac {∂L}{∂b^2_{1}},\frac {∂L}{∂b^2_{2}} ,我们依次计算这些值。
L w 1 , 1 2 = L o u t 1 × o u t 1 z 1 2 × z 1 2 w 1 , 1 2 L w 1 , 2 2 = L o u t 2 × o u t 2 z 2 2 × z 2 2 w 1 , 2 2 L w 2 , 1 2 = L o u t 1 × o u t 1 z 1 2 × z 1 2 w 2 , 1 2 L w 2 , 2 2 = L o u t 2 × o u t 2 z 2 2 × z 2 2 w 2 , 2 2 L b 1 2 = L o u t 2 × o u t 2 z 1 2 × z 1 2 b 1 2 L b 2 2 = L o u t 2 × o u t 2 z 2 2 × z 2 2 b 2 2 \frac {∂L}{∂w^2_{1,1}}=\frac {∂L}{∂out_1} \times \frac {∂out_1}{∂z^2_1}\times \frac {∂z^2_1}{∂w^2_{1,1}}\\\frac {∂L}{∂w^2_{1,2}}=\frac {∂L}{∂out_2} \times \frac {∂out_2}{∂z^2_2}\times \frac {∂z^2_2}{∂w^2_{1,2}}\\\frac {∂L}{∂w^2_{2,1}}=\frac {∂L}{∂out_1} \times \frac {∂out_1}{∂z^2_1}\times \frac {∂z^2_1}{∂w^2_{2,1}}\\\frac {∂L}{∂w^2_{2,2}}=\frac {∂L}{∂out_2} \times \frac {∂out_2}{∂z^2_2}\times \frac {∂z^2_2}{∂w^2_{2,2}}\\\frac {∂L}{∂b^2_{1}}=\frac {∂L}{∂out_2} \times \frac {∂out_2}{∂z^2_1}\times \frac {∂z^2_1}{∂b^2_{1}}\\\frac {∂L}{∂b^2_{2}}=\frac {∂L}{∂out_2} \times \frac {∂out_2}{∂z^2_2}\times \frac {∂z^2_2}{∂b^2_{2}}
​ 将这些公式总结到一起表示如下
L w m , n L = L o u t n × o u t n z n L × z n L w m , n L = L o u t n × o u t n z n L × h m L L b n L = L o u t n × o u t n z n L × z n L b n L = L o u t n × o u t n z n L \frac {∂L}{∂w^L_{m,n}}= \frac {∂L}{∂out_n} \times \frac {∂out_n}{∂z^L_n} \times \frac {∂z^L_n}{∂w^L_{m,n}} =\colorbox{aqua}{$ \frac {∂L}{∂out_n} \times \frac {∂out_n}{∂z^L_n} $} \times h^L_m \\ \frac {∂L}{∂b^L_{n}}= \frac {∂L}{∂out_n} \times \frac {∂out_n}{∂z^L_n} \times \frac {∂z^L_n}{∂b^L_{n}} \quad=\quad \colorbox{aqua}{$ \frac {∂L}{∂out_n} \times \frac {∂out_n}{∂z^L_n} $} \qquad
​ 令 δ n L = L o u t n × o u t n z n L \delta^L_n = \frac {∂L}{∂out_n} \times \frac {∂out_n}{∂z^L_n} 则上式化简为:
L w m , n L = δ n L × h m L (式1-1) \tag{式1-1} \frac {∂L}{∂w^L_{m,n}}=\delta^L_n \times h^L_m

L b n L = δ n L (式1-2) \tag{式1-2}\frac {∂L}{∂b^L_{n}}=\delta^L_n \qquad\qquad

2.4.2 隐藏层推导

​ 隐藏层需要计算 L w 1 , 1 1 , L w 2 , 1 1 , L w 3 , 1 1 , L w 1 , 2 1 , L w 2 , 2 1 , L w 3 , 2 1 , L b 1 1 , L b 2 1 \frac {∂L}{∂w^1_{1,1}},\frac {∂L}{∂w^1_{2,1}},\frac {∂L}{∂w^1_{3,1}},\frac {∂L}{∂w^1_{1,2}},\frac {∂L}{∂w^1_{2,2}},\frac {∂L}{∂w^1_{3,2}},\frac {∂L}{∂b^1_{1}},\frac {∂L}{∂b^1_{2}} ,依次计算如下:
L w 1 , 1 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 1 , 1 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 1 , 1 1 L w 2 , 1 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 2 , 1 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 2 , 1 1 L w 3 , 1 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 3 , 1 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 3 , 1 1 L w 1 , 2 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 1 , 2 1 + L o u t <∂ w 3 , 1 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 1 1 × h 1 1 z 1 1 × z 1 1 w 3 , 1 1 L w 1 , 2 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 1 , 2 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 1 , 2 1 L w 2 , 2 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 2 , 2 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 2 , 2 1 L w 3 , 2 1 = L o u t 1 × o u t 1 z 1 2 × z 1 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 3 , 2 1 + L o u t 2 × o u t 2 z 2 2 × z 2 2 h 2 1 × h 2 1 z 2 1 × z 2 1 w 3 , 2 1 L b 1 1 = L