放牧代码和思想
专注自然语言处理、机器学习算法
    This thing called love. Know I would've. Thrown it all away. Wouldn't hesitate.

CS224n笔记5 反向传播与项目指导

目录

hankcs.com 2017-06-10 下午8.26.24.pnghankcs.com 2017-06-10 下午8.52.07.png最后一次数学课,其实都是些很基础的推导而已。从四个不同的层面讲解反向传播,其中电路和有向图类比还是很直观新颖的解释。

任意层的通用公式

第$l$层的残差:

$$\delta^{(l)} = (W^{(l)T} \delta^{(l+1)}) \circ f'(z^{(l)})$$

其中$f$是激活函数:

$$ f(z) = \frac{1}{1 + e^{-z}}$$

对于顶层来讲,残差就是根据某个损失函数得到的误差。对于底层来讲,激活函数不存在,或相当于$f(x)=x$。

$z$是线性函数:

$$z^{(l)}=W^{(l-1)}a^{(l-1)} + b^{(l-1)}$$

而$\circ$是相同大小的向量之间的element wise product($\circ : \mathbb{R}^N \times \mathbb{R}^N \rightarrow \mathbb{R}^N$)

正则化的损失函数关于第$l$层的权值矩阵的梯度:

$$\frac{\partial}{\partial W^{(l)}}E_R=\delta^{(l+1)}(a^{(l)})^T+\lambda W^{(l)}$$

关于第$l$层的偏置的梯度:

$$\frac{\partial}{\partial b^{(l)}}E_R=\delta^{(l+1)}+\lambda b^{(l)}$$

其中,$a$是激活值:

$$a^{(l)}=f(z^{(l)})$$

这里偏置单元与普通神经元在数学上并无不同,只不过由于激活值$a^{(l)}=1$,所以可以把激活值省略掉。

反向传播的电路解释

比如函数$f(x,y,z) = (x + y) z$可视作如下加法器和乘法器电路:

hankcs.com 2017-06-10 下午4.35.30.png

定义$q = x + y$ 、 $f = q z$,于是有$\frac{\partial q}{\partial x} = 1, \frac{\partial q}{\partial y} = 1$ 和$\frac{\partial f}{\partial q} = z, \frac{\partial f}{\partial z} = q$。$\frac{\partial f}{\partial x},\frac{\partial f}{\partial y},\frac{\partial f}{\partial z}$

我们可以从输出到输入反向计算,先得到输出关于输出自己的导数:

hankcs.com 2017-06-10 下午4.41.14.png

然后得到$f$关于$z$的导数:

hankcs.com 2017-06-10 下午7.39.38.png

另一条路,$f$关于$q$的导数:

hankcs.com 2017-06-10 下午7.41.50.png

$f$关于$y$的导数:

hankcs.com 2017-06-10 下午7.43.21.png

$f$关于$x$的导数:

hankcs.com 2017-06-10 下午7.43.46.png

这种反向回溯的过程放到神经元中就是反向传播了:

hankcs.com 2017-06-10 下午8.26.24.png

反向传播时每通过一级,就用链式法则乘以这一级的导数。

另一个稍微复杂一点的例子:

hankcs.com 2017-06-10 下午8.33.36.png

其中,sigmoid相关的元件可以合并为一个sigmoid gate:

hankcs.com 2017-06-10 下午8.35.43.png

第三种理解:流程图

将上述电路视作有向无环流程图去理解链式法则,比如一条路径:

hankcs.com 2017-06-10 下午8.41.57.png

2条路径:

hankcs.com 2017-06-10 下午8.43.00.png

推广到多条路径:

hankcs.com 2017-06-10 下午8.43.39.png

推广到更复杂的流程图:

hankcs.com 2017-06-10 下午8.44.47.png

只要找到z的所有父节点应用链式法则并求和即可。

神经网络可以视作流程图的一个实例:

hankcs.com 2017-06-10 下午8.47.22.png

任意流程图都可以执行反向传播:

hankcs.com 2017-06-10 下午8.48.22.png

现在有一些软件包(TensorFlow)可以自动从前向传播的symbolic expression(符号表达式)推导梯度,适用于快速设计原型。(其实matlab里也可以)

hankcs.com 2017-06-10 下午8.52.07.png

第四种解释:实际神经网络中的误差信号

其实就是把上面这些解释综合起来的解释,对如下2层的网络来讲:

hankcs.com 2017-06-10 下午8.53.58.png

假设最后一层对$z^{(3)}$的误差是$\delta^{(3)}$:

hankcs.com 2017-06-10 下午8.58.47.png

于是对$W^{(2)}$的导数是$\delta^{(3)}a^{(2)T}$

通过线性乘法器,对$a^{(2)}$的导数是权值与$\delta^{(3)}$的乘积

hankcs.com 2017-06-10 下午9.01.31.png

通过一个sigmoid gate,对$z^{(2)}$的导数是:

hankcs.com 2017-06-10 下午9.05.13.png

再通过一个线性乘法器,得到对$a^{(1)}$的导数:

hankcs.com 2017-06-10 下午9.07.09.png

于是对$W^{(1)}$的导数是 $\delta^{(2)}a^{(1)T}$。

课程项目

接下来都是围绕着课程项目的指导与建议,就不啰嗦了。简单写写一些体会:

  • 不要想着一上来就发明个新模型搞个大新闻

  • 也不要浪费大部分时间在爬虫上面,本末倒置

  • 把旧模型用于新领域\新数据也是不错的项目

  • 先要按部就班地熟悉数据、熟悉评测标准、实现基线方法

  • 再根据基线方法的不足之处思考深度学习如何能带来改进

  • 再实现一个已有的较为前沿的模型

  • 观察该模型犯的错误,思考如何改进

  • 这时才能没准就福至心灵发明一个新方法

知识共享许可协议 知识共享署名-非商业性使用-相同方式共享码农场 » CS224n笔记5 反向传播与项目指导

评论 2

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
  1. #2

    δ(l)=(W(l)Tδ(l+1))∘f′(z(l)),f′(z(l))应该用a(l)吧,好多人图都是用的f′(z(l)),但是代码实现都是用a(l),就是用的forward pass时激活函数的输出值

    gengzhn6年前 (2018-11-02)回复
  2. #1

    学习了 不过楼主有点暴力

    eason6年前 (2018-05-19)回复

我的作品

HanLP自然语言处理包《自然语言处理入门》