神经网络入门篇:直观理解反向传播(Backpropagation intuition)
详细推导反向传播
下图是逻辑回归的推导:
回想一下逻辑回归的公式(参考公式1.2、公式1.5、公式1.6、公式1.15)
公式1.38:
\begin{array}{l}
{x }\\
{w }\\
{b }
\end{array}
\right\}
\implies{z={w}^Tx+b}
\implies{\alpha = \sigma(z)}
\implies{{L}\left(a,y \right)}
\]
所以回想当时我们讨论逻辑回归的时候,我们有这个正向传播步骤,其中我们计算\(z\),然后\(a\),然后损失函数\(L\)。
公式1.39:
\left.
\begin{array}{l}
{x }\\
{w }\\
{b }
\end{array}
\right\}
}_{dw={dz}\cdot x, db =dz}
\impliedby\underbrace{{z={w}^Tx+b}}_{dz=da\cdot g^{'}(z),
g(z)=\sigma(z),
{\frac{{dL}}{dz}}={\frac{{dL}}{da}}\cdot{\frac{da}{dz}},
{\frac{d}{ dz}}g(z)=g^{'}(z)}
\impliedby\underbrace{{a = \sigma(z)}
\impliedby{L(a,y)}}_{da={\frac{{d}}{da}}{L}\left(a,y \right)=(-y\log{\alpha} - (1 - y)\log(1 - a))^{'}={-\frac{y}{a}} + {\frac{1 - y}{1 - a}{}} }
\]
神经网络的计算中,与逻辑回归十分类似,但中间会有多层的计算。下图是一个双层神经网络,有一个输入层,一个隐藏层和一个输出层。
前向传播:
计算\(z^{[1]}\),\(a^{[1]}\),再计算\(z^{[2]}\),\(a^{[2]}\),最后得到loss function。
反向传播:
向后推算出\(da^{[2]}\),然后推算出\(dz^{[2]}\),接着推算出\(da^{[1]}\),然后推算出\(dz^{[1]}\)。我们不需要对\(x\)求导,因为\(x\)是固定的,我们也不是想优化\(x\)。向后推算出\(da^{[2]}\),然后推算出\(dz^{[2]}\)的步骤可以合为一步:
公式1.40:
\(dz^{[2]}=a^{[2]}-y\;,\;dW^{[2]}=dz^{[2]}{a^{[1]}}^{T}\)
(注意:逻辑回归中;为什么\(a^{[1]T}\)多了个转置:\(dw\)中的\(W\)(视频里是\(W^{[2]}_i\))是一个列向量,而\(W^{[2]}\)是个行向量,故需要加个转置);
公式1.41:
\(db^{[2]}=dz^{[2]}\)
公式1.42:
\(dz^{[1]} = W^{[2]T}dz^{[2]}* g[1]^{'}(z^{[1]})\)
注意:这里的矩阵:\(W^{[2]}\)的维度是:\((n^{[2]},n^{[1]})\)。
\(z^{[2]}\) , \(dz^{[2]}\)的维度都是:\((n^{[2]},1)\),如果是二分类,那维度就是\((1,1)\)。
\(z^{[1]}\),\(dz^{[1]}\)的维度都是:\((n^{[1]},1)\)。
证明过程:
见公式1.42,其中\(W^{[2]T}dz^{[2]}\)维度为:\((n^{[1]},n^{[2]})\)、\((n^{[2]},1)\)相乘得到\((n^{[1]},1)\),和\(z^{[1]}\)维度相同,
\(g[1]^{'}(z^{[1]})\)的维度为\((n^{[1]},1)\),这就变成了两个都是\((n^{[1]},1)\)向量逐元素乘积。
实现后向传播有个技巧,就是要保证矩阵的维度相互匹配。最后得到\(dW^{[1]}\)和\(db^{[1]}\),公式1.43:
\(dW^{[1]} =dz^{[1]}x^{T},db^{[1]} = dz^{[1]}\)
可以看出\(dW^{[1]}\) 和\(dW^{[2]}\) 非常相似,其中\(x\)扮演了\(a^{[0]}\)的角色,\(x^{T}\) 等同于\(a^{[0]T}\)。
由:
\(Z^{[1]} = W^{[1]}x + b^{[1]}\;,\;a^{[1]}=g^{[1]}(Z^{[1]})\)
得到:
\(Z^{[1]} = W^{[1]}x + b^{[1]}, A^{[1]} = g^{[1]}(Z^{[1]})\)
\left[
\begin{array}{c}
\vdots &\vdots & \vdots & \vdots \\
z^{[1](1)} & z^{[1](2)} & \vdots & z^{[1](m)} \\
\vdots &\vdots & \vdots & \vdots \\
\end{array}
\right]
\]
注意:大写的\(Z^{[1]}\)表示\(z^{[1](1)},z^{[1](2)},z^{[1](3)}...z^{[1](m)}\)的列向量堆叠成的矩阵,以下类同。
下图写了主要的推导过程:
公式1.44:
\(dZ^{[2]}=A^{[2]}-Y\;,\;dW^{[2]}={\frac{1}{m}}dZ^{[2]}{A^{[1]}}^{T}\)
公式1.45:
\(L = {\frac{1}{m}}\sum_i^n{L(\hat{y},y)}\)
公式1.46:
\(db^{[2]} = {\frac{1}{m}}np.sum(dZ^{[2]},axis=1,keepdims=True)\)
公式1.47:
\(\underbrace{dZ^{[1]}}_{(n^{[1]}, m)} = \underbrace{W^{[2]T}dZ^{[2]}}_{(n^{[1]}, m)}*\underbrace{g[1]^{'}
(Z^{[1]})}_{(n^{[1]}, m)}\)
公式1.48:
\(dW^{[1]} = {\frac{1}{m}}dZ^{[1]}x^{T}\)
公式1.49:
$db^{[1]} = {\frac{1}{m}}np.sum(dZ^{[1]},axis=1,keepdims=True) $
反向传播的推导是机器学习领域最难的数学推导之一,矩阵的导数要用链式法则来求,如果这篇博客理解不了也没大的关系,只要有这种直觉就可以了。还有一点,就是初始化你的神经网络的权重,不要都是0,而是随机初始化。
神经网络入门篇:直观理解反向传播(Backpropagation intuition)的更多相关文章
- 如何理解反向传播 Backpropagation 梯度下降算法要点
http://colah.github.io/posts/2015-08-Backprop/ http://www.zhihu.com/question/27239198 待翻译 http://blo ...
- SGD 讲解,梯度下降的做法,随机性。理解反向传播
SGD 讲解,梯度下降的做法,随机性.理解反向传播 待办 Stochastic Gradient Descent 随机梯度下降没有用Random这个词,因为它不是完全的随机,而是服从一定的分布的,只是 ...
- 100天搞定机器学习|day37 无公式理解反向传播算法之精髓
100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...
- 反向传播BackPropagation
http://www.cnblogs.com/charlotte77/p/5629865.html http://www.cnblogs.com/daniel-D/archive/2013/06/03 ...
- 反向传播 Backpropagation
前向计算:没啥好说的,一层一层套着算就完事了 y = f( ... f( Wlayer2T f( Wlayer1Tx ) ) ) 反向求导:链式法则 单独看一个神经元的计算,z (就是logit)对 ...
- 【python实现卷积神经网络】卷积层Conv2D反向传播过程
代码来源:https://github.com/eriklindernoren/ML-From-Scratch 卷积神经网络中卷积层Conv2D(带stride.padding)的具体实现:https ...
- .NetCore 入门篇:理解
(良心转载)原文地址:https://ken.io/note/dotnet-core-qucikstart-preface 一..NET Core的诞生 聊 .NET Core,就不得不说他的爸爸 . ...
- 深度学习与CV教程(4) | 神经网络与反向传播
作者:韩信子@ShowMeAI 教程地址:http://www.showmeai.tech/tutorials/37 本文地址:http://www.showmeai.tech/article-det ...
- DL反向传播理解
作者:寒小阳 时间:2015年12月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50321873 声明:版权所有,转载请联系作者并注明 ...
- BP(back propagation)反向传播
转自:http://www.zhihu.com/question/27239198/answer/89853077 机器学习可以看做是数理统计的一个应用,在数理统计中一个常见的任务就是拟合,也就是给定 ...
随机推荐
- 造轮子之ORM集成
Dotnet的ORM千千万,还是喜欢用EF CORE 前面一些基础完成的差不多了,接下来可以集成数据库了,官方出品的ORM还是比较香.所以接下来就是来集成EF CORE. 安装包 首先我们需要安装一下 ...
- liunx知识点--umask
介绍 umask(user's mask)用来设置文件权限掩码.权限掩码是由3个八进制的数字所组成,将现有的存取权限减掉权限掩码后,即可产生建立文件时预设的权限. UNIX最初实现时不包含umask命 ...
- Avalonia 实现视频聊天、远程桌面(源码,支持Windows、Linux、国产OS)
现在最火的.NET跨平台UI框架莫过于Avalonia了.Avalonia 基于.NET Core,因此它可以运行在任何支持.NET Core的平台上.之前基于CPF跨平台UI框架写过一个视频聊天的d ...
- 小景的工具使用--Java诊断工具Arthas的使用说明
小景最近在做程序和数据库的压测工作,期间监控压测数据,分析程序原因变成了一个待解决的问题,根据公司小伙伴的建议,接触了阿尔萨斯这个诊断工具,下面小景分别基于Linux操作系统和Windows操作系统, ...
- 广义 SAM 学习笔记
开 CF 开到了一道广义 SAM,决定来学一学. 发现网上确实充斥着各种各样的伪广义 SAM,也看到了前人反复修改假板子的过程,所以试着来整理一下这堆奇奇怪怪的问题. 当然本文的代码也不保证百分百正确 ...
- 完蛋!我被 Out of Memory 包围了!
是极致魅惑.洒脱自由的Java heap space? 是知性柔情.温婉大气的GC overhead limit exceeded? 是纯真无邪.活泼可爱的Metaspace? 如果以上不是你的菜,那 ...
- jap复制一条数据插入数据库,报:identifier of an instance of com.kxkd.shop.entity.goods.GoodsSpu was alt
因为修改了jpa实体id 可以先使用springframework的BeanUtils复制一个相同的对象 BeanUtils.copyProperties(source, target); //复制属 ...
- npm 发布包时 图片打包在新的项目引入不显示 路径错误解决方案
使用的是vue-cli 4.0以上脚手架 vue2.6 封装好组件后 npm publish ,在其他项目引入该组件库 图片显示失败 打开F12时看到 组件库里图片是/img/图片名,可是该项目没有此 ...
- dsBlog前后台博客系统
博客简介:本博客采用Spring Boot + LayUI做为基础,进行的博客系统开发,与boot+vue相比,更为适合开发简单的系统,并且更容易上手,简单!高效!更易上手! Spring Boot ...
- 又欲又撩人,基于新版Bert-vits2V2.0.2音色模型雷电将军八重神子一键推理整合包分享
Bert-vits2项目近期炸裂更新,放出了v2.0.2版本的代码,修正了存在于2.0先前版本的重大bug,并且重炼了底模,本次更新是即1.1.1版本后最重大的更新,支持了三语言训练及混合合成,并且做 ...