深度学习-Backpropagation算法

137人阅读 评论(0) 收藏 举报
分类:

学习彭亮《深度学习进阶:算法与应用》课程


Backpropagation的目标

Backpropagation核心解决的问题: ∂C/∂w 和 ∂C/∂b 的计算,;针对cost函数C

符号说明

(1)
这里写图片描述
eg:这里写图片描述表示第三层的第二个神经元结点与第3-1层的第四个神经元阶段的权重
(2)
这里写图片描述
eg:表示第2层第三个神经元结点的偏向

(3)经过(1)(2)的表示,这里写图片描述的计算方程变为:
这里写图片描述
即第l层的第j个神经元的激活值=sigmoid(第l-1层所有神经元结点的值*与第l层第j个神经元权重的和+偏向)
也就是两个步骤: 1. w*a+b, 2. sigmoid函数


对于每一层(l), 定义一个weight matrix (权重矩阵):
这里写图片描述
他是连接第l层和第l-1层的所有神经元连线上的权重
矩阵中第j行,第k列的元素就是:
这里写图片描述

对于每一层(l), 定义一个bias vector:
这里写图片描述
表示当前层的每一个元素的bias是:
这里写图片描述
同理对于a:
这里写图片描述

矢量化功能(Vectorizing a function):
这里写图片描述
eg:f(x)=x^2
这里写图片描述
即对向量X使用这个方程f等于对向量中的每个分量Xi使用这个方程f

于是这里写图片描述 =>(可表示为) 这里写图片描述
(这样表示就没有下标了,即用矩阵和向量表示会简单一些)

引入中间变量:
这里写图片描述 <=> 这里写图片描述

回顾目标函数:
这里写图片描述
假定Cost可写成如下形式:
平均cost:这里写图片描述(即对每个cost求出来后在求和/总数)
单个cost:这里写图片描述

因为对于backpropagation算法对∂C/∂w 和 ∂C/∂b 的计算是通过单个实例x完成的,即都是对单个实例变量求偏导,所以我们要做一个转化,cost可以写成一个神经网络输出的函数。
这里写图片描述
我们定义的这个二次cost方程满足:
这里写图片描述

Hadamard积,s⊙t:
eg:这里写图片描述
这种对应元素相乘有时被称为Hadamard积(Hadamard product)或Schur积(Schur product)。我们将称它为Hadamard积。优秀的矩阵库通常会提供Hadamard积的快速实现。


Backpropagation的四个关键公式:

一个对于error在输出层的方程:

这里写图片描述定义error在l层,第j个神经元
这里写图片描述
即尝试破坏神经网络的计算, 增添了一个变化: 这里写图片描述

则本来要输出这里写图片描述,结果输出这里写图片描述,最终造成cost变化为这里写图片描述

假设现在我们想通过找到一个这里写图片描述来降低cost, 如果这里写图片描述太大, 我们想降低cost, 通过找到合适的这里写图片描述, 如果cost接近0, 无法改进太多, 接近最优, 所以这里写图片描述可以作为一个error的衡量标准。
于是我们定义:
这里写图片描述

一个对于error在输出层的方程:
这里写图片描述BP1

等式右边第一项衡量Cost变化快对于第j个activation输出, 比如, 我们理想的情况是C不因为某一个特定的输出神经元而变化太大, 所以error就比较小.

等式右边第二部分是衡量activation方程变化对于这里写图片描述
转化为矩阵表达式:
这里写图片描述(Hadamard积)(BP1a
其中这里写图片描述是C根据输出层activation的变化率, 对于我们的二次Cost方程:
这里写图片描述

一个因下一层error变化引起的当前层error变化的方程:

这里写图片描述BP2
下一层的error乘以权重矩阵的转置, 理解为error往回传递. 再求与这里写图片描述的Hadamard product, 算出对于l层的error

这两个方程的好处就是,交替使用:
这里写图片描述BP1)和这里写图片描述BP2
可以通过神经网络逐层往前计算所有error.
BP1用来计算输出层error, BP2用来计算前一层, BP1=>BP2=>BP1…..

