[深度学习]-从实例来看神经网络BP算法的优化思路

本文详细介绍了神经网络的基本构成,包括神经元模型和常用激活函数。重点阐述了BP算法的传播流程,通过实例演示了前向传播和误差反向传播的过程,以及如何利用梯度下降法更新权重,优化网络输出。讨论了隐藏层节点选择策略和权重更新的计算方法。
摘要由CSDN通过智能技术生成

复习一下BP
主要整理了两篇博客,通过一个实际的例子来讲解优化思路,很方便理解BP算法的传播流程。两篇博客见文章末尾

1.什么是神经网络

神经网络又称为人工神经网络(Artificial Neural Network , ANN),是指一系列受生物学和神经科学启发,而构造的数学模型。下图便是一个简单的神经元模型

在这里插入图片描述
神经元是形成神经网络的基本单元,如上图示,激活函数决定了该神经元是否有输出值,所以激活函数在此数学模型中至关重要。因其位置的特殊性,需要有以下特点:

  • 连续可导
  • 函数及其导数尽可能简单,可提高网络计算效率
  • 值域要在合适的区间内。

综上,目前常使用的激活函数有如下几个:Sigmoid函数,ReLU函数,Swish函数,GELU函数,Maxout单元等。

神经元结构,只是神经网络的基础单元。而神经网络的组建则需要许多神经元进行协同传输。常用的网络结构有如下三种:前馈网络,记忆网络,和图网络。
在这里插入图片描述


2.神经元传播原理

在这里插入图片描述

 输入数据:  i 1 = 0.05 , i 2 = 0.10  输出数据(对图像来说可以理解我们给的label):o  1 = 0.01 , o 2 = 0.99  初始权重:  w 1 = 0.15 , w 2 = 0.20 , w 3 = 0.25 , w 4 = 0.30 , w 5 = 0.40 , w 6 = 0.45 , w 7 = 0.50 , w 8 = 0.55 \begin{aligned}&\text { 输入数据: } i_{1}=0.05, i_{2}=0.10\\&\text { 输出数据(对图像来说可以理解我们给的label):o }_{1}=0.01, o_{2}=0.99\\&\text { 初始权重: } w_{1}=0.15, w_{2}=0.20, w_{3}=0.25, w_{4}=0.30, w_{5}=0.40, w_{6}=0.45, w_{7}=0.50, w_{8}=0.55\end{aligned}  输入数据: i1=0.05,i2=0.10 输出数据(对图像来说可以理解我们给的label)1=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

那么向前传播的路径为:输入层,隐藏层,输出层。以此顺序计算每个神经元的加权和,直到输出。
n e t h 1 = w 1 ∗ i 1 + w 2 ∗ i 2 + b 1 ∗ 1  net  h 1 = 0.15 ∗ 0.05 + 0.2 ∗ 0.1 + 0.35 ∗ 1 = 0.3775 \begin{array}{c}n e t_{h 1}=w_{1} * i_{1}+w_{2} * i_{2}+b_{1} * 1 \\\text { net }_{h 1}=0.15 * 0.05+0.2 * 0.1+0.35 * 1=0.3775\end{array} neth1=w1i1+w2i2+b11 net h1=0.150.05+0.20.1+0.351=0.3775

此时,神经元 h 1 h_{1} h1开始通过激活函数处理数据 ,并进行输出。我们这里用sigmoid函数。
 out  h 1 = 1 1 + e − n e t h 1 = 1 1 + e − 0.3775 = 0.593269992 \text { out }_{h 1}=\frac{1}{1+e^{-n e t_{h 1}}}=\frac{1}{1+e^{-0.3775}}=0.593269992  out h1=1+eneth11=1+e0.37751=0.593269992

同理,神经元 h 2 h_2 h2的输出 o u t h 2 out_{h2} outh2​ 也可以计算出来。 o u t h 2 = 0.596884378 out_{h2} = 0.596884378 outh2=0.596884378

下面是从隐藏层到输出层 ,与上面计算类似,也是各个值乘以权重,计算得到。

 net  o 1 = w 5 ∗  out  h 1 + w 6 ∗  out  h 2 + b 2 ∗ 1 = 1.105905967  out  o 1 = 1 1 + e − n e t o 1 = 0.75136507 \begin{array}{c}\text { net }_{o 1}=w_{5} * \text { out }_{h 1}+w_{6} * \text { out }_{h 2}+b_{2} * 1=1.105905967 \\\text { out }_{o 1}=\frac{1}{1+e^{-n e t_{o 1}}}=0.75136507\end{array}  net o1=w5 out h1+w6 out h2+b21=1.105905967 out o1=1+eneto11=0.75136507

