CS231n学习笔记——反向传播
CS231n学习笔记——反向传播
首先引入计算图的概念
计算图就是用来 表示任意函数的图,图中的节点表示要执行的每一步计算,
图中R(W)是正则项。
一旦能用计算图来表示一个函数,那么就能使用所谓的反向传播技术递归地调用链式法则来计算计算图中每个变量的梯度。
可见,反向传播就是沿着计算图从输出端开始,对总结果的loss一路求导或者求偏导回到输入的变量,这样求出来的数值组合在一起就是这一次的梯度,对于每个节点我们只需要算一个简单的求导,然后通过链式法则把每一条路的上的求导乘起来即可(如图中绿色框所示)。
具体工作是:在每个节点上计算我们所需的本地梯度,然后跟踪这个梯度,在反向传播的时候我们接受从上游传回来的这个梯度值,直接用这个梯度值乘以本地梯度然后得到需要传回前一个连接点的值。
下图是一个稍微复杂点的例子,更能说明反向传播算法的优越性,用它则不需要直接进行复杂的微积分求导。
也可以把其中的sigmoid函数形状部分单独拿出来做一个sigmoid门。
在实际应用中,数据都以矩阵的形式输入和处理,以下是在矩阵运算时,反向传递法的推导:
其中推导过程包括以下两步。最后得出了程序中的每一个函数应该包括哪些量。