1.预备知识

对矩阵求导的理解可以借鉴我们高中熟悉的导数,在高中的时候我们都是对标量求导,标量其实也可以看成是一种特殊的1*1的矩阵。本文主要是为了记录机器学习中反向传播的过程,所以不对矩阵求导做过多的分析(事实上是我也不会,只会简单的)。

这里仅给出后面反向传播过程需要用到的一种矩阵求导的情形:
∂ ( a T x ) ∂ x = ∂ ( a 1 x 1 + a 2 x 2 + ⋯ + a n x n ) ∂ x = [ ∂ ( a 1 x 1 + a 2 x 2 + ⋯ + a n x n ) ∂ x 1 ∂ ( a 1 x 1 + a 2 x 2 + ⋯ + a n x n ) ∂ x 2 ⋮ ∂ ( a 1 x 1 + a 2 x 2 + ⋯ + a n x n ) ∂ x n ] = [ a 1 a 2 ⋮ a n ] = a \begin{aligned} \frac{\partial\left(\boldsymbol{a}^{T} \boldsymbol{x}\right)}{\partial \boldsymbol{x}} &=\frac{\partial\left(a_{1} x_{1}+a_{2} x_{2}+\cdots+a_{n} x_{n}\right)}{\partial \boldsymbol{x}} \\ &=\left[\begin{array}{l} \frac{\partial\left(a_{1} x_{1}+a_{2} x_{2}+\cdots+a_{n} x_{n}\right)}{\partial x_{1}} \\ \frac{\partial\left(a_{1} x_{1}+a_{2} x_{2}+\cdots+a_{n} x_{n}\right)}{\partial x_{2}} \\ \vdots \\ \frac{\partial\left(a_{1} x_{1}+a_{2} x_{2}+\cdots+a_{n} x_{n}\right)}{\partial x_{n}} \end{array}\right] \\ &=\left[\begin{array}{l} a_{1} \\ a_{2} \\ \vdots \\ a_{n} \end{array}\right] \\ &=\boldsymbol a \end{aligned} ∂x∂(aTx)​​=∂x∂(a1​x1​+a2​x2​+⋯+an​xn​)​=⎣ ⎡​∂x1​∂(a1​x1​+a2​x2​+⋯+an​xn​)​∂x2​∂(a1​x1​+a2​x2​+⋯+an​xn​)​⋮∂xn​∂(a1​x1​+a2​x2​+⋯+an​xn​)​​⎦ ⎤​=⎣ ⎡​a1​a2​⋮an​​⎦ ⎤​=a​
看懂这个我们就可以开始啦~

2.反向传播

我们开始向后传播:

隐藏层第2层:
激活函数 : d a [ 2 ] = ∂ L ∂ a [ 2 ] 激活函数: da^{[2]}=\frac{\partial L}{\partial a^{[2]}} 激活函数:da[2]=∂a[2]∂L​

d z [ 2 ] = ∂ L ∂ z [ 2 ] = ∂ L ∂ a [ 2 ] ⋅ ∂ a [ 2 ] ∂ z [ 2 ] = d a [ 2 ] ⋅ g [ 2 ] ’ ( z [ 2 ] ) dz^{[2]}=\frac{\partial L}{\partial z^{[2]}}=\frac{\partial L}{\partial a^{[2]}}·\frac{\partial a^{[2]}}{\partial z^{[2]}}=da^{[2]}·g^{[2]’}(z^{[2]}) dz[2]=∂z[2]∂L​=∂a[2]∂L​⋅∂z[2]∂a[2]​=da[2]⋅g[2]’(z[2])

d W [ 2 ] = ∂ L ∂ W [ 2 ] = ∂ L ∂ z [ 2 ] ⋅ ∂ z [ 2 ] ∂ W [ 2 ] = d z [ 2 ] ⋅ a [ 1 ] T ⇒ W [ 2 ] − = α ⋅ d W [ 2 ] dW^{[2]}=\frac{\partial L}{\partial W^{[2]}}=\frac{\partial L}{\partial z^{[2]}}·\frac{\partial z^{[2]}}{\partial W^{[2]}}=dz^{[2]}·a^{[1]T} \\ \Rightarrow W^{[2]}-=α·dW^{[2]} dW[2]=∂W[2]∂L​=∂z[2]∂L​⋅∂W[2]∂z[2]​=dz[2]⋅a[1]T⇒W[2]−=α⋅dW[2]

