cs231n-学习笔记-03反向传播

反向传播

0 简介

反向传播是利用链式法则递归计算表达式的梯度的方法,理解反向传播对于理解、实现、设计和调试神经网络非常关键。

我们需要解决的核心问题就是,给定函数 f(x) f ( x ) ,其中 x x 是输入数据的向量,需要计算函数f关于 x x 的梯度,也就是f(x)

xi x i 的梯度有时是有用的,比如将神经网络所做的事情可视化便于直观理解。

函数关于每个变量的导数指明了整个表达式对于该变量的敏感程度。

1 计算图

反向传播是一个优美的局部过程。在整个计算线路图中,每个门单元都会得到一些输入并立即计算两个东西。

这个门的输出值

其输出值关于输入值的局部梯度(后面的具体梯度,用一个变量暂存)

加法门:梯度分发(所有值与梯度同)

最大门:梯度路由(较大值占所有,其余均为0)

乘法门:梯度交换(所有值交换乘梯度)

因此,反向传播可以看做是门单元之间在通过梯度信号相互通信,只要让他们的输入沿着梯度方向变化,无论他们自己的输出值在何种程度上升或下降,都是为了让整个网络的输出值更高。

对前向传播变量进行缓存:

在计算反向传播时,前向传播过程中得到的一些中间变量非常有用。在实际操作中,最好代码实现对于这些中间变量的缓存,这样在反向传播的时候也能用上他们。如果这样做过于困难,也可以(但是浪费计算资源)重新计算他们。

在不同分支的梯度要相加:

如果变量x,y变量在前向传播的表达式中出现多次,那么进行反向传播的时候就要非常小心,使用+=而不是=来累计这些变量的梯度(不然就会造成覆写)。这是遵循了微积分中的多元链式法则,该法则指出如果变量在线路中分支走向不同的部分,那么梯度在回传的时候,就应该进行累加。

梯度的向量化编码

Jacobian J a c o b i a n 雅克比矩阵

2 总结

(1)神经网络十分庞大:对于所有参数,用手写下所有公式是不切实际的

(2)反向传播:沿计算图递归应用链式规则计算所有输入、输出、中间件的梯度

(3)维护图结构,其中每个节点实现forward()/backward()API

(4)前向传播过程:计算运算的结果,在内存中保存梯度计算需要的任何中间件

(5)反向传播过程:应用链式求导规则,计算损失函数关于输入变量的所有梯度

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值