关于自然语言处理:斯坦福NLP课程-第3讲-神经网络知识回顾

91次阅读

共计 6434 个字符,预计需要花费 17 分钟才能阅读完成。

  • 作者:韩信子 @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 的场景做一点联合解说。

本篇内容笼罩

  • 神经网络根底
  • 命名实体辨认
  • 基于窗口数据的预测
  • 基于 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 分类器的细节

咱们能够将预测函数分为两个步骤:

  • 将 \(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 分类器中最罕用到穿插熵损失,也是负对数概率状态。

对于每个训练样本 \((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}
$$

  • 其中,\(Vd\) 是数量很大的参数。

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)

  • 可能的用处

    • 跟踪文档中提到的特定实体(组织、集体、地点、歌曲名、电影名等)
    • 对于问题答复,答案通常是命名实体
    • 许多须要的信息实际上是命名实体之间的关联
    • 同样的技术能够扩大到其余 slot-filling 槽填充分类
  • 通常前面是命名实体链接 / 规范化到知识库

2.2 句子中的命名实体辨认

咱们通过在上下文中对单词进行分类,而后将实体提取为单词子序列来预测实体。

2.3 NER 的难点

  • 很难计算出实体的边界

    • 第一个实体是“First National Bank”还是“National Bank”
  • 很难晓得某物是否是一个实体

    • 是一所名为“Future School”的学校,还是这是一所将来的学校?
  • 很难晓得未知 / 离奇实体的类别

    • “Zig Ziglar”? 一个人
  • 实体类是含糊的,依赖于上下文

    • 这里的“Charles Schwab”是 PER 不是 ORG

3. 基于窗口数据的分类预测

3.1. 词 - 窗分类

  • 思路:为在上下文中的语言构建分类器

    • 一般来说,很少对单个单词进行分类
  • 例如,上下文中一个单词的命名实体分类

    • 人、地点、组织、没有
  • 在上下文中对单词进行分类的一个简略办法,可能是对窗口中的单词向量进行均匀,并对均匀向量进行分类

    • 问题:这会失落地位信息

3.2 窗口分类器:softmax

  • 训练 softmax 分类器对中心词进行分类,办法是在一个窗口内将中心词四周的词向量串联起来
  • 例子:在这句话的上下文中对“Paris”进行分类,窗口长度为 2
  • 后果向量 \(x_{window}=x \in R^{5d}\) 是一个列向量

3.3 最简略的窗口分类器: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 随机梯度降落

应用 SGD 更新参数

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

  • \(\alpha\) 是 步长或是学习率

4.3 课堂手推

5. 视频教程

能够点击 B 站 查看视频的【双语字幕】版本

6. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
  • 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
  • 双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
  • Stanford 官网 | CS224n: Natural Language Processing with Deep Learning

ShowMeAI 系列教程举荐

  • 大厂技术实现 | 举荐与广告计算解决方案
  • 大厂技术实现 | 计算机视觉解决方案
  • 大厂技术实现 | 自然语言解决行业解决方案
  • 图解 Python 编程:从入门到精通系列教程
  • 图解数据分析:从入门到精通系列教程
  • 图解 AI 数学根底:从入门到精通系列教程
  • 图解大数据技术:从入门到精通系列教程
  • 图解机器学习算法:从入门到精通系列教程
  • 机器学习实战:手把手教你玩转机器学习系列
  • 深度学习教程 | 吴恩达专项课程 · 全套笔记解读
  • 自然语言解决教程 | 斯坦福 CS224n 课程 · 课程带学与全套笔记解读

NLP 系列教程文章

  • NLP 教程(1)- 词向量、SVD 合成与 Word2vec
  • NLP 教程(2)- GloVe 及词向量的训练与评估
  • NLP 教程(3)- 神经网络与反向流传
  • NLP 教程(4)- 句法分析与依存解析
  • NLP 教程(5)- 语言模型、RNN、GRU 与 LSTM
  • NLP 教程(6)- 神经机器翻译、seq2seq 与注意力机制
  • NLP 教程(7)- 问答零碎
  • NLP 教程(8)- NLP 中的卷积神经网络
  • NLP 教程(9)- 句法分析与树形递归神经网络

斯坦福 CS224n 课程带学详解

  • 斯坦福 NLP 课程 | 第 1 讲 – NLP 介绍与词向量初步
  • 斯坦福 NLP 课程 | 第 2 讲 – 词向量进阶
  • 斯坦福 NLP 课程 | 第 3 讲 – 神经网络常识回顾
  • 斯坦福 NLP 课程 | 第 4 讲 – 神经网络反向流传与计算图
  • 斯坦福 NLP 课程 | 第 5 讲 – 句法分析与依存解析
  • 斯坦福 NLP 课程 | 第 6 讲 – 循环神经网络与语言模型
  • 斯坦福 NLP 课程 | 第 7 讲 – 梯度隐没问题与 RNN 变种
  • 斯坦福 NLP 课程 | 第 8 讲 – 机器翻译、seq2seq 与注意力机制
  • 斯坦福 NLP 课程 | 第 9 讲 – cs224n 课程大我的项目实用技巧与教训
  • 斯坦福 NLP 课程 | 第 10 讲 – NLP 中的问答零碎
  • 斯坦福 NLP 课程 | 第 11 讲 – NLP 中的卷积神经网络
  • 斯坦福 NLP 课程 | 第 12 讲 – 子词模型
  • 斯坦福 NLP 课程 | 第 13 讲 – 基于上下文的表征与 NLP 预训练模型
  • 斯坦福 NLP 课程 | 第 14 讲 – Transformers 自注意力与生成模型
  • 斯坦福 NLP 课程 | 第 15 讲 – NLP 文本生成工作
  • 斯坦福 NLP 课程 | 第 16 讲 – 指代消解问题与神经网络办法
  • 斯坦福 NLP 课程 | 第 17 讲 – 多任务学习(以问答零碎为例)
  • 斯坦福 NLP 课程 | 第 18 讲 – 句法分析与树形递归神经网络
  • 斯坦福 NLP 课程 | 第 19 讲 – AI 平安偏见与偏心
  • 斯坦福 NLP 课程 | 第 20 讲 – NLP 与深度学习的将来

正文完
 0