d b [ 2 ] = ∂ L ∂ b [ 2 ] = ∂ L ∂ z [ 2 ] ⋅ ∂ z [ 2 ] ∂ b [ 2 ] = d z [ 2 ] ⇒ b [ 2 ] − = α ⋅ d b [ 2 ] db^{[2]}=\frac{\partial L}{\partial b^{[2]}}=\frac{\partial L}{\partial z^{[2]}}·\frac{\partial z^{[2]}}{\partial b^{[2]}}=dz^{[2]} \\ \Rightarrow b^{[2]}-=α·db^{[2]} db[2]=∂b[2]∂L​=∂z[2]∂L​⋅∂b[2]∂z[2]​=dz[2]⇒b[2]−=α⋅db[2]

隐藏层第1层:
激活函数 : d a [ 1 ] = ∂ L ∂ a [ 1 ] = ∂ L ∂ z [ 2 ] ⋅ ∂ z [ 2 ] ∂ a [ 1 ] = W [ 2 ] T ⋅ d z [ 2 ] 激活函数: da^{[1]}=\frac{\partial L}{\partial a^{[1]}}=\frac{\partial L}{\partial z^{[2]}}·\frac{\partial z^{[2]}}{\partial a^{[1]}}=W^{[2]T}·dz^{[2]} 激活函数:da[1]=∂a[1]∂L​=∂z[2]∂L​⋅∂a[1]∂z[2]​=W[2]T⋅dz[2]
说实话,这一步的计算结果我有点没懂:

∂ L ∂ z [ 2 ] \frac{\partial L}{\partial z^{[2]}} ∂z[2]∂L​ 是 d z [ 2 ] dz^{[2]} dz[2], ∂ z [ 2 ] ∂ a [ 1 ] \frac{\partial z^{[2]}}{\partial a^{[1]}} ∂a[1]∂z[2]​ 是 W [ 2 ] T W^{[2]T} W[2]T,为什么相乘的结果是 W [ 2 ] T ⋅ d z [ 2 ] W^{[2]T}·dz^{[2]} W[2]T⋅dz[2],而不是 d z [ 2 ] ⋅ W [ 2 ] T dz^{[2]}·W^{[2]T} dz[2]⋅W[2]T。

d z [ 1 ] = ∂ L ∂ z [ 1 ] = ∂ L ∂ a [ 1 ] ⋅ ∂ a [ 1 ] ∂ z [ 1 ] = d a [ 1 ] ⋅ g [ 1 ] ’ ( z [ 1 ] ) dz^{[1]}=\frac{\partial L}{\partial z^{[1]}}=\frac{\partial L}{\partial a^{[1]}}·\frac{\partial a^{[1]}}{\partial z^{[1]}}=da^{[1]}·g^{[1]’}(z^{[1]}) dz[1]=∂z[1]∂L​=∂a[1]∂L​⋅∂z[1]∂a[1]​=da[1]⋅g[1]’(z[1])

d W [ 1 ] = ∂ L ∂ W [ 1 ] = ∂ L ∂ z [ 1 ] ⋅ ∂ z [ 1 ] ∂ W [ 1 ] = d z [ 1 ] ⋅ a [ 0 ] T ⇒ W [ 1 ] − = α ⋅ d W [ 1 ] dW^{[1]}=\frac{\partial L}{\partial W^{[1]}}=\frac{\partial L}{\partial z^{[1]}}·\frac{\partial z^{[1]}}{\partial W^{[1]}}=dz^{[1]}·a^{[0]T} \\ \Rightarrow W^{[1]}-=α·dW^{[1]} dW[1]=∂W[1]∂L​=∂z[1]∂L​⋅∂W[1]∂z[1]​=dz[1]⋅a[0]T⇒W[1]−=α⋅dW[1]

