Lesson-2 神经网络
首先是一个 NER 的简单神经网络
NER 是什么?中文为命名实体识别,就是从文本中识别并提取特定类型的实体,如人名、地名、时间等。
NER 模型的 Idea:基于上下文词分类中心词,训练一个二分类器来判别中心词 {yes/no} 属于某种实体。因此,神经网络的搭建非常简单:
计算流程即为:\(h=f(Wx+b)\),然后\(s=u^Th\)即可
随机梯度下降
公式如下:
其中,\(\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\)的矩阵,如下:
我们发现:
- 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}\)
反向传播
首先,我们根据神经网络的公式前向建立计算图,如下所示:
然后,我们沿着前向计算的反方向传递来计算梯度:
每个节点的梯度反向传播涉及三部分:
- 节点从高层得到 upstream gradient
- 计算 local gradient
- 向下传递 downstream gradient
根据上图,我们可以很自然地知道 downstream gradient 是怎么计算的:
多个节点来计算反向传播也很自然:
简单总结为:
- 前向计算:根据公式构建计算图,计算每个节点的值
- 后向计算:反向遍历计算图,计算每个节点的梯度
本页面最近更新:,更新历史
发现错误?想一起完善? 在 GitHub 上编辑此页!
本页面贡献者:OI-wiki
本页面的全部内容在 协议之条款下提供,附加条款亦可能应用