机器上入门-基础琐碎笔记。BP神经网络。

 

神经网络理论

  BP神经网络(Back Propagation Neural
Network)
为多重合前馈神经网络用得比广泛,该神经网络先经过前向传来得估计价值,后再也使用误差进行反朝传来通过梯度下降来不断地创新权重从而赢得最小误差从中学得最好佳权重系数;从BP神经网络的名吧理解该算法的骨干吧反向传播算法,神经网络由多个神经元组成神经元结构如下:
  图片 1

  如齐图每个神经元结构由输入、权重、阈值、激活函数、输出组成;

  输入:经受上层的输出作为该神经元的输入
  权重:总是上层神经元与该神经元
  阈值:现今通常将欠阈值独立吗每层的一个偏置神经元参与权重与输入的加权和运算
  输出:输入与权重加权和连经过激活函数产生的结果,并且该出口为下层神经元的输入
  激活函数:企图也神经网络添加非线性因素,解决线性不可分问题,使神经网络能够处理还扑朔迷离的题目;
  下图为寡叠神经网络,该网的布局吧:输入层、隐含层、输出层,称为两重合神经网络是坐失去丢输入层就惟有一定量重叠,圆圈中为1的呢偏置神经元,输入层节点数据性并非神经元;神经网络可以有一个还是多只包含层,超过两独隐含层通过就可称作深度神经网络,BP神经网络通常含层不会见过两单;
图片 2

BP神经网络结构:

图片 3
图片 4
图片 5

5.

训练

  一个BP神经网络流程主要以下几单步骤:正朝着传来、反向传播、计算误差、更新权重;下面通过一个演示来说明
BP神经网络的普训练过程; 数据集:D={(x_1,y_1 ),(x_2,y_2
)},x_1∈R^2,y_1∈R^2,数据集带有2少独特性,2维输出向量;根据拖欠数据集构建了神经网络结构要下图,两重合神经网络拥有两只输入性、两独出口神经元、两独带有神经元、两个偏置神经元,总共2
x 2 x 2 = 8久权重;
BP神经网络为迭代算法,我们经过不停的反向传播迭代更新权重w,从而神经元的出口为会趁调整,直到输出层得到的价值与数据集的忠实价值误差总和最小或者上了迭代次数,此时休模型训练,这些获的权重w便是该神经网络的顶尖参数;

图片 6

标记定义:
  1、x1、x2…呢输入层属性
  2、h1、h2…乎涵盖层神经元
  3、o1、o2…啊出口层神经元
  4、输入层节点受到之数字也该输入属性值
  5、v_xh为输入层第x只节点和隐含层第h只神经元的权重
  6、w_ho为隐含层第h个神经元与输出层第o个神经元的权重
  由于使用实数运算描述会拥有复杂而于代码层面实现时会存在大气的轮回操作,所以这边会见当小地方以于量来替,下面看看加粗大写字母均为向量;如X表示为该神经网络的输入向量;

 课程被的一部分术语:

恰恰为传来

  通过从输入层、隐含层、输出层逐层计算每层神经元输出值;
图片 7

1、输入层——》隐含层
计算隐含层h1、h2神经元的输入加权和:

图片 8

神经元h1输出:

图片 9

2、隐含层——》输出层

计量输出层o1的输入加权和

图片 10
图片 11

神经元o1输出:

图片 12

这会儿邀的输出为:[0.79751046、0.83401102]

  Model representation:

反向传播

图片 13

高达一样步于正朝着传来时已经求得初步的估量价值,现在先求出O1、O2的误差、总误差:

图片 14
图片 15

1、隐含层到输出层权重更新
经过请出到底误差关于输出层权重的偏导,可以获得每个权重对总误差的熏陶,便可用以更新输出层权重;

图片 16

  从上图可以看到总误差关于权重的偏导数可以采取微积分的链式法则,可说为:总误差关于出口的偏导、输出关于加权和底偏导、加权和关于权重的偏导,三者的积;