d b [ 1 ] = ∂ L ∂ b [ 1 ] = ∂ L ∂ z [ 1 ] ⋅ ∂ z [ 1 ] ∂ b [ 1 ] = d z [ 1 ] ⇒ b [ 1 ] − = α ⋅ d b [ 1 ] db^{[1]}=\frac{\partial L}{\partial b^{[1]}}=\frac{\partial L}{\partial z^{[1]}}·\frac{\partial z^{[1]}}{\partial b^{[1]}}=dz^{[1]} \\ \Rightarrow b^{[1]}-=α·db^{[1]} db[1]=∂b[1]∂L​=∂z[1]∂L​⋅∂b[1]∂z[1]​=dz[1]⇒b[1]−=α⋅db[1]

3.总结

第l层:
激活函数 : d a [ l ] = ∂ L ∂ a [ l ] = ∂ L ∂ z [ l + 1 ] ⋅ ∂ z [ l + 1 ] ∂ a [ l ] = W [ l + 1 ] T ⋅ d z [ l + 1 ] 激活函数: da^{[l]}=\frac{\partial L}{\partial a^{[l]}}=\frac{\partial L}{\partial z^{[l+1]}}·\frac{\partial z^{[l+1]}}{\partial a^{[l]}}=W^{[l+1]T}·dz^{[l+1]} 激活函数:da[l]=∂a[l]∂L​=∂z[l+1]∂L​⋅∂a[l]∂z[l+1]​=W[l+1]T⋅dz[l+1]

d z [ l ] = ∂ L ∂ z [ l ] = ∂ L ∂ a [ l ] ⋅ ∂ a [ l ] ∂ z [ l ] = d a [ l ] ⋅ g [ l ] ’ ( z [ l ] ) ⇒ d z [ l ] = W [ l + 1 ] T d z [ l + 1 ] ⋅ g [ l ] ’ ( z [ l ] ) dz^{[l]}=\frac{\partial L}{\partial z^{[l]}}=\frac{\partial L}{\partial a^{[l]}}·\frac{\partial a^{[l]}}{\partial z^{[l]}}=da^{[l]}·g^{[l]’}(z^{[l]}) \\ \Rightarrow dz^{[l]}=W^{[l+1]T}dz^{[l+1]}·g^{[l]’}(z^{[l]}) dz[l]=∂z[l]∂L​=∂a[l]∂L​⋅∂z[l]∂a[l]​=da[l]⋅g[l]’(z[l])⇒dz[l]=W[l+1]Tdz[l+1]⋅g[l]’(z[l])

d W [ l ] = ∂ L ∂ W [ l ] = ∂ L ∂ z [ l ] ⋅ ∂ z [ l ] ∂ W [ l ] = d z [ l ] ⋅ a [ l − 1 ] T ⇒ W [ l ] − = α ⋅ d W [ l ] dW^{[l]}=\frac{\partial L}{\partial W^{[l]}}=\frac{\partial L}{\partial z^{[l]}}·\frac{\partial z^{[l]}}{\partial W^{[l]}}=dz^{[l]}·a^{[l-1]T} \\ \Rightarrow W^{[l]}-=α·dW^{[l]} dW[l]=∂W[l]∂L​=∂z[l]∂L​⋅∂W[l]∂z[l]​=dz[l]⋅a[l−1]T⇒W[l]−=α⋅dW[l]

d b [ l ] = ∂ L ∂ b [ l ] = ∂ L ∂ z [ l ] ⋅ ∂ z [ l ] ∂ b [ l ] = d z [ l ] ⇒ b [ l ] − = α ⋅ d b [ l ] db^{[l]}=\frac{\partial L}{\partial b^{[l]}}=\frac{\partial L}{\partial z^{[l]}}·\frac{\partial z^{[l]}}{\partial b^{[l]}}=dz^{[l]} \\ \Rightarrow b^{[l]}-=α·db^{[l]} db[l]=∂b[l]∂L​=∂z[l]∂L​⋅∂b[l]∂z[l]​=dz[l]⇒b[l]−=α⋅db[l]

