反向传播笔记
2018-03-25 17:04
253 查看
斯坦福CS231n课程确实很好,学了有两三遍,每次都有不一样的收获,理解的也更深刻。这里把自己觉得重要的东西记录下来,以加深印象,同时便于查阅。CS211n简书笔记链接:https://www.jianshu.com/p/182baeb82c71
反向传播是利用链式法则递归计算表达式梯度的方法。核心问题:给定函数f(x),其中x是输入数据的向量,需要计算函数f关于x的梯度,即▽f(x)。f为损失函数,输入x包含训练数据和神经网络的权重。
通常只计算参数(W,b)的梯度,xi梯度可用于可视化。函数对于每个变量的导数指明了整个表达式对于该变量的敏感程度。
例如
,即梯度实际上是个向量。利用链式法则计算复合表达式最简单的公式为:
例如f(x,y,z)=(x+y)z,则变量梯度为[dfdx,dfdy,dfdz]。 在计算线路图中,每个门单元都会得到一些输入并立即计算(一些函数可组成门,如sigmoid函数):(1)这个门的输入值;(2)其输出值关于输入值的局部梯度。 在不同分支的梯度要相加:变量x,y在前向传播表达式中出现多次,使用+=而不是+来累计变量的梯度。 加法操作将梯度相等的分发给它的输入;取最大操作将梯度路由给更大的输入;乘法门拿取输入激活数据,对它们进行交换,然后乘以梯度。
前向传播从输入计算到输出(绿色),反向传播从尾部开始,根据链式法则递归地向前计算梯度(显示为红色),一直到网络的输入端。可以认为,梯度是从计算链路中回流。
若在计算过程中对所有输入数据样本xi乘以1000,那么权重梯度将会增大1000倍,这样就必须降低学习率来弥补。所以数据预处理关系重大,它即使是只有微小变化,也会产生巨大影响。 向量化操作计算梯度:注意关注维度和转置操作。矩阵相乘的梯度的计算最有技巧(也适用于矩阵和向量,向量和向量相乘)。补充知识点: 对标量求导:(1)向量对标量求导,结果是个向量(向量每个元素对标量求导)。例如:y(x)=(y1,y2,...,yn),其中x是标量,则∂y/∂x=(∂y1/∂x,∂y2/∂x,...,∂yn/∂x); (2)矩阵对标量求导,结果是个矩阵(矩阵每个元素对标量求导),例如Y(x)=(yij),则∂Y(x)/∂x=∂yij/∂x 对向量求导:(1)标量对向量求导,结果是向量。事实上这就是所谓的gradient,对一般标量函数f(x),其中x=(x1,x2,...,xn),则∂f/∂x=(∂f/∂x1,∂f/∂x2,...,∂f/∂fxn),也记为▽f。 (2)向量对向量对导,结果是矩阵(matrix gradient),即对于向量值函数f(x),其中x=(x1,x2,...,xn),f=(f1,f2,...,fm),则▽f=∂y/∂x=(∂f1/∂x,∂f2/∂x,...,∂fm/∂fx)=... 在实际运算中还会出现∂y/∂xT=(▽f)T,也叫做f的Jacobian。 (3)矩阵对向量求导,结果是个三维的object,先来个gradient,然后其中每个元素都是个matrix。 对矩阵求导: 标量对矩阵求导,结果还是矩阵。
反向传播是利用链式法则递归计算表达式梯度的方法。核心问题:给定函数f(x),其中x是输入数据的向量,需要计算函数f关于x的梯度,即▽f(x)。f为损失函数,输入x包含训练数据和神经网络的权重。
通常只计算参数(W,b)的梯度,xi梯度可用于可视化。函数对于每个变量的导数指明了整个表达式对于该变量的敏感程度。
例如
,即梯度实际上是个向量。利用链式法则计算复合表达式最简单的公式为:
例如f(x,y,z)=(x+y)z,则变量梯度为[dfdx,dfdy,dfdz]。 在计算线路图中,每个门单元都会得到一些输入并立即计算(一些函数可组成门,如sigmoid函数):(1)这个门的输入值;(2)其输出值关于输入值的局部梯度。 在不同分支的梯度要相加:变量x,y在前向传播表达式中出现多次,使用+=而不是+来累计变量的梯度。 加法操作将梯度相等的分发给它的输入;取最大操作将梯度路由给更大的输入;乘法门拿取输入激活数据,对它们进行交换,然后乘以梯度。
前向传播从输入计算到输出(绿色),反向传播从尾部开始,根据链式法则递归地向前计算梯度(显示为红色),一直到网络的输入端。可以认为,梯度是从计算链路中回流。
若在计算过程中对所有输入数据样本xi乘以1000,那么权重梯度将会增大1000倍,这样就必须降低学习率来弥补。所以数据预处理关系重大,它即使是只有微小变化,也会产生巨大影响。 向量化操作计算梯度:注意关注维度和转置操作。矩阵相乘的梯度的计算最有技巧(也适用于矩阵和向量,向量和向量相乘)。补充知识点: 对标量求导:(1)向量对标量求导,结果是个向量(向量每个元素对标量求导)。例如:y(x)=(y1,y2,...,yn),其中x是标量,则∂y/∂x=(∂y1/∂x,∂y2/∂x,...,∂yn/∂x); (2)矩阵对标量求导,结果是个矩阵(矩阵每个元素对标量求导),例如Y(x)=(yij),则∂Y(x)/∂x=∂yij/∂x 对向量求导:(1)标量对向量求导,结果是向量。事实上这就是所谓的gradient,对一般标量函数f(x),其中x=(x1,x2,...,xn),则∂f/∂x=(∂f/∂x1,∂f/∂x2,...,∂f/∂fxn),也记为▽f。 (2)向量对向量对导,结果是矩阵(matrix gradient),即对于向量值函数f(x),其中x=(x1,x2,...,xn),f=(f1,f2,...,fm),则▽f=∂y/∂x=(∂f1/∂x,∂f2/∂x,...,∂fm/∂fx)=... 在实际运算中还会出现∂y/∂xT=(▽f)T,也叫做f的Jacobian。 (3)矩阵对向量求导,结果是个三维的object,先来个gradient,然后其中每个元素都是个matrix。 对矩阵求导: 标量对矩阵求导,结果还是矩阵。
相关文章推荐
- 神经网络笔记 - 反向传播(BackPropagation) 续
- [机器学习] UFLDL笔记 - Convolutional Neural Network - 反向传播与梯度计算
- 深度学习笔记三:反向传播(backpropagation)算法
- CS231n作业笔记1.3:SVM的误差函数以及反向传播(非向量及向量算法)
- 反向误差传播算法学习笔记
- UFLDL 笔记 02 Backpropagation Algorithm 反向传播及初始值设置
- 多层网络和反向传播笔记
- 语音学习笔记13------谈谈斯坦福大学卷积神经网络之反向传播
- CS231n课程笔记翻译:反向传播笔记
- 神经网络与深度学习学习笔记:正向传播与反向传播(未完)
- CS231N笔记——从KNN到反向传播
- 反向传播(back propagation)算法学习笔记
- CS231n(12):反向传播笔记
- dlnd-your-first-neural-network中反向传播的笔记
- CS231n官方笔记:反向传播
- 深度学习笔记(3)——CNN中一些特殊环节的反向传播
- 机器学习笔记1:神经网络 反向传播(Backpropagation) week5
- 深度学习与计算机视觉[CS231N] 学习笔记(4.1):反向传播(Backpropagation)
- coursera-斯坦福-机器学习-吴恩达-第5周笔记-反向传播
- 深度学习21天实战Caffe学习笔记--笔记5--caffe中前向传播、反向传播及最优化求解过程