上篇文章介绍了多层前馈神经网络,那么这种网络是怎样训练生成的呢,BP算法就是其中一种生成多层神经网络的算法 ,又称为反向传播算法,下面来了解一下BP算法。
举例:
下图中是根据一个手写数字辨识的神经网络简单结构,假设输入是一个图片,将图片读入转变成一个多维向量,即左边的多个输入值,根据多层神经网络,计算权重,并不断调整权值,使其更精确,最终通过 s o f t m a x softmax softmax函数一作用,将神经元值就映射成为(0,1)的值,而这些值的累和为1(满足概率的性质),那么我们就可以将它理解成概率,在最后选取输出结点的时候,我们就可以选取概率最大(也就是值对应最大的)结点,转变成十个数字类别中的一个输出(分类问题,比较是哪一个数字的概率最大)。(在神经网络中经常用到 s o f t m a x softmax softmax函数。)

首先了解一下数学中的链式求导法则,后续将会用到:
y = g ( x ) z = h ( y ) Δ x → Δ y → Δ z d z d x = d z d y d y d x y=g(x) \quad z=h(y)\\ \quad \Delta x \rightarrow \Delta y \rightarrow \Delta z \quad \frac{d z}{d x}=\frac{d z}{d y} \frac{d y}{d x} y=g(x)z=h(y)Δx→Δy→Δzdxdz​=dydz​dxdy​

x = g ( s ) y = h ( s ) z = k ( x , y ) d z d s = ∂ z ∂ x d x d s + ∂ z ∂ y d y d s x=g(s) \quad y=h(s) \quad z=k(x, y)\\ \frac{d z}{d s}=\frac{\partial z}{\partial x} \frac{d x}{d s}+\frac{\partial z}{\partial y} \frac{d y}{d s} x=g(s)y=h(s)z=k(x,y)dsdz​=∂x∂z​dsdx​+∂y∂z​dsdy​

神经网络一般有三个部分构成,输入层,隐层,输出层
下图可看出输入层 x \bm x x是一个样本数据的多个属性,输出层是输出输入的数据时属于哪个类别
输出层和输入层之间的部分称之为隐层,有多层和多个神经元构成。


构建神经网络的过程是一个不断迭代的过程,
如下图,我们可以看到最终的输出结果 y y y,可以通过不断的迭代,推到输入层 x \bm x x,其中这里的 σ \bm \sigma σ表示激活函数,由神经网络的特点可以知道,隐层中每个神经元都有激活函数,每一层的输入都是前一层的输出。(详细了解神经网络的特点可参考前面初识神经网络初识神经网络的文章)。

一个简单的神经网络运算如下,可以写成矩阵形式,进行矩阵操作。

由于神经网络的构成是前一层和后一层两两相连,前一层输出(各值之和)是后一层的输入。在某一个神经元上,我们就可以用梯度下降法来调整参数 w i 以 及 偏 置 b ( 又 称 阙 值 θ ) w_i以及偏置b(又称阙值\theta) wi​以及偏置b(又称阙值θ),梯度下降法要知道各个点的梯度,来确定调整参数的方向,因问题转变为我们需要求解各点的偏导数。
假设, l n ( θ ) l^n(\theta) ln(θ)表示第n个样本值训练的损失函数, L ( θ ) L(\theta) L(θ)是所有样本值的损失函数之和,反向传播算法是训练每一个样本值的属性对应的权重和阙值,一个训练集有N个训练样本。(这里的 θ \theta θ代表损失函数中的多个未知数)
L ( θ ) = ∑ n = 1 N l n ( θ ) ⟶ ∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ l n ( θ ) ∂ w L(\theta)=\sum_{n=1}^{N} l^{n}(\theta) \quad \longrightarrow \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N} \frac{\partial l^{n}(\theta)}{\partial w} L(θ)=n=1∑N​ln(θ)⟶∂w∂L(θ)​=n=1∑N​∂w∂ln(θ)​

