1. Introduction

本节主要介绍反向传播的直观理解:使用链式法则进行递归求导的梯度计算方式。

给定一个函数cs231n 学习笔记(4)- 反向传播,其中cs231n 学习笔记(4)- 反向传播是输入变量,我们要计算函数cs231n 学习笔记(4)- 反向传播关于cs231n 学习笔记(4)- 反向传播的梯度,即:cs231n 学习笔记(4)- 反向传播

cs231n 学习笔记(4)- 反向传播可以是损失函数cs231n 学习笔记(4)- 反向传播。我们知道,cs231n 学习笔记(4)- 反向传播是关于输入样本cs231n 学习笔记(4)- 反向传播和权重cs231n 学习笔记(4)- 反向传播与偏置cs231n 学习笔记(4)- 反向传播的函数,其中cs231n 学习笔记(4)- 反向传播是固定不变的,cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播是算法要去学习和确定的。通过计算损失函数cs231n 学习笔记(4)- 反向传播关于cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播的导数,可以迭代更新权重和偏置。

2. Simple expressions and interpretation of the gradient

例1:函数cs231n 学习笔记(4)- 反向传播,包括两个变量,分别对其求导,可以得到:

cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

导数的解释:函数的关于某变量的导数,代表了这个变量的值的变化对函数的影响的大小。

梯度:梯度cs231n 学习笔记(4)- 反向传播代表偏导数组成的向量,例如:

函数cs231n 学习笔记(4)- 反向传播的梯度可以写成: cs231n 学习笔记(4)- 反向传播

例2:计算加法运算cs231n 学习笔记(4)- 反向传播的的导数

cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

这个例子表示,函数关于变量cs231n 学习笔记(4)- 反向传播的导数与cs231n 学习笔记(4)- 反向传播的值无关。

例3:计算max运算cs231n 学习笔记(4)- 反向传播的导数

cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

这个例子表示,只有取值大的变量才有导数,取值小的变量导数为0。

3. Compound expression (复合表达式)with chain rule

例4:计算cs231n 学习笔记(4)- 反向传播的导数。

首先,将这个稍微复杂的表达式分解成两个函数cs231n 学习笔记(4)- 反向传播,cs231n 学习笔记(4)- 反向传播

然后,先对cs231n 学习笔记(4)- 反向传播进行求导:cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

接着,再用cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播求导:cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

最后,根据链式法则可知:

         cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播

若输入一个样本cs231n 学习笔记(4)- 反向传播,上面的计算过程可以用下图表示:

cs231n 学习笔记(4)- 反向传播

绿色代表前向传播的结果,红色代表反向传播的结果。

4. Intuitive understanding of backpropagation

反向传播是局部运算过程。每个gate(计算单元)在得到输入后,可以立即计算两个东西:1. 输出 2. 根据输出值计算关于输入的局部梯度。每个Gate不需要知道整个网络的结构就可以进行这两个计算。在前向传播结束后,反向传播时,只用局部梯度相乘就可以得到最终输出相对于某个变量的梯度值。

注意:gate 就是计算单元。

5. Modularity:Sigmoid example

任意可微函数都可以作为一个gate,我们可以把任意多个gates组成一个gate,也可以将一个函数拆分成几个gates。

例5:   给定函数cs231n 学习笔记(4)- 反向传播

在后面的学习中,我们会发现这个函数可以描述一个2D神经元,即:输入为cs231n 学习笔记(4)- 反向传播,权重为cs231n 学习笔记(4)- 反向传播,使用sigmoid作为**函数的神经元。但现在,我们只把它看成一个函数就好。

这个函数是由多个gate组成的。除了之前介绍的加、乘、max之外,还有四种:

cs231n 学习笔记(4)- 反向传播,          cs231n 学习笔记(4)- 反向传播

cs231n 学习笔记(4)- 反向传播,          cs231n 学习笔记(4)- 反向传播

cs231n 学习笔记(4)- 反向传播为例,则给定函数的计算过程可以用下面的计算图表示:

cs231n 学习笔记(4)- 反向传播

Sigmoid函数及其导数:

Sigmoid函数定义:

              cs231n 学习笔记(4)- 反向传播

Sigmoid函数的导数:

cs231n 学习笔记(4)- 反向传播

诀窍Tips:Staged Backpropagation分段反向传播。在前向传播时将函数进行拆分,分段进行,方便后续的求导和反向传播。

6. Backprop in practice:staged computation

例6:   给定函数cs231n 学习笔记(4)- 反向传播

前向传播实现过程:

cs231n 学习笔记(4)- 反向传播

在前向传播时,创建了一些中间变量cs231n 学习笔记(4)- 反向传播,这些都是简单的表达式。在反向传播时,在这些变量前面加上d表示梯度。

反向传播实现过程:

cs231n 学习笔记(4)- 反向传播

cs231n 学习笔记(4)- 反向传播

注意:

  1. 缓存前向传播的变量,因为在反向传播的时候也会用到

  2. Gradients add up for forks. 如果cs231n 学习笔记(4)- 反向传播在前向传播时使用了多次,name在反向传播的时候要用“+=”替代“=”。我们要累积梯度,使用=会覆盖掉前面计算好的梯度。

7. Patterns in backward flow

在大多数情况下,反向传播过程中的梯度可以被很直观的解释清楚。例如:常见的神经网络中经常使用的gates:add,max和mul。

举例:

cs231n 学习笔记(4)- 反向传播

Add:加法是梯度不变的传递给下一个门单元

Max:max算子是把梯度分到值比较大的一个单元。 

Mul:乘法是把梯度乘以一个值传到下一个门单元。f=xyf=xy,那么传到xx的梯度要乘以yy,同理yy的梯度。

注意

Question:为什么预处理调整输入数据的scale很重要??

Answer:

当一个较大的值和一个较小值作为乘法算子的input时,那么对于值小的输入会有一个较大的梯度,对于值大的输入会有一个较小的梯度。

cs231n 学习笔记(4)- 反向传播是乘法算子,说明输入数据的尺度scale对权重的梯度有很大影响。如果输入数据很大,那么对应的权重的梯度也会很大,那就意味着我们需要降低learning rate来补偿,就会导致w很敏感,鲁棒性差。这也是为什么预处理很重要的原因。

8. Gradients for vectorized operations

上面的章节都是基于单个变量的,但是神经网络中的运算都是以矩阵或向量为单位的。

求梯度以及梯度反向传播,都可以用矩阵或向量乘法。

cs231n 学习笔记(4)- 反向传播

Tips:使用use dimension analysis!在计算梯度的过程中,不用牢记它的表达式,因为可以通过维度分析出来。例如:cs231n 学习笔记(4)- 反向传播的维度和cs231n 学习笔记(4)- 反向传播维度大小一致,它等于cs231n 学习笔记(4)- 反向传播cs231n 学习笔记(4)- 反向传播的乘积。

9. Summary

  • 对梯度有直观的理解,如何用计算图,梯度的传播过程以及梯度对输出的影响。
  • 讨论了stage computation在反向传播中的用法和意义:把函数划分成更小的模块,可以很好地计算梯度,再使用链式法则计算最后的梯度。

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-10-02
  • 2021-10-13
  • 2021-10-25
  • 2022-01-08
  • 2021-07-31
  • 2022-01-10
猜你喜欢
  • 2021-12-05
  • 2021-07-22
  • 2022-12-23
  • 2021-08-14
  • 2021-11-25
  • 2022-01-22
  • 2021-06-20
相关资源
相似解决方案