总误差关于权重w11底偏导:

图片 17

总误差关于出口的偏导:

图片 18

出口关于加权和之偏导:

图片 19

加权和关于权重的偏导:

图片 20

总误差关于权重的偏导数:

图片 21
图片 22

同理,连接隐含层与输出层其他权重更新如下:

图片 23

2、输入层到含有层权重更新

和地方求隐含层及输出层权重的换代一样,这里也是请求总误差关于权重的偏导;

图片 24

  从上图可以看来隐含层h1神经元之出口有自输出层O1、O2神经元传来的误差;
总误差关于h1输出的偏导数=O1误差关于h1输出的偏导数+
O2s误差关于h1输出的偏导数:

图片 25

输出层O1神经元误差关于隐含层h1神经元输出的偏导:

图片 26

输出层O2神经元误差关于隐含层h1神经元输出的偏导:

图片 27

总误差关于h1输出的偏导数

图片 28

蕴含层输出关于加权和底偏导:

图片 29

加权和关于权重的偏导:

图片 30

总误差关于权重的偏导数:

图片 31

w_11权重更新(ε为学习率):

图片 32

同理输入层及分包层其他权重更新:

图片 33

参考资料:
周志华 西瓜书
https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/

章首发地址:Solinx
http://www.solinx.co/archives/1012

  其实就算是因学习及之函数的表达形式,可以为此矩阵表示。

  Vectorized implementation:

  指定是函数表达式的矢量实现。

  Feature scaling:

  指是拿特色的各个一样维都进展一个法变化,比如说都叫那个均值为0等。

  Normal equations:

  这里依的凡多元线性回归中参数解的矩阵形式,这个解方程称为normal
equations.

  Optimization objective:

  指的是急需优化的靶子函数,比如说logistic中loss
function表达式的公式推导。或者多元线性回归中包含规则性的目标函数。

  Gradient Descent、Newton’s Method:

  都是要目标函数最小值的艺术。

  Common variations:

  指的是平整项表达形式的多样性。

4.

前向污染输 (Feed-Forward前望报告)

BP网络训练开始前,对网的权重和偏置值进行初始化,权重取[-1,1]中的一个肆意数,偏置取[0,1]中间的一个随机数。神经网络的训包含多次底迭代过程,每一样不好迭代(训练)过程还用训练集的享有样本。

各个一样轮子训练就后判断训练样本的分类正确率和极致要命训练次数是否满足设定标准,如果满足则停止训练,不饱则从前朝传输进到逆向传输等。

3.

直达图被隐藏层只写了同等层,但彼层数并无界定,传统的神经网络学习经历看相同交汇就够好,而近年来之深度上观点认为以必范围外,层数越多,模型的叙述和恢复能力越来越强。

偏置结点是为描述训练多少中并未的性状,偏置结点对于生一致层的各个一个结点的权重的不同而生产不同之偏置,于是可以当偏置是各个一个结点(除输入层外)的属性。

教练一个BP神经网络,实际上就是当外头输入样本的鼓舞下连调整网络的权重和偏置这片个参数,以要网络的出口不断接近期望的输出,BP神经网络的教练过程分点儿局部:

  • 眼前为传输,逐层波浪式的传递输出值;
  • 逆向反馈,反向逐层调整权重和偏置;

 

BP神经网络层和层中的涉是通过激活函数来讲述的,激活函数相当给生物学中细胞体中之细胞核,是针对输入信号的处理单元。激活函数必须满足各方可导的法,BP中常用的激活函数是Sigmoid。

 

2.

BP神经网络训练

     
这有些应说凡是一体BP神经网络形成的引擎,驱动着样本训练过程的尽。由BP神经网络的为主型知道,反馈学习机制包括个别坏有,一凡是BP神经网络产生预测的结果,二是经预测的结果及范本的确切结果开展比对,然后针对神经细胞进行误差量的修正。因此,我们为此简单只函数来表示这样的鲜独经过,训练过程中尚针对性平均误差
e 进行监察,假定达到了设定的精度即可到位训练。由于未肯定能到预期设定的精度要求,俺们添加一个训次数的参数,如果次数高达为脱离教练

