深度学习系列笔记(一)——深度学习简介与反向传播机制

2023-11-07

深度学习的发展趋势

回顾一下deep learning的历史:

  • 1958: Perceptron (linear model)
  • 1969: Perceptron has limitation
  • 1980s: Multi-layer perceptron
    • Do not have significant difference from DNN today
  • 1986: Backpropagation
    • Usually more than 3 hidden layers is not helpful
  • 1989: 1 hidden layer is “good enough”, why deep?
  • 2006: RBM initialization (breakthrough)
  • 2009: GPU
  • 2011: Start to be popular in speech recognition
  • 2012: win ILSVRC image competition 感知机(Perceptron)非常像我们的逻辑回归(Logistics Regression)只不过是没有sigmoid激活函数。09年的GPU的发展是很关键的,使用GPU矩阵运算节省了很多的时间。

Fully Connect Feedforward Network举例

在这里插入图片描述
也可以写成矩阵形式:
在这里插入图片描述
s i g m o i d sigmoid sigmoid ( ( 权重w【黄色】 × \times × 输入【蓝色】 + + + 偏移量b【绿色】 ) ) = = = 输出

反向传播

符号表示

  1. 损失函数(Loss function)是定义在单个训练样本上的,也就是就算一个样本的误差,比如我们想要分类,就是预测的类别和实际类别的区别,是一个样本的,用 l l l表示。
  2. 代价函数(Cost function)是定义在整个训练集上面的,也就是所有样本的误差的总和的平均,也就是损失函数的总和的平均,有没有这个平均其实不会影响最后的参数的求解结果。
  3. 总体损失函数(Total loss function)是定义在整个训练集上面的,也就是所有样本的误差的总和。也就是平时我们反向传播需要最小化的值,用 L L L表示。

符号解释
如图, C n C^n Cn 是一个表示 y n y^n yn y ^ n \hat{y}^n y^n 之间距离的函数。 L ( θ ) L(\theta) L(θ) (total loss)是总的 C n C^n Cn 之和。

计算Loss对Params的偏导数

取一个Neuron来看
在这里插入图片描述

符号说明

如图, x 1 , x 2 x_1,x_2 x1,x2是input, w 1 , w 2 w_1, w_2 w1,w2是weight, b b b是bias, z = x 1 w 1 + x 2 w 2 + b z=x_1w_1+x_2w_2+b z=x1w1+x2w2+b是激活前的值, a a a是经过途中蓝色神经元激活后(比如sigmoid)的值。
在这里插入图片描述

过程

我们要计算的目标是 ∂ l ∂ w \frac{\partial l}{\partial w} wl, 由链式法则 ∂ l ∂ w = ∂ z ∂ w × ∂ l ∂ z \frac{\partial l}{\partial w}=\frac{\partial z}{\partial w}\times \frac{\partial l}{\partial z} wl=wz×zl.
在这里插入图片描述

  • ∂ z ∂ w \frac{\partial z}{\partial w} wz(Forward pass的部分)
    • 可以秒算,因为 z = ∑ i = 1 n a i w i z=\sum_{i=1}^{n} a_iw_i z=i=1naiwi,其中 a i a_i ai是前一个神经元的输入,所以一个 ∂ z ∂ w \frac{\partial z}{\partial w} wz就是 a a a.
  • ∂ l ∂ z \frac{\partial l}{\partial z} zl ( Backward pass的部分 )

    • 初看貌似很复杂,但我们把整个网络方向反过来看,同样利用链式法则, ∂ l ∂ z = ∂ a ∂ z × ∂ l ∂ a \frac{\partial l}{\partial z}=\frac{\partial a}{\partial z} \times \frac{\partial l}{\partial a} zl=za×al.
    • ∂ a ∂ z \frac{\partial a}{\partial z} za σ ′ ( z ) \sigma'(z) σ(z),当输入确定后,逐层迭代,它就是一个定值.
    • ∂ l ∂ a \frac{\partial l}{\partial a} al类比于正向传播,同样利用链式法则, ∂ l ∂ a = ∑ i = 1 n ∂ z i ∂ a × ∂ l ∂ z i \frac{\partial l}{\partial a}=\sum_{i=1}^n \frac{\partial z_i}{\partial a}\times\frac{\partial l}{\partial z_i} al=i=1nazi×zil
      • 其中 ∂ z ∂ a \frac{\partial z}{\partial a} az可以秒算,就是 w i w_i wi(因为 z = ∑ i = 1 n a i w i z=\sum_{i=1}^{n} a_iw_i z=i=1naiwi)
      • ∂ l ∂ z i \frac{\partial l}{\partial z_i} zil当确定了loss function( l ( y , y ^ ) l(y,\hat{y}) l(y,y^))之后也不复杂(常见的loss function比如交叉熵、mean square等)
        ……
        套娃下去,从output往前看。
  • ∂ z ∂ w \frac{\partial z}{\partial w} wz ∂ l ∂ z \frac{\partial l}{\partial z} zl相乘,我们就可以得到 ∂ l ∂ w \frac{\partial l}{\partial w} wl, 即 ∂ l ∂ w = ∂ z ∂ w × ∂ l ∂ z \frac{\partial l}{\partial w}=\frac{\partial z}{\partial w}\times \frac{\partial l}{\partial z} wl=wz×zl.

  • 所有我们就可以得到神经网络中所有的参数,然后用梯度下降就可以不断更新,得到损失最小的函数。

