机器上入门-基础琐碎笔记。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]),证明作用或对的。

 

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图