初始化BP神经网络

     
初始化主要是涉嫌个别独面的法力,一方面是对准读取的训练样本数据进行归一化处理,归一化处理就是负的就算是用数据易成0~1之间。在BP神经网络理论中,并从未指向之进行要求,不过事实上执行进程中,由一化处理是少不了的。因为理论模型没有考虑到,BP神经网络收敛的速率问题,一般的话神经元的输出对于0~1之间的数码充分敏锐,由一化能够明白增强教练效率。可以为此以下公式来对该展开归一化,其中
加个常反复A 是为防止出现 0 的情况(0非可知为分母)。

       y=(x-MinValue+A)/(MaxValue-MinValue+A)

      一头,就是针对性神经细胞的权重进行初始化了,数据由一交了(0~1)之间,那么权重初始化为(-1~1)之间的数量,另外对修正量赋值为0。实现参考代码如下:

 

有些数额的定义

   首先,我们介绍几下文中讲述的次序中的有些最主要数据的定义。

#define Data  820
#define In 2
#define Out 1
#define Neuron 45
#define TrainC 5500

      Data 用来表示既掌握的数目样本的数码,也便是训练样本的数额。In
表示对于每个样本有微微个输入变量; Out
表示于每个样本有些许只出口变量。Neuron 代表神经元的数据,TrainC
来表示训练的次数。再来咱们看对神经网络描述的数目定义,来拘禁下就张图中间的数据类型都是
double 型。

参考:

http://www.cnblogs.com/jzhlin/archive/2012/07/30/bp_c.html

1.转文:

转载自:

一如既往文将明白神经网络中之反向传播法——BackPropagation

近来在羁押深上之物,一开始看的吴恩达的UFLDL教程,有中文版即直看了,后来察觉有些地方连续不是杀醒目,又去押英文版,然后又寻找了数资料看,才意识,中文版的翻译在翻译的时候会指向简易的公式推导过程进展补,但是上的以是拂的,难怪觉得有题目。反向传播法其实是神经网络的根基了,但是多人口于模拟的时总是会碰到一些题材,或者看大篇的公式觉得仿佛特别麻烦就退了,其实不碍事,就是一个链式求导法则一再用。如果未思看公式,可以一直拿数值带进来,实际的盘算一下,体会一下斯过程之后再度来演绎公式,这样就是会认为那个轻了。

  说及神经网络,大家张这图应该不生:

图片 34

 

  这是突出的老三层神经网络的中心构成,Layer L1凡是输入层,Layer
L2凡富含层,Layer
L3凡富含层,我们现手里有雷同堆积数据{x1,x2,x3,…,xn},输出为是相同积数据{y1,y2,y3,…,yn},现在要他们当包含层举行某种变换,让您拿多少灌进去后拿走你希望的输出。如果你期望你的出口和原始输入一样,那么尽管是极致常见的自编码模型(Auto-Encoder)。可能有人会问,为什么要输入输出都平等呢?有什么用什么?其实以挺广的,在图像识别,文本分类等等都见面因此到,我会专门再写一篇Auto-Encoder底章来证实,包括一些变种之类的。如果你的出口及原有输入不一致,那么就算是蛮普遍的人工神经网络了,相当给吃初数据经过一个射来取得我们怀念使之出口数据,也就是我们今天如果摆的话题。

  本文直接推一个事例,带入数值演示反为传播法的经过,公式的推理等到下次写Auto-Encoder的下又写,其实为格外简短,感兴趣的同学可以协调演绎下试:)(注:本文假要你既明白基本的神经网络构成,如果全无晓,可以参见Poll写的记:[Mechine
Learning & Algorithm]
神经网络基础)

  假设,你生出这么一个网络层:

