CS224N课程P3:反向传播和神经网络

本文最后更新于:几秒前

课程词汇

1
2
3
4
5
6
7
concatenation - 连接;
hairier - 更糟;
interpretation - 解释;理解;
scalar - 标量;
intuitive - 直觉的;直观的
arbitrary - 任意的;任何的
symbolic - 符号;

课程内容

用神经网络实现NER(命名实体识别)

image-20230208232225382

主要逻辑是通过人工标注的数据训练逻辑分类器,根据窗口中单词向量的连接对每个类中心单词{yes/no}进行分类

image-20230208232152448

具体过程大致可以分为:

  1. 设置窗口,将每个窗口的单词组成矩阵,如窗口为$+2,-2$,则$x\in \mathbb R^{5d},d\ is\ the\ num\ of\ words$;
  2. 经过神经网络层,先线性计算后非线性映射
  3. 和向量$u^\top$相乘,整合特征
  4. 过一个softmax,表示成概率,这个概率代表中心词对应于特定label的概率。

image-20230208235337710

image-20230209000741788

矩阵求导

遵循惯例:导数的形状是参数的形状 (形状约定)

行向量

给定一个模型,n个输入,1个输出:$f(\pmb x)=f(x_1,x_2,…,x_n)$。

求导结果为:${ {\partial f} \over {\partial \pmb x} } = [{ {\partial f} \over {\partial x_1} },{ {\partial f} \over {\partial x_2} },…,{ {\partial f} \over {\partial x_n} }]$

矩阵

给定一个模型,n个输入,m个输出:$f(\pmb x)=[f_1(x_1,x_2,…,x_n),f_2(x_1,x_2,…,x_n),…,f_m(x_1,x_2,…,x_n)]$。

求导结果为Jacobi行列式
$$
\begin{bmatrix}
{ {\partial f_1} \over {\partial x_1} }&…&{ {\partial f_1} \over {\partial x_n} }\\
\vdots&\ddots&\vdots\\
{ {\partial f_m} \over {\partial x_1} }&…&{ {\partial f_m} \over {\partial x_n} }\\
\end{bmatrix}
$$

含向量的链式法则

给定一个模型,n个输入,n个输出:$\pmb h=f(\pmb z)$

求导结果:
$$
{ {\partial \pmb h} \over {\partial \pmb z} } =\begin{bmatrix}
f’(z_i)&0&0 \\
0 & \ddots & 0 \\
0 & 0 & f’(z_n)\\
\end{bmatrix}
$$
其中,$({ {\partial \pmb h} \over {\partial \pmb z} })_{ij} = { {\partial} \over {\partial z_j} }f(z_i) = \begin{cases} f’(z_i) \ \ \ \ i = j \\ 0\ \ \ \ otherwise \end{cases} $

其他Jacobi式求导

$$
\begin{align}
{ {\partial } \over {\partial \pmb x} }(\pmb {Wx} + \pmb b)& = \pmb W \\
{ {\partial } \over {\partial \pmb b} }(\pmb {Wx} + \pmb b)& = \pmb I \\
{ {\partial } \over {\partial \pmb u} }(\pmb u^\top\pmb h)& = \pmb h^\top \\
\end{align}
$$

反向传播的引入

在计算${ {\partial s} \over {\partial \pmb b } }$和${ {\partial s} \over {\partial \pmb W } }$时,链式法则中前面的非线性求导的部分是一样的,引入$\delta$来保存这个变量:

image-20230209153346535

$\delta$被称为局部误差信号,从高层传送到低层,用于简化计算。

整体求导

image-20230209153042201

image-20230209162135454

根据链式法则,${ {\partial s} \over {\partial \pmb W } }=\delta $ ${ {\partial \pmb z} \over {\partial \pmb W } }$,经形状推导之后的结果为

image-20230209163438592

image-20230209163110330

相似的,${ {\partial s} \over {\partial \pmb b } } = \pmb h^\top \circ f’(\pmb z)$的结果是一个行向量,但形状约定要求我们的梯度应该是一个列向量,因为$\pmb b$是列向量。所以,在Jacobian形式(使链式法则容易计算)和形状约定中(使优化方法SGD容易计算)是有冲突的。为了解决这个问题有两种办法:

  1. 先用Jacobian形式完成矩阵计算,最后重塑形状到形状约定形式(如${ {\partial s} \over {\partial \pmb b } }$)
  2. 始终遵循形状约定计算结果(如${ {\partial s} \over {\partial \pmb W } }$)

image-20230209164233479

反向传播

计算图和反向传播

前文提到了,在相同层的参数有许多重复的计算,可以使用一个$\delta$变量简化梯度计算过程,反向传播就是这个思想的具体实现。

具体的,引入神经网络的计算图,首先对神经网络执行前向过程,计算出损失与结果;然后从最后面的节点往前回溯,反向计算各个节点的梯度。

image-20230210002344337

对计算图中除首节点的每个结点,都可以执行反向传播的过程,从上游传回梯度,和节点的局部梯度计算,再将结果作为下游梯度继续回传。

image-20230210002837907

在计算图中具体是有三种类型:

  1. 单输入单输出:如上图所示

  2. 多输入单输出:对输入的每一个岔路都做一遍反向传播

  3. 单输入多输出:将多个上游的结果做加和
    $$
    { {\partial f} \over {\partial y} } ={ {\partial f} \over {\partial a} }{ {\partial a} \over {\partial y} }+{ {\partial f} \over {\partial b} }{ {\partial b} \over {\partial y} }
    $$

反向传播的示例如下,需要注意的是,每次计算梯度时,我们应用的应该是回传到节点的中间值,上游梯度,也称$\delta$,而不是重新从结尾计算梯度。

image-20230210003239986

对上图计算图中的节点作直观理解:

  • ‘+’ distributes the upstream gradient
  • ‘max’ routes the upstream gradient
  • ‘*’ switches the upstream gradient

反向传播的一般模型

反向传播的一般模型也遵循着先前向后反向的过程,需要注意的是输出分叉的加和。

image-20230210003837804

反向传播的计算过程理论上可以通过计算机自主实现,其实际也是在主流深度学习框架中已经有所应用,上述的自动计算过程被称为自动微分

反向传播的实现

  • 首先实现计算图,并定义整体逻辑(前向和反向)image-20230210004158959
  • 然后定义门控节点的前向和反向过程image-20230210004321092

梯度计算的数值检查

梯度计算的数值检查可以通过手动计算函数斜率的方式实现,这种方式的近似过程十分缓慢,需要对参数逐个作计算,但是一种十分有效的方法。

image-20230210004500222

课后问题

本讲暂无


CS224N课程P3:反向传播和神经网络
http://paopao0226.site/post/169c01c6.html
作者
Ywj226
发布于
2023年2月6日
更新于
2023年9月23日
许可协议