注:一般 l l l可设为 1 2 ∑ i = 1 n ( y ^ i − y ) \frac{1}{2}\sum_{i=1}^{n}(\hat y_i-y) 21​∑i=1n​(y^​i​−y),即误差函数, l = 1 2 ∑ i = 1 n ( y ^ i − y ) l=\frac{1}{2}\sum_{i=1}^{n}(\hat y_i-y) l=21​∑i=1n​(y^​i​−y), 1 2 \frac{1}{2} 21​是为了求导方便。
即求得每一个训练样本的损失函数,将其相加就是训练集的损失函数(误差函数)。因此我们要计算 ∂ L ( θ ) ∂ w = ∑ n = 1 N ∂ l n ( θ ) ∂ w \frac{\partial L(\theta)}{\partial w}=\sum_{n=1}^{N} \frac{\partial l^{n}(\theta)}{\partial w} ∂w∂L(θ)​=n=1∑N​∂w∂ln(θ)​
那我们应该思考怎样计算 ∂ l ∂ w \frac{\partial l}{\partial w} ∂w∂l​。
首先来看输入层:
假设某数据有两个属性,取样本点 x \bm{x} x有属性值 ( x 1 , x 2 ) , 输 出 ( y 1 , y 2 ) (x_1,x_2),输出(y_1,y_2) (x1​,x2​),输出(y1​,y2​),
一个样本输入神经元和隐层连接如下图:

则: ∂ l ∂ w = ∂ l ∂ z ∂ z ∂ w \frac{\partial l}{\partial w}=\frac{\partial l}{\partial z}\frac{\partial z}{\partial w} ∂w∂l​=∂z∂l​∂w∂z​
其中由 z = x 1 w 1 + x 2 w 2 + b z=x_{1} w_{1}+x_{2} w_{2}+b z=x1​w1​+x2​w2​+b可以看出: ∂ z ∂ w 1 = x 1 , ∂ z ∂ w 2 = x 2 \frac{\partial z}{\partial w_1}=x_1,\frac{\partial z}{\partial w_2}=x_2 ∂w1​∂z​=x1​,∂w2​∂z​=x2​即偏导数等于前向传播中的输出值 x x x,在这里相当于参数,很容易得到,因为样本值 x x x已知,由输入向输出计算即可推得。
如图(注; z ⟶ s i g m o i d 激 活 函 数 ⟶ 0.12 , z \longrightarrow sigmoid激活函数 \longrightarrow 0.12,\quad z⟶sigmoid激活函数⟶0.12,每个神经元都有激活函数):

接下来就是求 ∂ l ∂ z \bm {\frac{\partial l}{\partial z}} ∂z∂l​,


首先应该确定 z \bm z z和 l \bm l l的决定关系,因为:

由链式求导法则得:
∂ l ∂ z = ∂ l ∂ a ∂ a ∂ z \frac{\partial l}{\partial z}=\frac{\partial l}{\partial a}\frac{\partial a}{\partial z} ∂z∂l​=∂a∂l​∂z∂a​ 因 为 a = σ ( z ) ( 激 活 函 数 已 知 ) , 所 以 ∂ a ∂ z = σ ′ ( z ) ; \\ 因为a=\sigma(z)(激活函数已知),所以\frac{\partial a}{\partial z} =\sigma^{\prime}(z); 因为a=σ(z)(激活函数已知),所以∂z∂a​=σ′(z);
即现在要求 ∂ l ∂ a \quad \frac{\partial l}{\partial a} ∂a∂l​: ∂ l ∂ a = ∂ l ∂ z ′ ∂ z ′ ∂ a + ∂ l ∂ z ′ ′ ∂ z ′ ′ ∂ a \quad \frac{\partial l}{\partial a}= \frac{\partial l}{{\partial} z^{\prime}}\frac{\partial z^{\prime}}{\partial a}+ \frac{\partial l}{\partial z^{\prime \prime}}\frac{\partial z^{\prime \prime}}{\partial a} ∂a∂l​=∂z′∂l​∂a∂z′​+∂z′′∂l​∂a∂z′′​
由图中可以容易看出 a ⟶ z ′ , a ⟶ z ′ ′ , ( 前 一 个 a 是 后 一 个 z 的 输 入 ) a \longrightarrow z\prime ,a \longrightarrow z\prime\prime,(前一个a是后一个z的输入) a⟶z′,a⟶z′′,(前一个a是后一个z的输入)
所以: ∂ z ′ ∂ a = w 3 \frac{\partial z^{\prime}}{\partial a}=w_3 ∂a∂z′​=w3​ ∂ z ′ ′ ∂ a = w 4 \frac{\partial z^{\prime\prime}}{\partial a}=w_4 ∂a∂z′′​=w4​
所以; ∂ l ∂ z = σ ′ ( z ) [ w 3 ∂ l ∂ z ′ + w 4 ∂ l ∂ z ′ ′ ] \bm{\frac{\partial l}{\partial z}=\sigma^{\prime}(z)\left[w_{3} \frac{\partial l}{\partial z^{\prime}}+w_{4} \frac{\partial l}{\partial z^{\prime \prime}}\right]} ∂z∂l​=σ′(z)[w3​∂z′∂l​+w4​∂z′′∂l​]
上面的式子可以看出下面的形式(反向传播):