图片 35

  第一交汇是输入层,包含两独神经元i1,i2,和截距项b1;第二叠是含层,包含两单神经元h1,h2和截距项b2,第三层是输出o1,o2,每条线上标的wi是层及层之间总是的权重,激活函数我们默认为sigmoid函数。

  现在对她们予以上初值,如下图:

图片 36

  其中,输入数据  i1=0.05,i2=0.10;

     输出数据 o1=0.01,o2=0.99;

     初始权重  w1=0.15,w2=0.20,w3=0.25,w4=0.30;

           w5=0.40,w6=0.45,w7=0.50,w8=0.55

 

  目标:给起输入数据i1,i2(0.05及0.10),使出口尽可能和原输出o1,o2(0.01以及0.99)接近。

 

  Step 1 前于传来

  1.输入层—->隐含层:

  计算神经元h1的输入加权和:

图片 37

神经元h1的输出o1:(此处用到激活函数为sigmoid函数):

图片 38

 

 

  同理,可算出神经元h2的输出o2:

  图片 39

 

  2.隐含层—->输出层:

  计算输出层神经元o1和o2的价:

  图片 40

图片 41

 

这么前望传播之经过尽管了了,我们得输出值为[0.75136079 ,
0.772928465],与实际值[0.01 ,
0.99]去还不行远,现在我们针对误差进行反往传来,更新权值,重新计算输出。

 

Step 2 反朝传来

1.计量总误差

总误差:(square error)

图片 42

然而发生半点只出口,所以个别计算o1和o2的误差,总误差为彼此的与:

图片 43

图片 44

图片 45

 

2.隐含层—->输出层的权值更新:

坐权重参数w5为条例,如果我们想知道w5对总体误差产生了多少影响,可以据此整误差对w5求偏导求出:(链式法则)

图片 46

下的希冀可以重新直观的拘留明白误差是何等反为传来之:

图片 47

如今我们来分别计算每个式子的价:

计算图片 48

图片 49

计算图片 50

图片 51

(这同一步实际上即便是本着sigmoid函数求导,比较简单,可以友善推导一下)

 

计算图片 52

图片 53

说到底三者相乘:

图片 54

这样咱们即便计产生一体化误差E(total)对w5的偏导值。

回过头来再看上面的公式,我们发现:

图片 55

为了发挥好,用图片 56来表示输出层的误差:

图片 57

就此,整体误差E(total)对w5的偏导公式可以写成:

图片 58

如若输出层误差计为负的话,也足以形容成:

图片 59

末了咱们来更新w5的价:

图片 60

(其中,图片 61举凡习速率,这里我们赢得0.5)

同理,可更新w6,w7,w8:

图片 62

 

3.隐含层—->隐含层的权值更新:

 方法其实跟方说的差不多,但是有只地方得换一下,在上文计算总误差对w5的偏导时,是自out(o1)—->net(o1)—->w5,但是当隐含层之间的权值更新时,是out(h1)—->net(h1)—->w1,而out(h1)会接受E(o1)和E(o2)两只地方传来的误差,所以是地方两独还使算。

 

图片 63

 

计算图片 64

图片 65

先计算图片 66

图片 67

图片 68

图片 69

图片 70

同理,计算出:

          图片 71

双面相加得到总值:

图片 72

再计算图片 73

图片 74

再计算图片 75

图片 76

最终,三者相乘:

图片 77

 为了简化公式,用sigma(h1)表示隐含层单元h1的误差:

图片 78

最后,更新w1的权值:

图片 79

同理,额可更新w2,w3,w4的权值:

图片 80

 

  这样误差反为传播法就完成了,最后我们再度将创新的权值重新计算,不歇地迭代,在此例子中首先涂鸦迭代过后,总误差E(total)由0.298371109下降到0.291027924。迭代10000不成后,总误差为0.000035085,输出为[0.015912196,0.984065734](原输入为[0.01,0.99]),证明作用或对的。

 

相关文章