同理,可以计算出 o u t o 2 = 0.772928465 out_{o2} = 0.772928465 outo2=0.772928465

到这一步,我们的前向传播结束了,我们得到了输出值 [0.75136507,0.772928465]

然而这与实际值[0.01,0.99]相差甚远,所以就需要重新想办法更新权值,重新计算输出。(所以神经网络的训练过程,也就是在不断更新权值的过程)


3.如何更新权值

这时我们就用到了BP(Error Back Propagation Training 误差反向传播)算法,从本质上讲,BP算法就是以网络误差平方为目标函数、采用梯度下降法来计算目标函数的最小值。

步骤如下:

3.1、计算总误差:

E total  = ∑ 1 2 (  target  −  output  ) 2 E_{\text {total }}=\sum \frac{1}{2}(\text { target }-\text { output })^{2} Etotal =21( target  output )2
因为有两个输出,所以需要计算一下 o u t o 1 out_{o1} outo1 , o u t o 2 out_{o2} outo2这两个输出的误差和。
E o 1 = 1 2 ( target ⁡ 01 −  out  o 1 ) 2 = 1 2 ( 0.01 − 0.75136507 ) 2 = 0.274811083 E o 2 = 0.023560026 E total  = E o 1 + E o 2 = 0.274811083 + 0.023560026 = 0.298371109 \begin{array}{c}E_{o 1}=\frac{1}{2}\left(\operatorname{target}_{01}-\text { out }_{o 1}\right)^{2}=\frac{1}{2}(0.01-0.75136507)^{2}=0.274811083 \\E_{o 2}=0.023560026 \\E_{\text {total }}=E_{o 1}+E_{o 2}=0.274811083+0.023560026=0.298371109\end{array} Eo1=21(target01 out o1)2=21(0.010.75136507)2=0.274811083Eo2=0.023560026Etotal =Eo1+Eo2=0.274811083+0.023560026=0.298371109

3.2、误差出来了,那么权重对误差到底产生了多少影响呢?这个时候就需要权重对误差求导了。以权重 w 5 w_5 w5为例:

在这里插入图片描述
配合下图理解为什么这样写链式求导
在这里插入图片描述

3.3、下面分别对各个因子求导

计算 φ E total  φ  out  o 1 \frac{\varphi E_{\text {total }}}{\varphi \text { out }_{o 1}} φ out o1φEtotal :

在这里插入图片描述
计算 φ  out  o 1 φ  net  o 1 \frac{\varphi \text { out }_ {{o1 }}}{\varphi \text { net }_{o1}} φ net o1φ out o1:
在这里插入图片描述
计算 φ  net  o 1 φ  w  5 \frac{\varphi \text { net }_ {{o1 }}}{\varphi \text { w }_{5}} φ w 5φ net o1:
在这里插入图片描述
上面三个计算结果相乘:

\cfrac{\varphi E_{total}}{\varphi w_5} = 0.74136507 0.1868156020.593269992

在这里插入图片描述
样我们就计算出来整体误差相对于其中一个权重偏导数了,这里面仍需要灌输一个概念:数学只是一个度量,只是表示某种相关关系或者程度的一个度量,其实公式并没有什么实际意义。其所有意义只是人为赋予的某种规律下的总结。

我们设学习速率为 0.5 ,则有新的值

在这里插入图片描述
同理,使用同样的方式,可以更新其他权重值。

然后把新的权重值带入,重新计算,用这种方法不断迭代。直到得出满意权重。


4.输入层---->隐含层的权值更新:

方法其实与上面说的差不多,但是有个地方需要变一下,在上文计算总误差对w5的偏导时,是从out(o1)---->net(o1)---->w5,但是在隐含层之间的权值更新时,是out(h1)---->net(h1)---->w1,而out(h1)会接受E(o1)和E(o2)两个地方传来的误差,所以这个地方两个都要计算。

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


5.如何确定中间层的隐藏节点个数?

在BP神经网络中,输入层和输出层的节点个数都是确定的,而隐含层节点个数不确定,那么应该设置为多少才合适呢?实际上,隐含层节点个数的多少对神经网络的性能是有影响的,有一个经验公式可以确定隐含层节点数目,如下:

h = m + n + a h=\sqrt{m+n}+a h=m+n +a

其中,h 位隐含层节点数,m 为输入层节点数目,n为输出层节点数目。a为1~10之间的调节常数。

以上便是神经网络的反向传播原理。

6.参考

1.神经网络BP算法
2.神经网络的基础理解以及反向传播优化原理(BP神经网络)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值