背景

前段时间,用过一些模型如vgg,lexnet,用于做监督学习训练,顺带深入的学习了一下相关模型的结构&原理,对于它的反向传播算法记忆比较深刻,

就自己的理解来描述一下BP网络.

关于BP网络的整体简述

BP神经网络,全程为前馈神经网络,它被用到监督学习中的主体思想是(我们假定我们这里各个层Layer次间采用的是全链接): 通过各个Layer层的激励和权值以及偏置的处理向前传递,最终得到一个预期的值,然后通过标签值和预期的值得到一个残差值,残差值的大小反映了预期值和残差值的偏离程度,然后使用反向传播算法(见下文),然后对上一层的推倒公式进行梯度(就是对应每一个变量x1,x2,x3,x4,x5,.....,xn求解偏导,见下文)求解,然后代入各个变量x,得到各个变量x 当前层Layer对应的权值w'(这个w'其实就是当前w偏离真实的w的残差值),然后依次的向上一层反向传播,最终到达Input层,这时候我们会就会得到各个层Layer相对应的权值w的偏离值,然后我们可以设定一个学习率(在caffe中是用l_r表示的),也就是步长,来设置我们参数更新的大小其实就是各个层layer当前的权值w加上对应的w的偏离值乘上这个步长即 w+=w‘*l_r,这样就达到了参数的更新,然后通过数次迭代调整好w,b参数,特别需要强调一下的是,b可以是固定的,也可以设置成跟w权值相关的,比如b=w/2 等等,视情况而定。

以上就是就是BP网络的大致的描述了,那么我们开始到BP网络的每一个细节,进行说明吧.~


关于梯度

对于梯度,我们这里就从这几个角度进行一下解释,什么是梯度,梯度在BP网络中的作用,或者说为什么BP网络中要采用梯度.

1.1什么是梯度?

梯度,即求偏导,比如我们有这样一个函数,f = 2a +3b  ,如果我们求解a的梯度,fa = 2,如果我们求解b的梯度,f_b = 3

以上就是对梯度最简单的描述,那个也是只有一层神经网络时的参数求解,但是在实际的网络模型中,我们基本上不会用那么简单的模型,我们一般用层数较多(大于2层的模型进行)的模型来解决我们所面临的问题,对于多层神经网络

             

如图,这是一个三层的神经网络

我们一般将其等化成数学中的复合函数,比如上图中这个三层的(全链接的)神经网络,其实用复合函数的公式表示就是这样:

对于第一层

f1 = x1*w1_11 + x2*w1_12 +b1_1

f2 = x1*w1_21 + x2*w1_22 +b1_2

f3 = x1*w1_31 + x2*w1_32 +b1_3

然后进入到第二层

f4 = f1*w2_11 + f2*w2_12 + f3*w2_13 + b2_1

f5 = f1*w2_21 + f2*w2_22 + f3*w2_23 + b2_2

然后第三层

            f6 = f4*w3_11 + f5*w3_12 + b3_1

这个其实就和 f = (1-x^2)^3 改写成 g =x^2 , t = 1-x , f = x^3 是一个道理

第一层: g = x^2

第二层: t =1-g

第三层:  f = t^3

我们对于这种复合函数求解梯度的步骤,如下:

f' = 3t^2*t' 对t求偏导数

t' = -g'       对g求偏导数

g' = 2x      对x求偏导数

这就是求解梯度的过程.

    以上就是对于梯度的一个描述

1.2 那么梯度在BP网路中起到何种作用?

梯度在求解的过程中,其实就是对逐个变量进行求导,比如f =a(bx),我们将其改成复合函数f=2g ,g = bx ,对x进行求导,那么我们会得到变量的系数. 而我们所做的这一切就是为了得到这个,得到每一层Layer的各个变量对应的系数,这个系数非常重要,我们来举个例子说明一下,比如这个函数,f = a(bx),假设我们刚开始的时候随机的设定一个值给a = 0.23 , b=1 ,x去一系列值[1,2,3],我们都事先知道f的值对应[0.5,1,1.5],假定我们无法直接计算得到a的值为0.5,我们来一步步的估算a的,步骤如下:

不妨假定函数的真实值用ft表示,预估值用fp表示,残差用fre.

当  x = 1 , ft = 0.5

而我们用公式得到fp =0.23 ,fre =  ft - fp =0.26,然后得到: are = 0.26*a,注 are为a的偏差值

,得到bre = b*are=1*0.26*a

然后我们再求解b的更新值 b_n = b + l_r*bre*b(g求关于x的梯度)*1 (l_r为我们设定的学习率)

再更新 a_n = a + l_r*are*ab(f求关于x梯度的值)*1

这样 我们就对参数a,b进行了更新.

然后当x =2 ,ft=1 .....依次这样迭代更新 a,b

我们就是通过这种方式来进行参数更新的....

