作者:韩信子 @ShowMeAI ,路遥@ShowMeAI ,奇异果@ShowMeAI
教程地址 :http://www.showmeai.tech/tutorials/36
本文地址 :http://www.showmeai.tech/article-detail/235
声明:版权所有,转载请联系平台与作者并注明出处
收藏ShowMeAI 查看更多精彩内容
神经网络知识回顾
ShowMeAI 为斯坦福CS224n 《自然语言处理与深度学习(Natural Language Processing with Deep Learning)》课程的全部课件,做了中文翻译和注释 ,并制作成了GIF动图!
神经网络与反向传播
本讲内容的深度总结教程 可以在这里 查看。视频和课件等资料的获取方式见文末 。
引言 CS224n是顶级院校斯坦福出品的深度学习与自然语言处理方向专业课程。核心内容覆盖RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、阅读理解等前沿内容。
本篇是ShowMeAI 对第3课的内容梳理,内容主要是对神经网络知识回顾,会基于NLP的场景做一点结合讲解。
Word Window Classification, Neural Networks, and PyTorch
本篇内容覆盖 神经网络基础 命名实体识别 基于窗口数据的预测 基于pytorch实现的分类器 Word Window Classification, Neural Networks, and PyTorch
1. 神经网络基础 1.1 分类问题基础 分类问题基础
对于分类问题,我们有训练数据集:它由一些样本组成 \{x_i, y_i\}_{i=1}^{N}
x_i 是输入,例如单词(索引或是向量),句子,文档等等(维度为 d )y_i 是我们尝试预测的标签( C 个类别中的一个),例如:类别:感情,命名实体,购买/售出的决定 其他单词 多词序列( 之后会提到) 1.2 分类问题直观理解 分类问题直观理解
训练数据 \{x_i, y_i\}_{i=1}^{N} ,用一个最简单的2维词向量分类问题作为案例,使用softmax / logistic回归,构建线性决策边界
假设 x_i 是固定的,训练 softmax/logistic 回归的权重 W \in R^{C \times d} 来决定决定边界(超平面)
预测阶段,对每个 x ,预测:
p(y \mid x)=\frac{\exp (W_y \cdot x)}{\sum_{c=1}^{C} \exp (W_c \cdot x)} 1.3 softmax分类器的细节 softmax分类器的细节
我们可以将预测函数分为两个步骤:
将 W 的 y^{th} 行和 x 中的对应行相乘得到分数: W_{y} \cdot x=\sum_{i=1}^{d} W_{y i} x_{i}=f_{y} 对 c=1, \cdots ,C ,计算 f_c 使用softmax函数获得归一化的概率: p(y \mid x)=\frac{\exp (f_y)}{\sum_{c=1}^{C} \exp (f_c)}=softmax(f_y) 1.4 softmax和交叉熵损失 softmax和交叉熵损失
在softmax分类器中最常用到交叉熵损失,也是负对数概率形态。
对于每个训练样本 (x,y) ,我们的目标是最大化正确类 y 的概率,或者我们可以最小化该类的负对数概率
-\log p(y \mid x)=-\log (\frac{\exp(f_y)}{\sum_{c=1}^{C} \exp (f_c)}) 使用对数概率将我们的目标函数转换为求和形态,这更容易在推导和应用中使用。
1.5 交叉熵损失理解 交叉熵损失理解
交叉熵的概念来源于信息论,衡量两个分布之间的差异
令真实概率分布为 p ,我们计算的模型概率分布为 q 交叉熵为 H(p, q)=-\sum_{c=1}^{C} p(c) \log q(c) 假设标准答案的概率分布是,在正确的类上为 1 ,在其他类别上为 0 :
p=[0, \cdots ,0,1,0, \cdots ,0] 因为 p 是独热向量,所以唯一剩下的项是真实类的负对数概率。
1.6 完整数据集上的分类 完整数据集上的分类
在整个数据集 \{x_i , y_i \}_{(i=1)}^N 上的交叉熵损失函数,是所有样本的交叉熵的均值
J(\theta)=\frac{1}{N} \sum_{i=1}^{N}-\log \left(\frac{e^{f_{y_{i}}}}{\sum_{c=1}^{C} e^{f_{c}}}\right) 不使用 f_y=f_y(x)=W_y \cdot x=\sum_{j=1}^{d} W_{yj} x_j ,而是使用向量化的形态,基于矩阵来表示 f:f=Wx 。
1.7 传统的机器学习优化算法 传统的机器学习优化算法
对于传统的机器学习算法(如逻辑回归)来说,一般机器学习的参数 \theta 通常只由 W 的列组成
\theta=\left[\begin{array}{c}{W_{\cdot 1}} \\ {\vdots} \\ {W_{\cdot d}}\end{array}\right]=W( :) \in \mathbb{R}^{C d}
因此,我们只通过以下方式更新决策边界
\nabla_{\theta} J(\theta)=\left[\begin{array}{c}{\nabla_{W_{1}}} \\ {\vdots} \\ {\nabla_{W_{d}}}\end{array}\right] \in \mathbb{R}^{C d} 1.8 神经网络分类器 神经网络分类器
单独使用线性分类器Softmax( ≈ logistic回归)并不十分强大 如上图所示,Softmax得到的是线性决策边界对于复杂问题来说,它的表达能力是有限的 有一些分错的点,需要更强的非线性表达能力来区分 1.9 神经网络非线性切分 神经网络非线性切分
神经网络可以学习更复杂的函数和非线性决策边界 tip :更高级的分类需要 1.10 基于词向量的分类差异 基于词向量的分类差异
一般在NLP深度学习中: 我们学习了矩阵 W 和词向量 x 。 我们学习传统参数和表示。 词向量是对独热向量的重新表示——在中间层向量空间中移动它们——以便 (线性)softmax分类器可以更好地分类。 即将词向量理解为一层神经网络,输入单词的独热向量并获得单词的词向量表示,并且我们需要对其进行更新。 \nabla_{\theta} J(\theta)=\left[\begin{array}{c}{\nabla_{W_{1}}} \\ {\vdots} \\ {\nabla_{W_{d a r d v a r k}}} \\ {\vdots} \\ {\nabla_{x_{z e b r a}}}\end{array}\right] \in \mathbb{R}^{C d + V d} 1.11 神经计算 神经计算
An artificial neuron 神经网络有自己的术语包 但如果你了解 softmax 模型是如何工作的,那么你就可以很容易地理解神经元的操作 Neural computation:神经计算 Neural selectivity:神经选择性 Hierarchy of neural processing:神经处理层次 1.12 单个神经元:可视作二元逻辑回归单元 单个神经元:可视作二元逻辑回归单元
h_{w, b}(x)=f(w^{T}x+b) f(z)=\frac{1}{1+e^{-z}} b :我们可以有一个“总是打开”的特性,它给出一个先验类,或者将它作为一个偏向项分离出来。w , b 是神经元的参数。1.13 一个神经网络:多个逻辑回归组合 一个神经网络:多个逻辑回归组合
如果我们输入一个向量通过一系列逻辑回归函数,那么我们得到一个输出向量。 但是我们不需要提前决定这些逻辑回归试图预测的变量是什么。 一个神经网络:多个逻辑回归组合
我们可以输入另一个logistic回归函数。 损失函数将指导中间隐藏变量应该是什么,以便更好地预测下一层的目标。 一个神经网络:多个逻辑回归组合
我们添加更多层的神经网络,就得到了多层感知器。
1.14 单层神经网络的矩阵形态表示 单层神经网络的矩阵形态表示
a_{1}=f(W_{11} x_{1}+W_{12} x_{2}+W_{13} x_{3}+b_{1}) a_{2}=f(W_{21} x_{1}+W_{22} x_{2}+W_{23} x_{3}+b_{2}) z=Wx+b a=f(z) f([z_{1}, z_{2}, z_{3}])=[f(z_{1}), f(z_{2}), f(z_{3})] f(x) 在运算时是 element-wise 逐元素的1.15 非线性变换的必要性 非线性变换的必要性
例如:函数近似,如回归或分类 没有非线性,深度神经网络只能做线性变换 多个线性变换,也还是组成一个线性变换 W_1 W_2 x=Wx 因为线性变换是以某种方式旋转和拉伸空间,多次的旋转和拉伸可以融合为一次线性变换 对于非线性函数而言,使用更多的层,他们可以近似更复杂的函数 2.命名实体识别 2.1 命名实体识别(NER) 命名实体识别(NER)
可能的用途 跟踪文档中提到的特定实体(组织、个人、地点、歌曲名、电影名等) 对于问题回答,答案通常是命名实体 许多需要的信息实际上是命名实体之间的关联 同样的技术可以扩展到其他 slot-filling 槽填充分类 通常后面是命名实体链接/规范化到知识库 2.2 句子中的命名实体识别 句子中的命名实体识别
我们通过在上下文中对单词进行分类,然后将实体提取为单词子序列来预测实体。
2.3 NER的难点 NER的难点
很难计算出实体的边界第一个实体是 “First National Bank” 还是 “National Bank” 很难知道某物是否是一个实体是一所名为“Future School” 的学校,还是这是一所未来的学校? 很难知道未知/新奇实体的类别 实体类是模糊的,依赖于上下文这里的“Charles Schwab” 是 PER 不是 ORG 3.基于窗口数据的分类预测 3.1. 词-窗分类 词-窗分类
思路:为在上下文中的语言构建分类器 例如,上下文中一个单词的命名实体分类 在上下文中对单词进行分类的一个简单方法,可能是对窗口中的单词向量进行平均,并对平均向量进行分类 3.2 窗口分类器:softmax 窗口分类器:softmax
训练softmax分类器对中心词进行分类,方法是在一个窗口内将中心词周围的词向量串联起来 例子:在这句话的上下文中对“Paris”进行分类,窗口长度为2 结果向量 x_{window}=x \in R^{5d} 是一个列向量 3.3 最简单的窗口分类器:Softmax 最简单的窗口分类器:Softmax
对于 x=x_{window} ,我们可以使用与之前相同的softmax分类器
如何更新向量?
3.4 稍微复杂一点:多层感知器 稍微复杂一点:多层感知器
假设我们要对中心词是否为一个地点,进行分类 与word2vec类似,我们将遍历语料库中的所有位置。但这一次,它将受到监督,只有一些位置能够得到高分。 例如,在他们的中心有一个实际的NER Location的位置是“真实的”位置会获得高分 3.5 神经网络前馈计算 神经网络前馈计算
使用神经激活 a 简单地给出一个非标准化的分数
score(x)=U^{T} a \in \mathbb{R} 我们用一个三层神经网络计算一个窗口的得分
s = score("museums \ in \ Paris \ are \ amazing”) s=U^{T} f(W x+b) x \in \mathbb{R}^{20 \times 1} W \in \mathbb{R}^{8 \times 20} U \in \mathbb{R}^{8 \times 1} 之前的例子
X_{window} = [X_{museums} \quad X_{in} \quad X_{paris} \quad X_{are} \quad X_{amazing}] 3.6 附加层 附加层
中间层学习输入词向量之间的非线性交互
X_{window} = [X_{museums} \quad X_{in} \quad X_{paris} \quad X_{are} \quad X_{amazing}] 例如:只有当“museum”是第一个向量时,“in”放在第二个位置才重要
4.基于pytorch实现的分类器 4.1 使用合页损失替换 使用合页损失替换
使用合页损失替换
关于训练目标的想法:让真实窗口的得分更高,而其他窗口的得分更低(直到足够好为止)
s = score(museums \quad in \quad Paris \quad are \quad amazing) $ >
$ s_c = score(Not \quad all \quad museums \quad in \quad Paris) $$
最小化: J=max(0,1-s+s_c)
这是不可微的,但它是连续的 → 我们可以用SGD
补充解析
单窗口的目标函数为 J=max(0,1-s+s_c) 每个中心有NER位置的窗口的得分应该比中心没有位置的窗口高1分 要获得完整的目标函数:为每个真窗口采样几个损坏的窗口。对所有训练样本窗口求和 类似于word2vec中的负抽样 4.2 随机梯度下降 随机梯度下降
\theta ^{new}= \theta ^{old}-\alpha \nabla_{\theta} J(\theta) 4.3 课堂手推 Gradients,Jacobian Matrix: Generalization of the Gradient
Chain Rule,Example Jacobian: Elementwise activation Function
Other Jacobians,Back to our Neural Net!,Break up equations into simple pieces
Apply the chain rule
Derivative with respect to Matrix: Output shape,Derivative with respect to Matrix
Why the Transposes?,What shape should derivatives be?
反向传播
5.视频教程 可以点击 B站 查看视频的【双语字幕】版本
6.参考资料