例子

我成功的把自己也绕晕了,用一个简单的例子再梳理一下后向传播

在这里插入图片描述

如图,从输出层往前看,

  • 首先 ∂ l ∂ z 5 = ∂ l ∂ y 1 × ∂ y 1 ∂ z 5 = σ ′ ( z 5 ) ∂ l ∂ y 1 \frac{\partial l}{\partial z_5}=\frac{\partial l}{\partial y_1}\times\frac{\partial y_1}{\partial z_5} = \sigma'(z_5)\frac{\partial l}{\partial y_1} z5l=y1l×z5y1=σ(z5)y1l
    同理 ∂ l ∂ z 6 = ∂ l ∂ y 6 × ∂ y 2 ∂ z 6 = σ ′ ( z 6 ) ∂ l ∂ y 2 \frac{\partial l}{\partial z_6}=\frac{\partial l}{\partial y_6}\times\frac{\partial y_2}{\partial z_6} = \sigma'(z_6)\frac{\partial l}{\partial y_2} z6l=y6l×z6y2=σ(z6)y2l
    公式中每个量都是可算的,好的,那么目前为止,我们把 ∂ l ∂ z 5 , ∂ l ∂ z 6 \frac{\partial l}{\partial z_5},\frac{\partial l}{\partial z_6} z5lz6l直接当做已知量喽。
  • 继续, ∂ l ∂ z 3 = ∂ l ∂ a 3 × ∂ a 3 ∂ z 3 = σ ′ ( z 3 ) ∂ l ∂ a 3 \frac{\partial l}{\partial z_3}=\frac{\partial l}{\partial a_3}\times\frac{\partial a_3}{\partial z_3} = \sigma'(z_3)\frac{\partial l}{\partial a_3} z3l=a3l×z3a3=σ(z3)a3l
    • 又因为 z 5 = w 11 ′ a 3 + w 21 ′ a 4 , z 6 = w 12 ′ a 3 + w 22 ′ a 4 z_5 = w_{11}'a_3+w_{21}'a_4, z_6 = w_{12}'a_3+w_{22}'a_4 z5=w11a3+w21a4,z6=w12a3+w22a4,即 a 3 a_3 a3 z 5 , z 6 z_5, z_6 z5,z6都有关, a 3 a_3 a3 z 5 , z 6 z_5, z_6 z5,z6的函数, 用 a 3 ( z 5 , z 6 ) a_3(z_5, z_6) a3(z5,z6)表示.

    • 所以,继续链式法则: ∂ l ∂ a 3 = ∂ l ∂ z 5 × ∂ z 5 ∂ a 3 + ∂ l ∂ z 6 × ∂ z 6 ∂ a 3 \frac{\partial l}{\partial a_3}=\frac{\partial l}{\partial z_5}\times\frac{\partial z_5}{\partial a_3}+\frac{\partial l}{\partial z_6}\times\frac{\partial z_6}{\partial a_3} a3l=z5l×a3z5+z6l×a3z6,由前面计算, ∂ l ∂ z 5 , ∂ l ∂ z 6 \frac{\partial l}{\partial z_5},\frac{\partial l}{\partial z_6} z5l,z6l是已知量; ∂ z 5 ∂ a 3 = w 11 ′ , ∂ z 6 ∂ a 3 = w 12 ′ \frac{\partial z_5}{\partial a_3}=w_{11}', \frac{\partial z_6}{\partial a_3}=w_{12}' a3z5=w11,a3z6=w12

    • 整理得 ∂ l ∂ z 3 = ∂ l ∂ a 3 × ∂ a 3 ∂ z 3 = σ ′ ( z 3 ) ∂ l ∂ a 3 = σ ′ ( z 3 ) ( ∂ l ∂ z 5 w 11 ′ + ∂ l ∂ z 6 w 12 ′ ) \frac{\partial l}{\partial z_3}=\frac{\partial l}{\partial a_3}\times\frac{\partial a_3}{\partial z_3} = \sigma'(z_3)\frac{\partial l}{\partial a_3}=\sigma'(z_3)(\frac{\partial l}{\partial z_5}w_{11}'+\frac{\partial l}{\partial z_6}w_{12}') z3l=a3l×z3a3=σ(z3)a3l=σ(z3)(z5lw11+z6lw12)
      同理 ∂ l ∂ z 4 = ∂ l ∂ a 4 × ∂ a 4 ∂ z 4 = σ ′ ( z 4 ) ∂ l ∂ a 4 = σ ′ ( z 4 ) ( ∂ l ∂ z 5 w 21 ′ + ∂ l ∂ z 6 w 22 ′ ) \frac{\partial l}{\partial z_4}=\frac{\partial l}{\partial a_4}\times\frac{\partial a_4}{\partial z_4} = \sigma'(z_4)\frac{\partial l}{\partial a_4}=\sigma'(z_4)(\frac{\partial l}{\partial z_5}w_{21}'+\frac{\partial l}{\partial z_6}w_{22}') z4l=a4l×z4a4=σ(z4)a4l=σ(z4)(z5lw21+z6lw22)
      ……
      后面再继续套娃,即可第一层算出 ∂ l ∂ z \frac{\partial l}{\partial z} zl