一个关于cost变化率根据偏向bias的方程

这里写图片描述BP3
根据BP1、BP2
这里写图片描述

一个关于cost比变化率根据权重weight的方程:

这里写图片描述BP4
这个告诉我们如何根据error和a求偏导数, error和a我们都可以求得
简化为:
这里写图片描述

ain就是:
这里写图片描述
即Cost Function对权重的偏导就=前一个神经元输入层activion的值*后一个神经与输出error的值

当a_in很小时,偏导数也很小,所以权重较慢学习, 结论就是从low activation算出的权重学习比较慢,根据
这里写图片描述BP1
和sigmoid function的函数图像
这里写图片描述
可以看出, 函数值接近1或者0的时候曲线都很平, 说明这里写图片描述接近0, 结论就是当输出层的权重学习较慢,如果输入层的activion很高或者很低时,对于bias偏好也一样


总结四个方程

(1)一个对于error在输出层的方程:
这里写图片描述BP1
(2)一个因下一层error变化引起的当前层error变化的方程:
这里写图片描述BP2
(3)一个关于cost比变化率根据偏向baise的方程:
这里写图片描述BP3
(4)一个关于cost比变化率根据权重weight的方程:
这里写图片描述BP4


Backpropatation 算法实现步骤

  1. 输入 x: 设置输入层activation a
  2. 正向更新: 对于l=1, 2, 3, …. L, 计算这里写图片描述这里写图片描述
  3. 计算出输出层error: 这里写图片描述
  4. 反向更新error (backpropagate error): 这里写图片描述
  5. 输出: 这里写图片描述

Backpropatation 算法总体思路

1 通过迭代性的来处理训练集中的实例
2 对比经过神经网络后输入层预测值(predicted value)与真实值(target value)之间
3 反方向(从输出层=>隐藏层=>输入层)来以最小化误差(error)来更新每个连接的权重(weight)
4 算法详细介绍
输入:D:数据集,l 学习率(learning rate), 一个多层前向神经网络
输出:一个训练好的神经网络(a trained neural network)
4.1 初始化权重(weights)和偏向(bias): 随机初始化在-1到1之间,或者-0.5到0.5之间,每个单元有一个偏向
4.2 对于每一个训练实例X,执行以下步骤:
4.2.1: 由输入层向前传送
这里写图片描述
这里写图片描述
4.2.2 根据误差(error)反向传送

  • 对于输出层:
    这里写图片描述
  • 对于隐藏层:
    这里写图片描述
  • 权重更新:
    这里写图片描述
  • 偏向更新 :
    这里写图片描述
    4.3 终止条件

    • 4.3.1 权重的更新低于某个阈值
    • 4.3.2 预测的错误率低于某个阈值
    • 4.3.3 达到预设一定的循环次数

Backpropagation 算法举例

这里写图片描述
- 对于输出层:
这里写图片描述
- 对于隐藏层:
这里写图片描述
- 权重更新:
这里写图片描述
- 偏向更新 :
这里写图片描述
这里写图片描述


为什么Backpropagation算法快?

假设为了求 ∂C/∂w 和 ∂C/∂b
1. 用微积分中的乘法法则,太复杂
2. 把Cost函数当做只是权重weight的函数, 于是定义:
这里写图片描述

一个很小的
这里写图片描述
单位向量:
这里写图片描述
看似可以, 但是具体计算时, 假设我们的神经网络中有1,000,000个权重,对于每一个权重weight, 我们都需要通过遍历一遍神经网络来计算 :
这里写图片描述
这里写图片描述
对于1,000,000个权重, 我们需要遍历神经网络1,000,000次! 仅仅对于1个训练实 例x和y,Backpropagation算法的优势在于让我们在一正一反遍历一遍神经网络的时候, 就可以把所有的偏导数计算出来: ∂C/∂w (对于所有的w)

查看评论

BackPropagation算法