2 关于梯度的反向传播.

反向传播就是将残差反推到各个参数上,求解各个参数的误差值,最后在每一个变量的梯度的方向上对误差进行修正,修正的幅度依据学习率而定.

参考文献:

1.   http://galaxy.agh.edu.pl/~vlsi/AI/backp_t_en/backprop.html

关于BP网络的一些总结的更多相关文章

  1. 基于Levenberg-Marquardt训练算法的BP网络Python实现

    经过一个多月的努力,终于完成了BP网络,参考的资料为: 1.Training feed-forward networks with the Marquardt algorithm 2.The Leve ...

  2. 从头推导与实现 BP 网络

    从头推导与实现 BP 网络 回归模型 目标 学习 \(y = 2x\) 模型 单隐层.单节点的 BP 神经网络 策略 Mean Square Error 均方误差 \[ MSE = \frac{1}{ ...

  3. 我对BP网络的简单的理解

    最近在学习tf的神经网络算法,十多年没有学习过数学了,本来高中数学的基础,已经彻底还给数学老师了.所以我把各种函数.公式和推导当做黑盒子来用,理解他们能做到什么效果,至于他们是如何做到的,暂时不去深究 ...

  4. 基于Opencv自带BP网络的车标简易识别

    代码地址如下:http://www.demodashi.com/demo/12966.html 记得把这几点描述好咯:代码实现过程 + 项目文件结构截图 + 演示效果 1.准备工作 1.1 训练集和测 ...

  5. BP网络中的反向传播

    本文的主要参考:How the backpropagation algorithm works 下面是BP网络的参数结构示意图 首先定义第l层网络第j个神经元的输出(activation) 为了表示简 ...

  6. BP网络简单实现

    目录 BP算法的简单实现 Linear 全连接层 ReLu MSELoss 交叉熵损失函数 BP算法的简单实现 """ BPnet 简易实现 约定输入数据维度为(N, i ...

  7. Matlab实现BP网络识别字母

    训练样本空间   每个样本使用5×5的二值矩阵表征一个字母.一共10个字母类型,分别是N,I,L,H,T,C,E,F,Z,V.每个字母9个样本.共90个. N1=[1,0,0,0,1; 1,0,0,0 ...

  8. MATLAB——BP网络的设计

  9. bp网络全解读

    https://blog.csdn.net/weixin_40432828/article/details/82192709

随机推荐

  1. chrome + vi

    vimer们福利,一款能在chrome上面使用vim快捷键的插件 http://myhozz.com/2014/10/25/use-vim-in-chrome/

  2. js仿微信语音播放

    html结构如下: <div class="app-voice-you" voiceSrc="xx.mp3"> <img class=&quo ...

  3. 通过GCC编译器编译c语言

    GCC编译C源代码的四个步骤 GCC编译C源代码有四个步骤:预处理---->编译---->汇编---->链接. 可以利用GCC的参数来控制执行的过程,这样就可以更深入的了解编译C程序 ...

  4. android应用刷新系统多媒体库(增加or删除多媒体文件)

    系统:android4.4及其以上 功能:app中拍照, 并实现浏览.删除照片操作. 实现: 1.拍照,存储到指定路径path 2.通知系统多媒体数据库刷新数据. 主要使用MediaScannerCo ...

  5. Android动态方式破解apk前奏篇(Eclipse动态调试smail源码)

    一.前言 今天我们开始apk破解的另外一种方式:动态代码调试破解,之前其实已经在一篇文章中说到如何破解apk了: Android中使用静态方式破解Apk  主要采用的是静态方式,步骤也很简单,首先使用 ...

  6. 面对对象之@classmethod、@staticmethod用法

    @classmethod用法(修饰的函数,第一个参数cls默认是类名,调用方法:实例对象或类对象.方法) class C_mthod(object): name = "f**k" ...

  7. [转]RAID基础,RAID10与RAID01比较,RAID10与RAID5比较

    原文:http://blog.itpub.net/787018/viewspace-666280/ 文档内容3部分:1.基本的RAID级别介绍2.RAID10和RAID01的比较3.RAID10和RA ...

  8. linux开启telnet

    windows客户端如果通过cmd窗口连接到远程linux服务器,可以使用telnet: centos系统默认telnet 23端口是关闭的. 服务器本地使用nmap ip地址 -p 23 查看tel ...

  9. SharePoint常用目录介绍

    SharePoint常用目录介绍 stsadm命令管理程序目录:C:\Program Files\Common Files\Microsoft Shared\web server extensions ...

  10. ionic 中$ionicView.beforeEnter 事件的一个bug

    我在使用ionic写app的时候,需要使用$IonicView.beforeEnter事件,在页面进入前做一些事情,但是发现,它不起作用,很蛋疼,后来,看了别人做的app例子,也涉及到这个$Ionic ...