BP神经网络 简单介绍

BP神经网络

BP神经网络是指误差逆传播算法训练的多层前馈网络。

如下图为两层两层的BP神经网络(只有隐含层和输出层是参与计算和权值调整的节点层)。

  • 图1:两层的BP神经网络

这里写图片描述

注:本文中用到的Python及其模块安装教程参见


结构和原理

在“单细胞”的神经网络里,实际上只有一层,即最后的输出层。在上图中有两层,第一层每个节点的输入都是一样的,都是 x 1 , x 2 , x 3 … … x n x_1,x_2,x_3……x_n x1x2x3xn。每个节点的超平面都可以用 g ( v ) = w v + b g(v)=wv+b g(v)=wv+b来表示。但是,所有的节点最后输出的函数只有1或0两个状态,所以有激活函数为Logistic函数

f ( v ) = 1 1 + e − ( w T v + b ) \LARGE f(v)=\frac{1}{1+e^{-(w^Tv+b)}} f(v)=1+e(wTv+b)1

f ( v ) = 1 1 + e − ( w T v + b ) f(v)=\frac{1}{1+e^{-(w^Tv+b)}} f(v)=1+e(wTv+b)1这个函数其实是 f ( t ) = 1 1 + e − t f(t)=\frac{1}{1+e^{-t}} f(t)=1+et1 t = w T v + b t=w^Tv+b t=wTv+b这两个函数组合变量代换形成的。 t = w T v + b t=w^Tv+b t=wTv+b在之前的人工神经网络中已经介绍过。 f ( t ) = 1 1 + e − t f(t)=\frac{1}{1+e^{-t}} f(t)=1+et1的图形如下图所示。

  • 图2: f ( t ) = 1 1 + e − t f(t)=\frac{1}{1+e^{-t}} f(t)=1+et1的图形

这里写图片描述

在t大于某个值时,函数值就是1,t小于某个值时,函数值就是0。

也可以写成以下的形式:

f ( t ) = 1 1 + e − m t \LARGE f(t)=\frac{1}{1+e^{-mt}} f(t)=1+emt1

其中m是可以调整的参数,m越小曲线越平缓,m越大曲线越立陡,分类边界越明显。具体在每个应用中怎么取m的值要依情况而定,如果需要边界区分非常明显,那就把m的值设置地大一些。例如,m=10时,函数图形如下图。

  • 图3: f ( t ) = 1 1 + e − 10 t f(t)=\frac{1}{1+e^{-10t}} f(t)=1+e10t1的图形

这里写图片描述

所以对于 f ( v ) = 1 1 + e − ( w T v + b ) f(v)=\frac{1}{1+e^{-(w^Tv+b)}} f(v)=1+e(wTv+b)1函数来说,函数会根据v的输入对应产生1和0两种函数值,而这里面待定的就是w这个矩阵,这就是在网络训练中需要决定的。而每个节点都有函数 f ( v ) = 1 1 + e − ( w T v + b ) f(v)=\frac{1}{1+e^{-(w^Tv+b)}} f(v)=1+e(wTv+b)1,而且每个节点之间都可能完全不一样。从上面的两层的BP神经网络的图可以看出,前面一层的输出结果作为后面一层节点的输入,最后一层的输出是n个不同的1或0,也就是说这个神经网络最多可以标识 2 n 2^n 2n种不同的分类。


训练过程

这里希望找到一种方法可以让设置好的各个权值能够匹配尽可能多的训练样本的分类情况,和线性回归中希望残差尽量小的思路一致。使用最小二乘法,最小二乘法的思路是,如果把误差表示成样本做自变量的函数,然后用求极值的方法来推导就可以找出这个误差最小情况下的各个系数值了。

  • (一)误差计算。

隐含层节点的输入为: h i = w i h x i + b h h_i=w_{ih}x_i+b_h hi=wihxi+bh
隐含层节点的输出为: h o = f ( h i ) h_o=f(h_i) ho=f(hi)
输出层节点的输入为: y i = w h o + b o y_i=w_{ho}+b_o yi=who+bo
输出层节点的输出为: y o = f ( y i ) y_o=f(y_i) yo=f(yi)

注意,这里面的 x i , w i h , w h o , h o , y o x_i,w_{ih},w_{ho},h_o,y_o xiwihwhohoyo都是向量。

误差函数为: E i = d o i − y o i \LARGE E_i=d_{oi}-y_{oi} Ei=doiyoi

整个网络误差函数为:

E = 1 2 ∑ i = 1 n E i = 1 2 ∑ i = 1 n ( d o i − y o i ) 2 \LARGE E=\frac{1}{2}\sum_{i=1}^nE_i=\frac{1}{2}\sum_{i=1}^n(d_{oi}-y_{oi})^2 E=21i=1nEi=21i=1n(doiyoi)2

这个函数前面的系数 1 2 \frac{1}{2} 21只是为了之后求导方便,不影响函数的性质。

  • (二)反向传播。

对这个误差函数进行求导求偏微分。

输出层误差偏微分: ∂ E ∂ w h o = ∂ E y i ∂ y i ∂ w h o \LARGE \frac{∂E}{∂w_{ho}}=\frac{∂E}{y_i}\frac{∂y_i}{∂w_{ho}} whoE=yiEwhoyi

其中

∂ E ∂ y i = ∂ 1 2 ∑ i = 1 n ( d o i − y o i ) 2 1 2 ∑ i = 1 n ( d o i − y o i ) 2 y i \LARGE \frac{∂E}{∂y_i}=\frac{∂\frac{1}{2}\sum_{i=1}^n(d_{oi}-y_{oi})^2}{\frac{1}{2}\sum_{i=1}^n(d_{oi}-y_{oi})^2y_i} yiE=21i=1n(doiyoi)2yi21i=1n(doiyoi)2