机器学习反向传播的一些推导公式相关推荐

  1. 机器学习 反向传播_机器学习中的神秘化反向传播:您想了解的隐藏数学

    机器学习 反向传播 By Ibrahima "Prof" Traore, ML expert at Wildcard / w6d.io 作者:Wildcard / w6d.io的 ...

  2. 深度学习中反向传播算法简单推导笔记

    反向传播算法简单推导笔记 1.全连接神经网络 该结构的前向传播可以写成: z(1)=W(1)x+b(1)z^{(1)} = W^{(1)}x+b^{(1)}z(1)=W(1)x+b(1) a(1)=σ ...

  3. 吴恩达机器学习——反向传播算法

    吴恩达机器学习--反向传播算法 1.误差 $\delta^{(3)}$, $\delta^{(2)}$的推导 2.反向传播算法的计算过程 前言:反向传播算法是用来求偏导数的,即 σJ(θ)σθij(2 ...

  4. Batch Normalization 反向传播(backpropagation )公式的推导

    What does the gradient flowing through batch normalization looks like ? 反向传播梯度下降权值参数更新公式的推导全依赖于复合函数求 ...

  5. 多层感知机Perceptron反向传播BP算法推导(Back Propagation)

    看了很多BP的推导,都不够简洁直观,这里总结一下.多层Perceptron就是全连接的网络,定义第l层的输入为x(l)x^{(l)}x(l),那么全连接的线性输出z(l)=W(l)x(l)+b(l)z ...

  6. 深度神经网络的反向传播算法数学推导

    导是在看了这两篇文章之后写的https://www.cnblogs.com/pinard/p/6422831.html https://zhuanlan.zhihu.com/p/24709748 只是 ...

  7. 机器学习之五:神经网络、反向传播算法推导

    一.逻辑回归的局限 在逻辑回归一节中,使用逻辑回归的多分类,实现了识别20*20的图片上的数字. 但所使用的是一个一阶的模型,并没有使用多项式,为什么? 可以设想一下,在原有400个特征的数据样本中, ...

  8. 100天搞定机器学习|day37 无公式理解反向传播算法之精髓

     100天搞定机器学习(Day1-34) 100天搞定机器学习|Day35 深度学习之神经网络的结构 100天搞定机器学习|Day36 深度学习之梯度下降算法 本篇为100天搞定机器学习之第37天,亦 ...

  9. 反向传播算法推导(交叉熵代价函数-吴恩达机器学习)

    0. 前言 第一次看吴恩达老师机器学习视频时, 在9.29.29.2节卡住.看到评论区别人解答(Arch725 的解答)发现有一些疏漏,而且缺少一些铺垫,所以进行了一些修改补充. 本文的反向传播算法的 ...

最新文章

  1. TensorRT 7.2.1 开发概要(下)
  2. Python 合并2个list
  3. 什么是防火墙,真正意义上的防火墙
  4. TeX下的Markdown包
  5. boost::fusion::as_set用法的测试程序
  6. 分布式事务与一致性算法Paxos amp; raft amp; zab
  7. 在Linux上使用的10种云备份方案
  8. php常用数组,php常用数组函数
  9. Python 植物大战僵尸代码实现(2):植物卡片选择和种植
  10. Paragraph ended before \CJK@XX was complete
  11. 网络工程师考试知识点[必考知识点]--必看
  12. python写贪吃蛇游戏
  13. 互联网日报 | 5月18日 星期二 | 中国移动启动A股上市;京东物流启动全球招股;快手发布首款自研手游产品...
  14. 【论文翻译】Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
  15. Qt--模拟按下按键(键盘)
  16. matlab中除法的使用,错误使用 / 矩阵维度必须一致
  17. 老罗的android rss,为新品打气?罗永浩再作惊人语:锤子系统比安卓苹果好30%以上...
  18. 如何正确理解店宝宝软件
  19. 小公司里面的 Python 后端,数据库(MySQL)到底要学习到什么程度?
  20. python画聚类图、并且把聚类图保存起来_Python利用igraph绘制复杂网络聚类(社区检测)结果图-Go语言中文社区...

热门文章

  1. 利用python脚本自动发布服务之arcmap篇
  2. 轻松剪辑、合并和添加特效,快速完成视频处理——掌握MoviePy库
  3. java 鱼刺图_鱼骨图问题分析法
  4. WebTours示例程序的订票流程-脚本
  5. 打破冯·诺依曼结构,中国的类脑芯片已经来了!
  6. 【方法】 如何批量将RAR或其他压缩格式转换成ZIP?
  7. 一个动态ACL的案例
  8. jzoj3208. 【JSOI2013】编程作业(kmp)
  9. ERR_UNSAFE_PORT解决以及所有非安全端口
  10. 【BFS瞎搜】九宫重排