要求 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​,现在问题转变成求 ∂ l ∂ z ′ , ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}},\frac{\partial l}{\partial z^{\prime\prime}} ∂z′∂l​,∂z′′∂l​
在这里可以看出求 ∂ l ∂ z ′ , ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}},\frac{\partial l}{\partial z^{\prime\prime}} ∂z′∂l​,∂z′′∂l​的过程和求 ∂ l ∂ z \frac{\partial l}{\partial z} ∂z∂l​的过程很相似,需要继续求得 z ′ , z ′ ′ z\prime,z\prime\prime z′,z′′后面的关于 l l l的偏导数。

  1. 假设是 z ′ , z ′ ′ z\prime,z\prime\prime z′,z′′在输出层:

    ∂ l ∂ z ′ = ∂ l ∂ y 1 ∂ y 1 ∂ z ′ ∂ l ∂ z ′ ′ = ∂ l ∂ y 2 ∂ y 2 ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime}}= \frac{\partial l}{\partial y_{1}} \frac{\partial y_{1}}{\partial z^{\prime}}\quad \frac{\partial l}{\partial z^{\prime \prime}}= \frac{\partial l}{\partial y_{2}}\frac{\partial y_{2}}{\partial z^{\prime \prime}} ∂z′∂l​=∂y1​∂l​∂z′∂y1​​∂z′′∂l​=∂y2​∂l​∂z′′∂y2​​
  2. z ′ , z ′ ′ z\prime,z\prime\prime z′,z′′在隐层中,我们需要继续先求后面的 ∂ l ∂ z a \frac{\partial l}{\partial z_{a}} ∂za​∂l​, ∂ l ∂ z b \frac{\partial l}{\partial z_{b}} ∂zb​∂l​,然后再求 ∂ l ∂ z ′ \frac{\partial l}{\partial z^{\prime}} ∂z′∂l​, ∂ l ∂ z ′ ′ \frac{\partial l}{\partial z^{\prime\prime}} ∂z′′∂l​:

    上面的前向传播的过程是递归的过程即每算一个偏导数需要先求得下一个偏导数,直到递归到输出层偏导数已知,然后回溯计算当前偏导数,计算较为繁琐;由于已知输出值,现在我们从输出层开始,从后往前求得偏导数即反向传播

    先算出: ∂ l ∂ z 5 \frac{\partial l}{\partial z_{5}} ∂z5​∂l​, ∂ l ∂ z 6 \frac{\partial l}{\partial z_{6}} ∂z6​∂l​,再计算 ∂ l ∂ z 3 \frac{\partial l}{\partial z_{3}} ∂z3​∂l​,

    根据前面的公式可得:
    ∂ l ∂ z 3 = σ ′ ( z 3 ) [ w 3 ∂ l ∂ z 5 + w 4 ∂ l ∂ z 6 ] {\frac{\partial l}{\partial z_3}=\sigma^{\prime}(z_3)\left[w_{3} \frac{\partial l}{\partial z_5}+w_{4} \frac{\partial l}{\partial z_6}\right]} ∂z3​∂l​=σ′(z3​)[w3​∂z5​∂l​+w4​∂z6​∂l​]以此类推。这是一个不断迭代的过程。

    现在回到最初我们要求的是某个神经元 ∂ l ∂ w \bm{ \frac{\partial l}{\partial w}} ∂w∂l​,然后根据偏导数求得梯度,进行梯度下降求使得损失函数最小的 w w w,第k+1次更新:
    w k + 1 ⟵ w k − η ∗ g k w^{k+1}\longleftarrow w^k-\eta*g^k wk+1⟵wk−η∗gk
    由前向和后向传播可得到 ∂ l ∂ w , ( g k ) \bm{ \frac{\partial l}{\partial w}},(g^k) ∂w∂l​,(gk)。

    因此,神经网络求参的过程就迎刃而解了。

