深度神经网络(Deep Neural Networks,简称DNN)是深度学习的基础。

  回顾监督学习的一般性问题。假设我们有$m$个训练样本$\{(x_1, y_1), (x_2, y_2), …, (x_m, y_m)\}$,其中$x$为输入向量,$y$为输出向量,利用这个训练样本训练模型的参数,使得给定模型一个$x_{test}$,其能够预测$y_{test}$。

  采用CNN模型的时候,$x$输入向量全部喂给输入层,$y$输出向量和输出层的向量一起计算损失函数,而其中若干个神经元的隐藏层,每一个隐藏层都有对应的权重矩阵$W$和偏置向量$b$,对于训练过程中,喂入样本$x$得到$y_{predict}$,根据$y_{predict}$以及$y$计算出的损失函数,怎么去更新网络中的参数,即需要反向传播算法。在机器学习中,求出损失函数的最小极值,其对应的参数即为我们所期望的到的。在DNN中,常用的优化极值求解过程的方法为梯度下降法,其他还有牛顿法、拟牛顿法等等。

  综上,对DNN的损失函数采用梯度下降法进行迭代优化求极小值的过程即为反向传播算法。

1 - DNN反向传播算法

  定义一个损失函数,度量训练样本通过模型的预测输出与真实输出之间的差距(损失)。训练样本的预测输出可以通过一系列对于第l层的一般公式${a^{l}}=\sigma(z^{l})=\sigma(W^{l}a^{l-1}+b^{l})$计算得出。输出层对应的${a^{L_{output}}}$即为模型预测的输出。

DNN常用可选择均方差来作为损失函数,其公式如下$$J(W,b,x,y)=\frac{1}{2}\begin{Vmatrix}a^{L}-y \end{Vmatrix}^2_2$$

  其中$a^L$和$y$分别为预测输出和期望真实输出(期望输出),而$\begin{Vmatrix}S\end{Vmatrix}_2$为$S$的$L2$范数。

对于输出层$L_{output}$,其$W_{output}$和$b_{output}$满足如下公式:$${a^{L_{output}}}=\sigma(z^{L_{output}})=\sigma(W^{L_{output}}a^{L_{output\_prev}}+b^{L_{output}})$$

因此,对于输出层的参数,我们有损失函数如下:

$$J(W,b,x,y)=\frac{1}{2}\begin{Vmatrix}a^{L_{output}}-y\end{Vmatrix}^2_2=\frac{1}{2}\begin{Vmatrix} \sigma(W^{L_{output}}a^{L_{output\_prev}}+b^{L_{output}})-y\end{Vmatrix}^2_2$$

因此对于该损失函数,可对其对于输出层的$W_{output}$和$b_{output}$分别求偏导数从而得到梯度,如下:

