Skip to content

Lesson-2 神经网络

首先是一个 NER 的简单神经网络

NER 是什么?中文为命名实体识别,就是从文本中识别并提取特定类型的实体,如人名、地名、时间等。

NER 模型的 Idea:基于上下文词分类中心词,训练一个二分类器来判别中心词 {yes/no} 属于某种实体。因此,神经网络的搭建非常简单:

alt text

计算流程即为:\(h=f(Wx+b)\),然后\(s=u^Th\)即可

随机梯度下降

公式如下:

\[\theta^{new} = \theta^{old} - \alpha \nabla_{\theta}J(\theta)\]

其中,\(\alpha\) 是学习率。

如何计算梯度\(\nabla_{\theta}J(\theta)\)的?使用反向传播算法。

梯度

草率一点理解,梯度可以理解为导数。

这里只说一下多变量的情况:

\(f(X)=f(x_1,x_2,...,x_n)\),那么:梯度为\(\frac{\partial f}{\partial X} = [\frac{\partial f}{\partial x_1},\frac{\partial f}{\partial x_2},...,\frac{\partial f}{\partial x_n}]\)

Jacobian Matrix

Jacobian Matrix(雅可比矩阵) 是数学和工程中一种重要的工具,用于描述多变量函数的局部变化关系。它是一个由函数的一阶偏导数组成的矩阵。

具体来说,我们有\(m\)个函数和\(n\)个变量:\(f(X)=[f_1(X),f_2(X),...,f_m(X)]^T\),其中,\(X=[x_1,x_2,...,x_n]^T\)

那么,Jacobian Matrix 会是一个\(m\times n\)的矩阵,如下:

\[J(\mathbf{f}) = \begin{bmatrix} \frac{\partial f_1}{\partial x_1} & \frac{\partial f_1}{\partial x_2} & \cdots & \frac{\partial f_1}{\partial x_n} \\ \frac{\partial f_2}{\partial x_1} & \frac{\partial f_2}{\partial x_2} & \cdots & \frac{\partial f_2}{\partial x_n} \\ \vdots & \vdots & \ddots & \vdots \\ \frac{\partial f_m}{\partial x_1} & \frac{\partial f_m}{\partial x_2} & \cdots & \frac{\partial f_m}{\partial x_n} \end{bmatrix}\]

我们发现:

  • Jacobian 的每一行描述了对应输出函数\(f_i\)的梯度,表示该函数在输入空间中的变化趋势。
  • Jacobian 的每一列描述了对应输入变量\(x_j\)对所有输出函数的影响。
链式法则

很简单的内容:如果\(h=f(Z)\),而 \(Z=Wx+b\),那么:\(\frac{\partial h}{\partial x} = \frac{\partial h}{\partial Z} \frac{\partial Z}{\partial x}\)

反向传播

首先,我们根据神经网络的公式前向建立计算图,如下所示: alt text

然后,我们沿着前向计算的反方向传递来计算梯度: alt text

每个节点的梯度反向传播涉及三部分:

  • 节点从高层得到 upstream gradient
  • 计算 local gradient
  • 向下传递 downstream gradient

alt text

根据上图,我们可以很自然地知道 downstream gradient 是怎么计算的:

\[\frac{\partial s}{\partial z} = \frac{\partial h}{\partial z} \frac{\partial s}{\partial h}\]

多个节点来计算反向传播也很自然: alt text

简单总结为:

  • 前向计算:根据公式构建计算图,计算每个节点的值
  • 后向计算:反向遍历计算图,计算每个节点的梯度