= − ( d o i − y o i ) f ‘ ( y i ) = − δ o \LARGE =-(d_{oi}-y_{oi})f^`(y_i)=-δ_o =(doiyoi)f(yi)=δo

∂ y i ∂ w h o = ∂ ( w h o h o + b o ) ∂ w h o = h o \LARGE \frac{∂y_i}{∂w_{ho}}=\frac{∂(w_{ho}h_o+b_o)}{∂w_{ho}}=h_o whoyi=who(whoho+bo)=ho

那么

∂ E ∂ w h o = ∂ E y i ∂ y i ∂ w h o = − δ o h o \LARGE \frac{∂E}{∂w_{ho}}=\frac{∂E}{y_i}\frac{∂y_i}{∂w_{ho}}=-δ_oh_o whoE=yiEwhoyi=δoho

误差的梯度

δ o = − ( d o i − y o i ) f ‘ ( y i ) \LARGE δ_o=-(d_{oi}-y_{oi})f^`(y_i) δo=(doiyoi)f(yi)

隐含层误差偏微分: ∂ E ∂ w i h = ∂ E ∂ h i ∂ h i ∂ w i h \LARGE \frac{∂E}{∂w_{ih}}=\frac{∂E}{∂h_i}\frac{∂h_i}{∂w_{ih}} wihE=hiEwihhi

其中

∂ E ∂ h i = ∂ 1 2 ∑ i = 1 n ( d o i − y o i ) 2 ∂ h o ∂ h o ∂ h i \LARGE \frac{∂E}{∂h_i}=\frac{∂\frac{1}{2}\sum_{i=1}^n(d_{oi}-y_{oi})^2}{∂h_o}\frac{∂h_o}{∂h_i} hiE=ho21i=1n(doiyoi)2hiho

= ∂ 1 2 ∑ i = 1 n ( d o i − f ( y i ) ) 2 ∂ h o ∂ h o ∂ h i \LARGE =\frac{∂\frac{1}{2}\sum_{i=1}^n(d_{oi}-f(y_i))^2}{∂h_o}\frac{∂h_o}{∂h_i} =ho21i=1n(doif(yi))2hiho

= ∂ 1 2 ∑ i = 1 n ( d o i − f ( w h o h o + b o ) ) 2 ∂ h 0 ∂ h o ∂ h i \LARGE =\frac{∂\frac{1}{2}\sum_{i=1}^n(d_{oi}-f(w_{ho}h_o+b_o))^2}{∂h_0}\frac{∂h_o}{∂h_i} =h021i=1n(doif(whoho+bo))2hiho

= − ( d o i − y o i ) f ‘ ( y i ) w h o ∂ h o ∂ h i \LARGE =-(d_{oi}-y_{oi})f^`(y_i)w_{ho}\frac{∂h_o}{∂h_i} =(doiyoi)f(yi)whohiho

= − δ o w h o f ‘ ( h i ) \LARGE=-δ_ow_{ho}f^`(h_i) =δowhof(hi)

= − δ h \LARGE =-δ_h =δh

∂ h i ∂ w i h = ∂ ( w i h x i + b h ) ∂ w i h = x i \LARGE \frac{∂h_i}{∂w_{ih}}=\frac{∂(w_{ih}x_i+b_h)}{∂w_{ih}}=x_i wihhi=wih(wihxi+bh)=xi

那么

∂ E ∂ w i h = − δ h x i \LARGE \frac{∂E}{∂w_{ih}}=-δ_hx_i wihE=δhxi

误差的梯度

δ h = ( δ o w h o ) f ‘ ( h i ) \LARGE δ_h=(δ_ow_{ho})f^`(h_i) δh=(δowho)f(hi)

(三)权值更新。

隐含层更新:

w i h N + 1 = w i h N + η δ h x i \LARGE w_{ih}^{N+1}=w_{ih}^N+ηδ_hx_i wihN+1=wihN+ηδhxi

输出层更新:

w h o N + 1 = w h o N + η δ o h o \LARGE w_{ho}^{N+1}=w_{ho}^N+ηδ_oh_o whoN+1=whoN+ηδoho


过程解释

首先设置两套w作为两层网络各自的“超平面”的系数,然后输入一次完整的训练过程,就会有一个误差值出现。

接着就是一次一次地进行w的调整。调整的方法是,首先用最小二乘法的方式,找到一个误差和自变量的关系,然后求误差极值。

在最后的 w i h N + 1 = w i h N + η δ h x i w_{ih}^{N+1}=w_{ih}^N+ηδ_hx_i wihN+1=wihN+ηδhxi w h o N + 1 = w h o N + η δ o h o w_{ho}^{N+1}=w_{ho}^N+ηδ_oh_o whoN+1=whoN+ηδoho这两个公式里,用的是试探性的方法。 + η δ h x i +ηδ_hx_i +ηδhxi + η δ o h o +ηδ_oh_o +ηδoho是一种试探的“步长”,第一次分别设置了 w i h w_{ih} wih w h o w_{ho} who,如果有误差,就试着往误差小的一边“走一步”,这就是一次一次迭代的目的。最后找到一个误差满足要求的点,把这一点的 w i h w_{ih} wih w h o w_{ho} who都记录保存下来,网络就训练完毕了。这种步长试探的思路也叫梯度下降法


想了解更多关于大数据和机器学习:大数据与机器学习专栏

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值