BP算法学习笔记
1 学习基础–神经网络的基本原理和前向过程
如下图所示,这是一个简单的神经网络模型的图示。标示为 a n a_n an的是我们神经网络的第一层,叫做输入层。标示为 z n z_n zn和 h n h_n hn的合在一起构成了我们图示模型第二层,即隐藏层。最后 z n z_n zn和 o u t n out_n outn构成了最后一层叫做输出层。
实际上使用的模型中隐藏层的层数可能不止一层。
符号意义和基本计算步骤
现在我们先明确一下图中参数的意义: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) z11=a1∗w1,11+a2∗w2,11+a3∗w3,11+b11z21=a1∗w1,21+a2∗w2,21+a3∗w3,21+b21h11=g(z11)h21=g(z21)z12=h11∗w1,12+h21∗w1,22+b12z22=h11∗w2,12+h21∗w2,22+b22out1=g(z12)out1=g(z22)
其中 g ( x ) 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} f(x)={
x0ififx>0x⩽0
现在通过这个网络设置一组合理的偏置和权重就能使用这个网络帮我们做出决定。最长用到的比如我们有一组手写数组的照片,我们可以设定一组合适的值来判断这个数字是多少。这个就是新手入门必学的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 L=21i∑(outi−targeti)2
target 表示已知的真确结果。
2.3偏导数和梯度
现在我们再看误差函数 L ,此时我们将此函数的w(权值)和 b (偏置)作为变量(其他值都是系数)。则我们有构成函数:
L = f ( W , B ) L=f(W,B) L=f(W,B)
依照上图给出的示例,此时有一个由10个权值和4个偏置作为变量构成的函数。现在来明确一下梯度的概念:对于二位函数 f ( x , y ) f(x,y) f(x,y) 他的梯度表示为 ∇ = ( ∂ f ∂ x , ∂ f ∂ y ) \nabla = (\frac {∂f}{∂x}, \frac {∂f}{∂y}) ∇=(∂x∂f,∂y∂f) ,而我们都知道,沿着梯度方向函数值下降速度最快。关于导数,偏导数,梯度的具体分析见未完成。那么对于误差函数,我们自然是希望它的函数值为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}}) ∇=(∂w1,11∂L,∂w2,11∂L,∂w3,11∂L,∂w1,21∂L,∂w2,21∂L,∂w3,21∂L,∂w1,12∂L,∂w2,12∂L,∂w1,22∂L,∂w2,22∂L,∂b11∂L,∂b21∂L,∂b12∂L,∂b22∂L)
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}} ∂w1,12∂L,∂w2,12∂L,∂w1,22∂L,∂w2,22∂L,∂b12∂L,∂b22∂L ,我们依次计算这些值。
∂ 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}} ∂w1,12∂L=∂out1∂L×∂z12∂out1×∂w1,12∂z12∂w1,22∂L=∂out2∂L×∂z22∂out2×∂w1,22∂z22∂w2,12∂L=∂out1∂L×∂z12∂out1×∂w2,12∂z12∂w2,22∂L=∂out2∂L×∂z22