反向传播(简述)
这次简单的记录一下反向传播是怎么回事。
在最开始,先引入一个概念:
Computational Graphs 计算图
以带正则惩罚项的线性分类器为例,它的计算图简述如下:
这个理解起来比较简单,就是把运算符顺序排好之后,把变量通过运算符组合成中间变量,最后到达L的一张图就好了。这里再给出一个函数来辅助理解这件事情:
它的计算图如下所示:
接下来我们就以此为例展开说明反向传播。
反向传播
由计算图我们可以比较清晰的看到,最左边设置的初始参数,经过乘法门、加法门、exp门等得到了中间变量值和最后的值,这是所谓的“正向”。那么反向是怎么回事呢?对于最终的结果,如果与我们期望的结果有差异,我们会调整W和X,那么如何调整呢?
不难想到,要运用导数或者说梯度的观点来考虑。要知道W与X中任何一个发生变化,都会对最终结果L造成影响,这个影响一般用偏导数来衡量较为准确。最终结果与期望结果有差值,那我们就把这个差异除以偏导数,就是我们要对自变量的修正。最终得出的各节点修正如下图所示:
我们将计算呈现出来来辅助理解:
- 从后往前来看,
- 经过1/x门处的(本地)导数为-1/x2,+1门的导数为1,exp门的导数为ex,*-1门的导数为-1,加法门的导数为1,乘法门的导数为另一个连接元素。
- 起始的传入导数为1,下一层传入导数即为传入导数与本地导数的积,所以下一层是1*(-1/x2)=1*(-1/(1.372)=-0.53,再下一层是1*-0.53=-0.53,接下来是-0.53*e-1.00=-0.20,以此类推。
事实上,上例有更好的方法,我们将WX看作一个整体,留下的部分是一个sigmoid函数的形式,被蓝色框选的部分就是一个sigmoid门,而且它的导数很优美,为σ(1-σ)。