恩,滤了一遍,我把自己捋清楚了,但我估计看的人还是很晕。其实懂了之后过程很简单,就是有些繁琐,手写很快就捋完了,附一个手写版本。
在这里插入图片描述

参考文献

本文笔记摘自Datawhale组队学习,仅仅结合自己的理解略加修改。

  1. Datawhale2021年12月组队学习开源文档P13深度学习简介
  2. Datawhale2021年12月组队学习开源文档P14反向传播
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

深度学习系列笔记(一)——深度学习简介与反向传播机制 的相关文章

随机推荐

  • 保存textarea编辑格式到数据库,并在div中正确显示出来

    一 保存textarea编辑格式到数据库 在textarea中输入回车符 在js读取textarea中的值有 r n然后到业务层转换到string中就有可能变成空格形式然后被存入数据库 当在取出此值的时候则会变成空格的形式 因此我们需要将不
  • javaWeb监听器

    JavaWeb监听器 三大组件 Servlet Listener Filter 监听器 接口 内容由我们来实现 它需要注册 例如注册在按钮上 监听器中的方法 会在特殊事件发生时调用 观察者 事件源 事件 监听器 javaweb中的监听器 事
  • 如何画时序图

    10年产品经理教你3步画好UML时序图 轻松掌握流程分析利器 建议收藏 知乎 转自知乎 上次介绍了活动图 这次分享 UML 中 另一种流程分析利器 时序图 以前每次要分析流程 我都会用活动图 直到有一次 我面对一个业务流程 画活动图 画来画
  • 用UDP实现client程序发送字符串到server程序,server程序将字符串打印出来。

    server c include
  • Java中Scanner.useDelimiter( )方法使用

    在Java语言中 格式化输入是通过类java util Scanner来完成的 默认情况下 Scanner是使用 空白 作为分隔符将输入分解为标记 然后使用它所提供的不同的next方法将得到的标记转换为不同的类型的值 Scanner sca
  • matlab 图像压缩 奇异值分解 SVD 代码仿真实现

    首先 在对图像进行奇异值分解之前 我们应当明白SVD的原理 在矩阵原理这门课里 我们曾经学过奇异值分解 其中讲到 奇异值分解可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示 这些小矩阵描述的是矩阵的重要的特性 在这里 我推荐对奇
  • 开源订单管理系统

    系统概述 随着企业信息化管理的不断深化 数字化技术对企业发展影响加深 为优化企业服务 最大程度提升客户体验及企业管理 开源字节与客户进行深入沟通需求 定制研发了开源订单管理系统 客户订单管理是现代企业商务业务的重要组成部分 可以帮助企业解决
  • HashMap源码-Put详解(HashMap是如何添加元素的)

    HashMap是Java中很重要一个部分 内容较多 因此笔者在此将其拆成一个个小块 作为自己学习知识整理的同时 也和广大网友一起讨论 也因此 在完成系列的学习之前 将以这种小节的形式进行学习分享 并在学习结束后进行整合 排序 一 HashM
  • Vagrant快速入门教程

    之前学习Docker的时候 发现了Vagrant 感觉这也是一个挺方便的技术 但是我下载安装完Vagrant的时候 发现恰好VirtualBox发了新版本 Vagrant还没兼容 所以这篇文章一直拖到了现在 昨天正好Vagrant更新了版本
  • function函数

    一 第一个function函数 1 在代码中书写的function函数默认情况下是不执行的 2 function函数只有在调用的时候才能被执行 函数是使用函数名来进行调用的 并且函数名的后面必须带有一对括号 3 可以多次调用函数 可以使用循
  • top命令详解

    一 参数 参数 意义 使用示例 hv 显示版本和帮助 top h top v top hv d 每隔多长时间刷新一次 单位是秒 默认5s top d 3 n 最多刷新几次退出 top n 5 u U 展示指定用户的信息 top u root
  • Windows10下实现输出到屏幕并且保存在文件中

    日期 2018 06 23 问题描述 有时 我们需要将执行后的输出不仅要显示在屏幕上 还想要将其保存一份文件 以便日后查看 这里 主要利用Windows10下PowerShell实现该功能 Windows PowerShell可以认为是命令
  • C语言《数据结构》——图的概念和创建,遍历

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 文章目录 前言 例如 随着计算机网络的发展 编程成了一种很常见且重要的职业 学好编程就要学好数据结构 下面将介绍数据结构中的图结构 一 什么是 图 二 图的基础知识和表示 1
  • 这三个 Go 水平自测题,你手写不出来还是先老实上班吧,过来看看

    现在技术文章特别卷 啥啥底层都能给你分析的头头是道 但是分析的对不对要看作者水平 很有可能一个错 抄他的那些人也跟着错 因为我以前看源码的时候就经常感觉自己在两种状态下切换 懂了 娘咧漏看了 这个函数干啥的 八股文这个事儿 其实也特别考验面
  • 如何去除WinRAR弹窗广告

    WinRAR 作为知名的老牌压缩软件 二十余年来始终风靡全球 经久不衰 但对于中国用户 其简体中文的个人免费版安装后会有 评估版本 的标记 而且每次启动时会有代理商的弹窗广告 本文教你如何去除标记和弹窗广告 让你的 WinRAR 恢复纯净体
  • 最优控制的理解

    最优控制 在满足一定约束的情况下 寻求最优控制策略 使得性能指标取极大值或极小值 对一个受控的动力学系统 从一类允许的控制方案中寻找一个最优的控制方案 使得系统的运动从由某个初始状态转移到目标状态的同时 其性能指标值为最优 性质 在一般的情
  • Cartoon头像 InsCode Stable Diffusion 美图活动一期

    一 简单介绍和活动地址 简单介绍 试用Stable Diffusion 模型生成优质人物好图 更简单地炼丹 InsCode是一个集成了在线IDE 在线AI编程 在线算力租赁 在线项目部署以及在线SD 模型使用的综合代码开发平台 不论你是初级
  • 基础算法题——找筷子(位的异或)

    找筷子 题目描述 经过一段时间的紧张筹备 电脑小组的 RP 餐厅 终于开业了 这天 经理 LXC 接到了一个定餐大单 可把大家乐坏了 员工们齐心协力按要求准备好了套餐正准备派送时 突然碰到一个棘手的问题 筷子 CX 小朋友找出了餐厅中所有的
  • VS+Qt应用开发,设置软件图标Icon

    VS Qt应用开发 设置软件图标Icon 前言 一 索然无味的默认icon图标 二 如何设置自己喜欢的icon图标 1 选择自己喜欢的图标 2 设置可执行文件 exe 图标 3 设置标题栏和任务栏图标 三 效果 四 工程源码 前言 VS版本
  • 深度学习系列笔记(一)——深度学习简介与反向传播机制

    深度学习简介 深度学习的发展趋势 Fully Connect Feedforward Network举例 反向传播 符号表示 计算Loss对Params的偏导数 符号说明 过程 例子 参考文献 深度学习的发展趋势 回顾一下deep lear