BackPropagation算法是多层神经网络的训练中举足轻重的算法。 简单的理解,它的确就是复合函数的链式法则,但其在实际运算中的意义比链式法则要大的多。 要回答题主这个问题“如何直观的解释bac...
  • xueli1991
  • xueli1991
  • 2016-08-17 22:01:06
  • 564

深度学习进阶(三)--BackPropagation算法的影响因素(补充昨天的博客更新)

总结一下昨天的学习过程 学习了解了影响神经网络中的一些参数: 1,层数以及每层神经元的个数(感觉层数越多BackPropagation算法效果越不怎么好) 2,权重以及偏向的初始化方法,比如说均...
  • u013991917
  • u013991917
  • 2017-10-09 22:16:08
  • 71

深度学习-Backpropagation算法

学习彭亮《深度学习进阶:算法与应用》课程 Backpropagation的目标 Backpropagation核心解决的问题: ∂C/∂w 和 ∂C/∂b 的计算,;针对cost函数C ...
  • YEN_CSDN
  • YEN_CSDN
  • 2018-01-24 16:17:31
  • 137

反向传播算法(back propagation)

反向传播算法是多层神经网络的训练中举足轻重的算法,本文着重讲解方向传播算法的原理和推导过程。因此对于一些基本的神经网络的知识,本文不做介绍。在理解反向传播算法前,先要理解神经网络中的前馈神经网络算法。...
  • autocyz
  • autocyz
  • 2016-06-08 16:40:16
  • 2575

深度学习BP算法 BackPropagation以及详细例子解析

反向传播算法是多层神经网络的训练中举足轻重的算法,本文着重讲解方向传播算法的原理和推导过程。因此对于一些基本的神经网络的知识,本文不做介绍。在理解反向传播算法前,先要理解神经网络中的前馈神经网络算法。...
  • win_in_action
  • win_in_action
  • 2016-09-29 19:53:50
  • 5267

深度学习笔记三:反向传播(backpropagation)算法

接上一篇的最后,我们要训练多层网络的时候,最后关键的部分就是求梯度啦。纯数学方法几乎是不可能的,那么反向传播算法就是用来求梯度的,用了一个很巧妙的方法。 反向传播算法应该是神经网络最基本最需要弄懂的...
  • xierhacker
  • xierhacker
  • 2016-12-16 19:54:06
  • 5108

深度学习 16. 反向传递算法最简单的理解与提高,BP算法,Backpropagation, 自己的心得。

深度学习 16. 反向传递算法最简单的理解与提高,BP算法,Backpropagation, 自己的心得。...
  • qq_20259459
  • qq_20259459
  • 2017-05-04 17:18:46
  • 1075

深度学习笔记——理论与推导之Backpropagation(二)

Backpropagation(反向传播): 背景——Cost Function与Gradient Descent Cost Function: Gradient Descent: ...
  • sysstc
  • sysstc
  • 2017-08-10 11:42:22
  • 658

python实现BackPropagation算法

python实现BackPropagation算法实现神经网络的权重和偏置更新,很重要的一部就是使用BackPropagation(反向传播)算法。具体来说,反向传播算法就是用误差的反向传播来计算w(...
  • leichaoaizhaojie
  • leichaoaizhaojie
  • 2017-02-25 14:50:15
  • 1207

深度学习与计算机视觉[CS231N] 学习笔记(4.1):反向传播(Backpropagation)

在学习深度学习的过程中,我们常用的一种优化参数的方法就是梯度下降法,而一般情况下,我们搭建的神经网络的结构是:输入→权重矩阵→损失函数。如下图所示。 而在给定输入的情况下,为了使我们的损失函数值...
  • ksws0292756
  • ksws0292756
  • 2018-01-11 15:15:28
  • 172
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 30万+
    积分: 4331
    排名: 8698
    联系方式

    博文主要参考网上资料,视频笔记,结合个人见解,仅供学习、交流使用,如有侵权,请联系博主删除。


    博客专栏
    最新评论