BP(BackPropagation)误差逆传播算法相关推荐

  1. 《机器学习与数据挖掘》实验五 编程实现误差逆传播算法(BP算法)

    前言: 摘要:本文对机器学习实验五 标准BP算法的代码进行实现,如果不了解的BP算法的话,可以自行上网搜索BP算法的详解. 实验题目:编程实现误差逆传播算法(BP算法) 实验目的:掌握误差逆传播算法( ...

  2. 人工智能知识全面讲解:多层神经网络与误差逆传播算法

    7.3.1 从单层到多层神经网络 明斯基教授曾表示,单层神经网络无法解决异或问题,但是当增加一个计 算层以后,两层神经网络不仅可以解决异或问题,而且具有非常好的非线性分 类效果.只是两层神经网络的计算 ...

  3. BP算法误差逆传播参数更新公式推导

    BP算法误差逆传播参数更新公式推导

  4. 误差逆传播算法公式理解及推导

    前言:公式理解及推导参考自<机器学习>周志华 P101 BP网络 BP网络一般是指由 误差逆传播(error BackPropagation, BP)算法训练的多层前馈神经网络. 给定训练 ...

  5. BP神经网络模型与学习算法

    转载自:http://www.cnblogs.com/wentingtu/archive/2012/06/05/2536425.html 一,什么是BP "BP(Back Propagati ...

  6. 误差反向传播算法(BP网络)

    1.引言 误差反向传播网络(Error Back Propagtion,),简称为BP神经网络,是一种多层神经网络,与之相关的另一个概念是多层感知器(Multi-Layer Perceptron,ML ...

  7. 误差反向传播算法笔记

    复习一下基础. 一.机器学习模型的处理方法 (1) 数据预处理: 经过数据的预处理,如去除噪声等.比如在文本分类中,去除停用词等. (2) 特征提取:从原始数据中提取一些有效的特征.比如在图像分类中, ...

  8. MATLAB中BP神经网络用于回归拟合算法实现(另附GRNN代码)

    BP神经网络:是1986年由Rumelhart和McClelland为首的科学家提出的概念,是一种按照误差逆向传播算法训练的多层前馈神经网络,是目前应用最广泛的神经网络.神经网络是把生活中的常见情节推 ...

  9. BP神经网络求解异或算法

    BP神经网络求解异或算法 目录 BP神经网络求解异或算法 一.BP神经网络 二.激活函数 三.异或求解 一.BP神经网络 BP算法包括信号的前向传播和误差的反向传播两个过程.即计算误差输出时按从输入到 ...

最新文章

  1. dede 后台 mysql_织梦dedecms使用Mysql8.0无法登录后台的解决办法
  2. iOS开发小技巧-修改SliderBar指针的样式(牢记这个方法,只能通过代码来修改)
  3. jmeter csv参数化_jmeter学习(二)
  4. java运行机制是什么_JAVA运行机制
  5. iOS app 切图
  6. js屏蔽浏览器(IE和FireFox)的刷新和右键等功能
  7. mysql忘记root密码咋办_MySQL忘记root用户密码怎么办?
  8. ASP.NET Core MVC I\/O编程模型
  9. 数据值、列类型和数据字段属性
  10. python列表元素下标是什么_python列表中元素插入位置总结
  11. 2019-11-20 git提交日志中附加的贡献者签名
  12. 内网通mac能用吗_Mac「随航」除了可以当Mac显示屏,还可以这样用
  13. 鹰眼跟踪、限流降级,EDAS的微服务解决之道
  14. 全球130多个国家的货币代码对照表
  15. yuv422sp to yuv422p
  16. 信号与系统实验一:基本信号的产生和实现
  17. win7无法连接打印机拒绝访问_win7 无法连接到打印机 添加本地打印机拒绝访问 - 卡饭网...
  18. Windows系统快速搜索文件的软件,比win系统自带搜索功能好用一百倍
  19. DSN格式转SCH格式
  20. topic是短语还是句子_词组、短语、句子--Unit 3 Topic 3

热门文章

  1. 透明度测试-AlphaTest
  2. 为什么别人的抖音那么多赞,抖音怎么提升点赞
  3. 计算机指令系统课件,《机器指令系统》PPT课件.ppt
  4. 云服务季度增速首次低于40%,强敌围攻下亚马逊“高速翻车”?
  5. 关于360浏览器F12 network中看不到请求头的原因
  6. Unity TextMeshPro图文混排
  7. c语言中int x=0101,二进制安全_C语言中数据类型
  8. Python学习笔记(28)~爬虫基础学习:伪装
  9. 四种图像平滑方法 python代码
  10. gdb调试C语言 指针与内存——学习笔记