$$\frac{\partial J(W,b,x,y)}{\partial W^{L_{output}}}=\frac{\partial J(W,b,x,y)}{\partial z^{L_{output}}}\frac{\partial z^{L_{output}}}{\partial W^{L_{output}}}=(a^{L_{output}}-y)\bigodot \sigma^{'}(z^{L_{output}})(a^{L_{output\_prev}})^T$$

$$\frac{\partial J(W,b,x,y)}{\partial b^{L_{output}}}=\frac{\partial J(W,b,x,y)}{\partial z^{L_{output}}}\frac{\partial z^{L_{output}}}{\partial b^{L_{output}}}=(a^{L_{output}}-y)\bigodot \sigma^{'}(z^{L_{output}})$$

上述$\bigodot$代表$Hadamard$积,对于两个维度相同的向量$A(a_1,a_2,...,a_n)^T$和$B(b_1,b_2,...,b_n)^T$,有${A}\bigodot{B}=(a_1b_1,a_2b_2,...,a_n,b_n)^T$。

对于$W_{output}$和$b_{output}$,有公共部分$\frac{\partial J(W,b,x,y)}{\partial z^{L_{output}}}$,将其记做$\delta^L$,如下:

$$\delta^L=\frac{\partial J(W,b,x,y)}{\partial z^{L_{output}}}=(a^{L_{output}}-y)\bigodot \sigma^{'}(z^{L_{output}})$$

以上就是计算输出层的梯度,而对于第l层的梯度,根据链式法则可得公式如下:

$$\delta^l=\frac{\partial J(W,b,x,y)}{\partial z^{l}}=\frac{\partial J(W,b,x,y)}{\partial z^{L_{output}}}\frac{\partial z^{L_{output}}}{\partial z^{L-1}}\frac{\partial z^{L-1}}{\partial z^{L-2}}...\frac{\partial z^{l+1}}{\partial z^{l}}$$

注意到,其中$L_{output}$等价于$L$。这对于任意第l层,计算出该层的$W^l$和$b^l$的梯度如下:

$$\frac{\partial J(W,b,x,y)}{\partial W^{l}}=\frac{\partial J(W,b,x,y)}{\partial z^{l}}\frac{\partial z^{l}}{\partial W^{l}}=\delta^l(a^{l-1})^T $$

$$\frac{\partial J(W,b,x,y)}{\partial b^{l}}=\frac{\partial J(W,b,x,y)}{\partial z^{l}}\frac{\partial z^{l}}{\partial b^{l}}=\delta^l $$

因此,关键是需要求出$\delta^l$。注意到有递推公式$\delta^l=\frac{\partial J(W,b,x,y)}{\partial z^l}=\frac{\partial J(W,b,x,y)}{\partial z^{l+l}}\frac{z^{l+1}}{z^l}=\delta^{l+1}\frac{\partial z^{l+1}}{\partial z^l}$,所以关键在于求解$\frac{\partial z^{l+1}}{\partial z^l}$。而$z^{l+1}$和$z^l$的关系可以表示为$z^{l+1}=W^{l+1}a^l+b^{l+1}=W^{l+1}\sigma(z^l)+b^{l+1}$,可以得出如下关系:

$$\frac{\partial z^{l+1}}{\partial z^l}=(W^{l+1})^T\bigodot\begin{matrix}\underbrace{(\sigma^{'}(z^l),...,\sigma^{'}(z^l))}\\ n={l+1}\end{matrix}$$

代入上式可以得到:

$$\delta^l=\delta^{l+1}\frac{\partial z^{l+1}}{\partial z^l}=(W^{l+1})^T\delta^{l+1}\bigodot\sigma^{'}(z^{l})$$

综上,可以通过$\delta^l$求出对应l层的$W^l$和$b^l$的梯度。

2 - DNN反向传播伪代码

initialize all variables by random value
for loop from to num_epoch
choose x_i as the model input
compute the output of the output-layer a^L
compute the δ^L of the output-layer
for l=L to
compute the δ^l based on δ^(l+) and W^(l+) and z^l
compute the gradient of W^l and b^l
update the W^l and b^l in lth-layer:W^l = W^l-αsum(δ^l(a^(l-)^T), b^l=b^l-αsum(δ^l)

3 - 参考资料

https://www.cnblogs.com/pinard/p/6422831.html

深度学习——深度神经网络(DNN)反向传播算法的更多相关文章

  1. 神经网络之反向传播算法(BP)公式推导(超详细)

    反向传播算法详细推导 反向传播(英语:Backpropagation,缩写为BP)是"误差反向传播"的简称,是一种与最优化方法(如梯度下降法)结合使用的,用来训练人工神经网络的常见 ...

  2. 卷积神经网络(CNN)反向传播算法

    在卷积神经网络(CNN)前向传播算法中,我们对CNN的前向传播算法做了总结,基于CNN前向传播算法的基础,我们下面就对CNN的反向传播算法做一个总结.在阅读本文前,建议先研究DNN的反向传播算法:深度 ...

  3. (3)Deep Learning之神经网络和反向传播算法

    往期回顾 在上一篇文章中,我们已经掌握了机器学习的基本套路,对模型.目标函数.优化算法这些概念有了一定程度的理解,而且已经会训练单个的感知器或者线性单元了.在这篇文章中,我们将把这些单独的单元按照一定 ...

  4. 神经网络(NN)+反向传播算法(Backpropagation/BP)+交叉熵+softmax原理分析

    神经网络如何利用反向传播算法进行参数更新,加入交叉熵和softmax又会如何变化? 其中的数学原理分析:请点击这里.

  5. 深度学习之神经网络核心原理与算法-caffe&keras框架图片分类

    之前我们在使用cnn做图片分类的时候使用了CIFAR-10数据集 其他框架对于CIFAR-10的图片分类是怎么做的 来与TensorFlow做对比. Caffe Keras 安装 官方安装文档: ht ...

  6. 深度学习实战-----0001(移植反向传播Python to c++)

    1. https://mattmazur.com/2015/03/17/a-step-by-step-backpropagation-example/  老外教程 2. https://github. ...

  7. 深度神经网络(DNN)反向传播算法(BP)

    在深度神经网络(DNN)模型与前向传播算法中,我们对DNN的模型和前向传播算法做了总结,这里我们更进一步,对DNN的反向传播算法(Back Propagation,BP)做一个总结. 1. DNN反向 ...

  8. 深度学习之反向传播算法(BP)代码实现

    反向传播算法实战 本文仅仅是反向传播算法的实现,不涉及公式推导,如果对反向传播算法公式推导不熟悉,强烈建议查看另一篇文章神经网络之反向传播算法(BP)公式推导(超详细) 我们将实现一个 4 层的全连接 ...

  9. 深度学习课程笔记(三)Backpropagation 反向传播算法

    深度学习课程笔记(三)Backpropagation 反向传播算法 2017.10.06  材料来自:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS1 ...

随机推荐

  1. ElasticSearch6.5.0 【script_lang not supported】

    执行代码:[就是想根据条件更新]把品牌为LiNing的都改成Cat. UpdateByQueryRequestBuilder updateByQuery = UpdateByQueryAction.I ...

  2. 配置taBar所遇见的问题(踩坑之路)

    目前效果图: 问题:我遇见一个问题,点击每周关注的时候,他应该跳转到哪一个页面.在没有设置taBar还是可以跳转的. 解决方法是: 修改 open-type='navigate'为switchTab( ...

  3. CSS设置边框、符号、背景样式、链接属性

    一.CSS边框空白 padding-top:10px; /*上边框留空白*/ padding-right:10px; /*右边框留空白*/ padding-bottom:10px; /*下边框留空白* ...

  4. Java NIO系列教程(七) selector原理 Epoll版的Selector

    目录: Reactor(反应堆)和Proactor(前摄器) <I/O模型之三:两种高性能 I/O 设计模式 Reactor 和 Proactor> <[转]第8章 前摄器(Proa ...

  5. Hadoop记录-Hive调优:让任务并行执行

    set mapred.job.queue.name=pms;   //设置队列set hive.exec.reducers.max=8;  //设置最大的reducersset mapred.redu ...

  6. SqlServer中的事务使用

    一.事务的概念和特点 事务(transaction)是恢复和并发控制的基本单位. 事务的特点 原子性:事务是一个工作单元,要都成功,要么的失败 例子:A付款给B,A余额-100,B余额+100,只能都 ...

  7. 解决mysql:Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111)

    (一)出现问题的的报错信息 Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (111) ( ...

  8. spring cloud学习填坑笔记

    最近在学习spring cloud,由于学习资料具有普遍性,部分应个人原因导致的小细节问题,往往很难找到解决的办法.这特别记录一下自己遇到的一些问题. 一.eureka-server加入securit ...

  9. ZOJ - 3450 Doraemon's Railgun (dp)

    https://vjudge.net/problem/ZOJ-3450 题意 一座位落(X0,Y0)的城市将遭受n个敌人的摧残.现在我们手上有某科学的超电磁炮,每次攻击都是一条射线,对于共线的敌人,必 ...

  10. LeetCode(194.Transpose File)(awk进阶)

    194. Transpose File Given a text file file.txt, transpose its content. You may assume that each row ...