What does the gradient flowing through batch normalization looks like ?

反向传播梯度下降权值参数更新公式的推导全依赖于复合函数求梯度时的链式法则

1. Batch Normalization

给定输入样本 x∈RN×D,经过一个神经元个数为 H 的隐层,负责连接输入层和隐层的权值矩阵 w∈RD×H,以及偏置向量 b∈RH。

Batch Normalization 的过程如下:

  • 仿射变换(affine transformation)

    h=XW+b

    显然 h∈RN×H

  • batch normalization 变换:

    y=γh^+β

    其中 γ,β 是待学习的参数,h^ 是 h 去均值和方差归一化的形式:

    h^=(h−μ)(σ2+ϵ)−1/2

    进一步其标量形式如下:

    hˆkl=(hkl−μl)(σ2l+ϵ)−1/2

    l={1,…,H},μ 和 σ 分别是对矩阵 h∈RN×H 的各个属性列,求均值和方差,最终构成的均值向量和方差向量。

    μl=1N∑phpl,σ2l=1N∑p(hpl−μl)2

2. ∂L∂h,∂L∂γ,∂L∂β 的计算

首先我们来看损失函数 L 关于隐层输入偏导的计算:

dLdh=⎛⎝⎜⎜⎜⎜⎜⎜⎜dLdh11..dLdhN1..dLdhkl...dLdh1H..dLdhNH⎞⎠⎟⎟⎟⎟⎟⎟⎟.

又由于:

h=XW+b,h⇒h^,h^⇒y

由链式法则可知:

∂L∂hij=∑k,l∂L∂ykl∂ykl∂h^kl∂h^kl∂hij

显然其中 ∂ykl∂h^kl=γl,

又由于:

hˆkl=(hkl−μl)(σ2l+ϵ)−1/2,μl=1N∑phpl,σ2l=1N∑p(hpl−μl)2

所以:

dh^kldhij=(δikδjl−1Nδjl)(σ2l+ϵ)−1/2−12(hkl−μl)dσ2ldhij(σ2l+ϵ)−3/2

根据 σ2l 与 hij 的计算公式可知:

dσ2ldhij====2N∑p(hpl−μl)(δipδjl−1Nδjl)(只有在p=1时)2N(hil−μl)δjl−2Nδjl⎛⎝1N∑p(hpl−μl)⎞⎠2N(hil−μl)δjl−2Nδjl⎛⎝1N∑phpl−μl⎞⎠(显然右侧为0)2N(hil−μl)δjl

Batch Normalization 反向传播(backpropagation )公式的推导的更多相关文章

  1. 反向传播BackPropagation

    http://www.cnblogs.com/charlotte77/p/5629865.html http://www.cnblogs.com/daniel-D/archive/2013/06/03 ...

  2. 反向传播 Backpropagation

    前向计算:没啥好说的,一层一层套着算就完事了 y = f( ... f( Wlayer2T f( Wlayer1Tx ) ) ) 反向求导:链式法则 单独看一个神经元的计算,z (就是logit)对 ...

  3. 如何理解反向传播 Backpropagation 梯度下降算法要点

    http://colah.github.io/posts/2015-08-Backprop/ http://www.zhihu.com/question/27239198 待翻译 http://blo ...

  4. 一个batch的数据如何做反向传播

    一个batch的数据如何做反向传播 对于一个batch内部的数据,更新权重我们是这样做的: 假如我们有三个数据,第一个数据我们更新一次参数,不过这个更新只是在我们脑子里,实际的参数没有变化,然后使用原 ...

  5. [DeeplearningAI笔记]序列模型1.3-1.4循环神经网络原理与反向传播公式

    5.1循环序列模型 觉得有用的话,欢迎一起讨论相互学习~Follow Me 1.3循环神经网络模型 为什么不使用标准的神经网络 假如将九个单词组成的序列作为输入,通过普通的神经网网络输出输出序列, 在 ...

  6. 循环神经网络(RNN)模型与前向反向传播算法

    在前面我们讲到了DNN,以及DNN的特例CNN的模型和前向反向传播算法,这些算法都是前向反馈的,模型的输出和模型本身没有关联关系.今天我们就讨论另一类输出和模型间有反馈的神经网络:循环神经网络(Rec ...

  7. 前向传播算法(Forward propagation)与反向传播算法(Back propagation)

    虽然学深度学习有一段时间了,但是对于一些算法的具体实现还是模糊不清,用了很久也不是很了解.因此特意先对深度学习中的相关基础概念做一下总结.先看看前向传播算法(Forward propagation)与 ...

  8. 【原】Coursera—Andrew Ng机器学习—编程作业 Programming Exercise 4—反向传播神经网络

    课程笔记 Coursera—Andrew Ng机器学习—课程笔记 Lecture 9_Neural Networks learning 作业说明 Exercise 4,Week 5,实现反向传播 ba ...

  9. CNN反向传播更新权值

    背景 反向传播(Backpropagation)是训练神经网络最通用的方法之一,网上有许多文章尝试解释反向传播是如何工作的,但是很少有包括真实数字的例子,这篇博文尝试通过离散的数据解释它是怎样工作的. ...

随机推荐

  1. 洛谷 P1553 数字反转(升级版)

    P1553 数字反转(升级版) 题目描述 给定一个数,请将该数各个位上数字反转得到一个新数. 这次与NOIp2011普及组第一题不同的是:这个数可以是小数,分数,百分数,整数.整数反转是将所有数位对调 ...

  2. 有关cascade的结构体

    /* internal cascade classifier */ typedef struct CvCascadeHaarClassifier { CV_INT_HAAR_CLASSIFIER_FI ...

  3. springMVC通过ajax传递参数list对象或传递数组对象到后台

    springMVC通过ajax传递参数list对象或传递数组对象到后台 环境: 前台传递参数到后台 前台使用ajax 后台使用springMVC 传递的参数是N多个对象 JSON对象和JSON字符串 ...

  4. golang matrix

    package main import ( "fmt" "go.matrix-go1" //比较有名的关于Matrix在golang中的方法库 "st ...

  5. 用Promise对象封装JQuery的AJAX过程

    let jqPostAjaxPromise = function(param){ return new Promise(function(resolve, reject){ $.ajax({ url: ...

  6. java线程——详解Callable、Future和FutureTask

    回顾: 接上篇博客 java线程--三种创建线程的方式,这篇博客主要介绍第三种方式Callable和Future.比较继承Thread类和实现Runnable接口,接口更加灵活,使用更广泛.但这两种方 ...

  7. COGS——C 14. [网络流24题] 搭配飞行员

    http://cogs.pro/cogs/problem/problem.php?pid=14 ★★☆   输入文件:flyer.in   输出文件:flyer.out   简单对比时间限制:1 s  ...

  8. STL_算法_删除(unique、unique_copy)

    C++ Primer 学习中. . . 简单记录下我的学习过程 (代码为主) 全部容器适用 unique(b,e) unique(b,e,p) unique_copy(b1,e1,b2) unique ...

  9. 三期_day03_环境搭建和客户页面_I

    以下交代一下使用的框架 前端: EasyUI+Jquery+Ajax 后台: Spring+Structs2+mybatis 数据库: Oracle 使用工具: MyEclipse12+Maven 操 ...

  10. C++组合数(combination)的实现

    实现: (nm) 既需要计算组合的总数 (32)=3: 也需要分别获得每一种组合的情形,用于穷举搜索: 1, 2; 1, 3; 2, 3 1. 递归实现 // picked + toPick == m ...