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

1. Introduction

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

给定一个函数\small f(x),其中\small x是输入变量,我们要计算函数\small f关于\small x的梯度,即:\small \triangledown f(x)

\small f(x)可以是损失函数\small L。我们知道,\small L是关于输入样本\small X和权重\small W与偏置\small b的函数,其中\small X是固定不变的,\small W\small b是算法要去学习和确定的。通过计算损失函数\small L关于\small W\small b的导数,可以迭代更新权重和偏置。

2. Simple expressions and interpretation of the gradient

例1:函数\small f(x,y)=xy,包括两个变量,分别对其求导,可以得到:

\small \frac{\partial f}{\partial x} = y\small \frac{\partial f}{\partial y} = x

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

梯度:梯度\small \triangledown f(x)代表偏导数组成的向量,例如:

函数\small f(x,y)=xy的梯度可以写成: \small \triangledown f = [\frac{\partial f}{\partial x},\frac{\partial f}{\partial y}] = [y,x]

例2:计算加法运算\small f(x,y)=x+y的的导数

\small \frac{\partial f}{\partial x} = 1\small \frac{\partial f}{\partial y} = 1

这个例子表示,函数关于变量\small x,y的导数与\small x,y的值无关。

例3:计算max运算\small f(x,y)=max(x,y)的导数

\small \frac{\partial f}{\partial x} = 1 (x\geqslant y)\small \frac{\partial f}{\partial y} = 1 (y\geqslant x)

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

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

例4:计算\small f(x,y,z) = (x+y)z的导数。

首先,将这个稍微复杂的表达式分解成两个函数\small q=x+y,\small f=qz

然后,先对\small q,z进行求导:\small \frac{\partial f}{\partial q} = z\small \frac{\partial f}{\partial z} = q

接着,再用\small q\small x,y求导:\small \frac{\partial q}{\partial x} = 1\small \frac{\partial q}{\partial y} = 1

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

         \small \frac{\partial f}{\partial x} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial x} = z\small \frac{\partial f}{\partial y} = \frac{\partial f}{\partial q}\frac{\partial q}{\partial y} = z

若输入一个样本\small [x,y,z]=[-2,5,-4],上面的计算过程可以用下图表示:

cs231n 学习笔记(4)- 反向传播_第1张图片

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

4. Intuitive understanding of backpropagation

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

注意:gate 就是计算单元。

5. Modularity:Sigmoid example

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

例5:   给定函数\small f(w,x) = \frac{1}{1+e^{-(w_0x_0+w_1x_1+w_2)}}

在后面的学习中,我们会发现这个函数可以描述一个2D神经元,即:输入为\small x,权重为\small w,使用sigmoid作为激活函数的神经元。但现在,我们只把它看成一个函数就好。

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

\small f(x)=\frac{1}{x} \rightarrow \frac{\partial f}{\partial x} = -1/x^2,          \small f_c(x)=c+x\rightarrow \frac{\partial f}{\partial x} = 1

\small f(x)=e^x \rightarrow \frac{\partial f}{\partial x} = e^x,          \small f_a(x)=ax\rightarrow \frac{\partial f}{\partial x} = a

\small x=[-1,-2], w=[2,-3,-3]为例,则给定函数的计算过程可以用下面的计算图表示:

cs231n 学习笔记(4)- 反向传播_第2张图片

Sigmoid函数及其导数:

Sigmoid函数定义:

              \small \sigma (x) = \frac{1}{1+e^{-x}}

Sigmoid函数的导数:

\small \frac{\partial \sigma}{\partial x} = \frac{e^{-x}}{1+e^{-x}} = \left ( \frac{1+e^{-x}-1}{1+e^{-x}} \right )\left ( \frac{1}{1+e^{-x}} \right ) = (1-\sigma (x))\sigma (x)

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

6. Backprop in practice:staged computation

例6:   给定函数\small f(w,x) = \frac{x+\sigma (x)}{ \sigma (x)+(x+y)^2}

前向传播实现过程:

cs231n 学习笔记(4)- 反向传播_第3张图片

在前向传播时,创建了一些中间变量\small sigy,num,sigx,xpy,xpysqr,den,invden,这些都是简单的表达式。在反向传播时,在这些变量前面加上d表示梯度。

反向传播实现过程:

cs231n 学习笔记(4)- 反向传播_第4张图片

cs231n 学习笔记(4)- 反向传播_第5张图片

注意:

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

  2. Gradients add up for forks. 如果\small x,y在前向传播时使用了多次,name在反向传播的时候要用“+=”替代“=”。我们要累积梯度,使用=会覆盖掉前面计算好的梯度。

7. Patterns in backward flow

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

举例:

cs231n 学习笔记(4)- 反向传播_第6张图片

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

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

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

注意

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

Answer:

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

\small w^Tx_i是乘法算子,说明输入数据的尺度scale对权重的梯度有很大影响。如果输入数据很大,那么对应的权重的梯度也会很大,那就意味着我们需要降低learning rate来补偿,就会导致w很敏感,鲁棒性差。这也是为什么预处理很重要的原因。

8. Gradients for vectorized operations

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

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

cs231n 学习笔记(4)- 反向传播_第7张图片

Tips:使用use dimension analysis!在计算梯度的过程中,不用牢记它的表达式,因为可以通过维度分析出来。例如:\small dW的维度和\small W维度大小一致,它等于\small dD\small X的乘积。

9. Summary

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

你可能感兴趣的:(深度学习,cs231n学习笔记,CS231n学习笔记)