最近看了李宏毅老师的深度学习视频课程,真的是讲得十分细致,从头到尾看下来一遍,对深度学习模型有了一个基本的认识,趁着脑子还能记着一些东西,赶紧把学到的东西记录下来,以备后用。
视频地址:https://www.bilibili.com/video/av9770302/from=search&seid=905421046757750252
ppt地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_MLDS17.html
下面开始正题吧!
1、计算图(Computational Graph)
计算图是用来描述一个函数的语言,有两种基本的要素:
Node:变量,Edge:边
如下图所示:
根据计算图和链式法则,我们可以很直观计算偏导数:
在计算图上,有可能出现变量共享的情况,比如x^2,此时要把两个x拆开,当成不同的x对待,如下面的例子:
2、计算图在前向神经网络中的应用
我们首先回顾下反向传播方法:
上图中的倒三角表示梯度的意思。
将前馈神经网络写成计算图的形式,大概如下图所示:
这里涉及到了向量之间的偏导数计算,使用如下的雅可比矩阵:
根据雅可比矩阵的定义,我们可以队上面需要计算的项进行逐项分解计算:
3、计算图在循环神经网络中的应用
我们先来回顾一下循环神经网络的网络结构:
画出循环神经网络的计算图如下图所示:
假设我们的序列长度为三,三层的计算图如下图所示:
使用梯度下降来训练我们的循环神经网络,我们可以使用计算图:
可以得到如下的计算结果,可以看到,使用计算图计算循环神经网络的梯度是不是十分的方便,而且也十分容易理解循环神经网络中经常出现的梯度爆炸或梯度消失的问题。
注意下图中的梯度计算是分三部分的,图中只显示了第一部分。