关于深度学习:斯坦福NLP课程-第11讲-NLP中的卷积神经网络

31次阅读

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

作者:韩信子 @ShowMeAI,路遥 @ShowMeAI,奇异果 @ShowMeAI
教程地址:http://www.showmeai.tech/tutorials/36
本文地址:http://www.showmeai.tech/article-detail/248
申明:版权所有,转载请分割平台与作者并注明出处

珍藏 ShowMeAI 查看更多精彩内容



ShowMeAI 为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》课程的全副课件,做了 中文翻译和正文,并制作成了 GIF 动图!


本讲内容的 深度总结教程 能够在 这里 查看。视频和课件等材料的获取形式见 文末


引言

授课打算

  • Announcements
  • Intro to CNNs / 卷积神经网络介绍
  • Simple CNN for Sentence Classification: Yoon (2014) / 利用 CNN 做文本分类
  • CNN potpourri / CNN 细节
  • Deep CNN for Sentence Classification: Conneauet al. (2017) / 深度 CNN 用于文本分类
  • Quasi-recurrent Neural Networks / Q-RNN 模型

欢送来到课程的下半局部!

  • 当初,咱们正在为你筹备成为 DL+NLP 钻研人员 / 实践者
  • 课程不会总是有所有的细节

    • 这取决于你在网上搜寻 / 浏览来理解更多
    • 这是一个沉闷的钻研畛域,有时候没有明确的答案
    • Staff 很乐意与你探讨,但你须要本人思考
  • 作业的设计是为了应酬我的项目的真正艰难

    • 每个工作都成心比上一个工作有更少的帮忙资料
    • 在我的项目中,没有提供 autograder 或合理性查看
    • DL 调试很艰难,然而你须要学习如何进行调试!

书籍举荐

Natural Language Processing with PyTorch: Build Intelligent Language Applications Using Deep Learning

  • Delip Rao & Goku Mohandas

1. 卷积神经网络介绍

(卷积神经网络相干内容也能够参考 ShowMeAI 的对吴恩达老师课程的总结文章 深度学习教程 | 卷积神经网络解读

1.1 从 RNN 到 CNN

  • 循环神经网络不能捕捉没有前缀上下文的短语
  • 常常在最终向量中捕捉的信息太多来自于最初的一些词汇内容

  • 例如:softmax 通常只在最初一步计算

  • CNN / Convnet 的 次要思路

    • 如果咱们为每一个特定长度的词子序列计算向量呢?

  • 例如:tentative deal reached to keep government open
  • 计算的向量为

    • tentative deal reached, deal reached to, reached to keep, to keep government, keep government open

  • 不论短语是否合乎语法
  • 在语言学上或认知上不太可信
  • 而后将它们分组 (很快)

1.2 CNN 卷积神经网络

1.3 什么是卷积

  • 一维离散卷积个别为:\((f \ast g)[n]=\sum_{m=-M}^{M} f[n-m] g[m]\)
  • 卷积通常地用于从图像中提取特色

    • 模型地位不变的辨认
    • 能够参考斯坦福深度学习与计算机视觉课程 cs231n (也能够在 ShowMeAI 查阅 cs231n 系列笔记学习)

  • 二维示例:

    • 黄色和红色数字显示过滤器 (= 内核) 权重
    • 绿色显示输出
    • 粉色显示输入

1.4 文本的一维卷积

  • 用于文本利用的 1 维卷积

1.5 带填充的文本的一维卷积

  • 输出长度为 \(L\) 的词序列

    • 假如单词维度为 4,即有 4 channels
    • 卷积后将会失去 1 channel

  • 多个 channel,则最终失去多个 channel 的输入,关注的文本潜在特色也不同

1.6 conv1d,随时间推移填充最大池化

  • 均匀池化对 feature map 求均匀

1.7 PyTorch 实现

  • Pytorch 中的实现:参数很好地对应后面讲到的细节
batch_size= 16
word_embed_size= 4
seq_len= 7
input = torch.randn(batch_size, word_embed_size, seq_len)
conv1 = Conv1d(in_channels=word_embed_size, out_channels=3, kernel_size=3) # can add: padding=1 
hidden1 = conv1(input)
hidden2 = torch.max(hidden1, dim=2) # max pool

1.8 步长 (这里为 2)

  • stride 步长,缩小计算量

1.9 部分最大池化

  • 每两行做 max pooling,被称为步长为 2 的部分最大池化

1.10 1 维卷积的 k -max pooling

  • 记录每一个 channel 的所有工夫的 top k 的激活值,并且按原有程序保留(上例中的 -0.2 0.3)

1.11 空洞卷积:dilation 为 2

扩张卷积 / 空洞卷积

  • 上例中,对 1 3 5 行进行卷积,通过两个 filter 失去两个 channel 的激活值
  • 能够在第一步的卷积中将卷积核从 3 改为 5,即可实现这样的成果,既保证了矩阵很小,又保障了一次卷积中看到更大范畴的句子

补充解说 / Summary

  • CNN 中,一次能看一个句子的多少内容是很重要的概念
  • 能够应用更大的 filter、扩张卷积或者增大卷积深度 (层数)

2. 利用 CNN 做文本分类

2.1 用于句子分类的单层 CNN

  • 指标:句子分类

    • 次要是辨认判断句子的 踊跃或消极情绪
    • 其余工作

      • 判断句子 主观或主观
      • 问题分类:问题是对于什么实体的?对于人、地点、数字、……

  • 一个卷积层和 池化层 的简略应用
  • 词向量:\(\mathbf{x}_{i} \in \mathbb{R}^{k}\)
  • 句子:\(\mathbf{x}_{1 : n}=\mathbf{x}_{1} \oplus x_{2} \oplus \cdots \oplus \mathbf{x}_{n}\) (向量连贯)
  • 连贯 \(\mathbf{X}_{i : i+j}\) 范畴内的句子 (对称更常见)
  • 卷积核 \(\mathbf{w} \in \mathbb{R}^{h k}\) (作用范畴为 \(h\) 个单词的窗口)
  • 留神,filter 是向量,size 能够是 2、3 或 4

2.2 单层 CNN

  • 过滤器 \(w\) 利用于所有可能的窗口(连贯向量)
  • 为 CNN 层计算特色(一个通道)

$$
c_{i}=f\left(\mathbf{w}^{T} \mathbf{x}_{i : i+h-1}+b\right)
$$

  • 句子 \(\mathbf{x}_{1 : n}=\mathbf{x}_{1} \oplus \mathbf{x}_{2} \oplus \ldots \oplus \mathbf{x}_{n}\)
  • 所有可能的长度为 \(h\) 的窗口 \(\left{\mathbf{x}_{1 : h}, \mathbf{x}_{2 : h+1}, \dots, \mathbf{x}_{n-h+1 : n}\right}\)
  • 后果是一个 feature map \(\mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1}\)

2.3 池化与通道数

  • 池化:max-over-time pooling layer
  • 想法:捕捉最重要的激活(maximum over time)
  • 从 feature map 中 \(\mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1}\)
  • 池化失去单个数字 \(\hat{c}=\max {\mathbf{c}}\)

  • 应用多个过滤器权重 \(w\)
  • 不同窗口大小 \(h\) 是有用的
  • 因为最大池化 \(\hat{c}=\max {\mathbf{c}}\),和 \(c\) 的长度无关

$$
\mathbf{c}=\left[c_{1}, c_{2}, \dots, c_{n-h+1}\right] \in \mathbb{R}^{n-h+1}
$$

  • 所以咱们能够有一些 filters 来察看 unigrams、bigrams、tri-grams、4-grams 等等

2.4 多通道输出数据

  • 应用事后训练的单词向量初始化 (word2vec 或 Glove)
  • 从两个正本开始
  • 只对 1 个正本进行了反向流传,其余放弃 动态
  • 两个通道集都在最大池化前增加到 \(c_i\)

2.5 Classification after one CNN layer

  • 首先是一个卷积,而后是一个最大池化

  • 为了取得最终的特征向量 \(\mathbf{z}=\left[\hat{c}_{1}, \dots, \hat{c}_{m}\right]\)

    • 假如咱们有 \(m\) 个卷积核 (滤波器 filter) \(w\)
    • 应用 100 个大小别离为 3、4、5 的特色图

  • 最终是简略的 softmax layer \(y=\operatorname{softmax}\left(W^{(S)} z+b\right)\)

补充解说

  • https://arxiv.org/pdf/1510.03…
  • 输出长度为 7 的一句话,每个词的维度是 5,即输出矩阵是 \(7 \times 5\)
  • 应用不同的 filter_size : (2,3,4),并且每个 size 都是用两个 filter,取得两个 channel 的 feature,即共计 6 个 filter
  • 对每个 filter 的 feature 进行 1-max pooling 后,拼接失去 6 维的向量,并应用 softmax 后再取得二分类后果

2.6 Regularization 正则化

  • 应用 Dropout:应用概率 \(p\) (超参数) 的伯努利随机变量 (只有 0 1 并且 \(p\) 是为 \(1\) 的概率) 创立 mask 向量 \(r\)

  • 训练过程中删除特色

$$
y=\operatorname{softmax}\left(W^{(S)}(r \circ z)+b\right)
$$

  • 解释:避免相互适应(对特定特色的适度拟合)
  • 在测试时不实用 Dropout,应用概率 \(p\) 缩放最终向量

$$
\hat{W}^{(S)}=p W^{(S)}
$$

  • 此外:限度每个类的权重向量的 L2 Norm (softmax 权重 \(W^{(S)}\) 的每一行) 不超过固定数 \(s\) (也是超参数)
  • 如果 \(\left|W_{c}^{(S)}\right|>s\),则从新缩放为 \(\left|W_{c}^{(S)}\right|=s\)

    • 不是很常见

3.CNN 细节

3.1 CNN 参数探讨

  • 基于验证集 (dev) 调整超参数
  • 激活函数:Relu
  • 窗口过滤器尺寸 \(h=3,4,5\)
  • 每个过滤器大小有 100 个特色映射
  • Dropout\(p=0.5\)

    • Kim(2014 年) 报告称,从 Dropout 来看,准确率进步了 \(2 – 4 \%\)
  • softmax 行的 L2 束缚,\(s=3\)
  • SGD 训练的最小批量:\(50\)
  • 词向量:用 word2vec 预训练,\(k=300\)
  • 训练过程中,一直查看验证集的性能,并抉择最高精度的权重进行最终评估

3.2 试验后果

  • 不同的参数设置下的试验后果

3.3 比照 CNN 与 RNN

  • Dropout 提供了 \(2 – 4 \%\) 的精度改良
  • 但几个比拟零碎没有应用 Dropout,并可能从它取得雷同的收益

  • 依然被视为一个简略架构的显著后果
  • 与咱们在前几节课中形容的窗口和 RNN 架构的不同之处:池化、许多过滤器和 Dropout
  • 这些想法中有的能够被用在 RNNs 中

3.4 模型比照

  • 词袋模型 / Bag of Vectors:对于简略的分类问题,这是一个十分好的基线。特地是如果前面有几个 ReLU 层 (See paper: Deep Averaging Networks)

  • 词窗分类 / Window Model:对于不须要宽泛上下文的问题 (即实用于 local 问题),适宜单字分类。例如 POS、NER

  • 卷积神经网络 / CNN:适宜分类,较短的短语须要零填充,难以解释,易于在 gpu 上并行化

  • 循环神经网络 / RNN:从左到右的认知更加具备可信度,不适宜分类 (如果只应用最初一种状态),比 CNNs 慢得多,适宜序列标记和分类以及语言模型,联合注意力机制时十分棒

补充解说

  • RNN 对序列标记和分类之类的事件有很好的成果,以及语言模型预测下一个单词,并且联合注意力机制会获得很好的成果,然而对于某个句子的整体解释,CNN 做的是更好的

3.5 跳接构造利用

  • 咱们在 LSTMs 和 GRUs 中看到的 门 / 跳接 是一个广泛的概念,当初在很多中央都应用这个概念
  • 你还能够应用 ** 纵向 ** 的门
  • 实际上,要害的概念——用快捷连贯对候选更新求和——是十分深的网络工作所须要的

  • Note:增加它们时,请将 \(x\) 填充成 conv 一样的维度,再求和

3.6 批归一化 BatchNorm

  • 罕用于 CNNs
  • 通过将激活量缩放为零均值和单位方差,对一个 mini-batch 的卷积输入进行变换

    • 这是统计学中相熟的 Z-transform
    • 但在每组 mini-batch 都会更新,所以稳定的影响不大

  • 应用 BatchNorm 使模型对参数初始化的敏感水平降落,因为输入是主动从新标度的

    • 也会让学习率的调优更简略,模型的训练会更加稳固
  • PyTorch:nn.BatchNorm1d

3.7 1×1 卷积

  • 1×1 的卷积有作用吗 是的

  • 1×1 卷积,即网络中的 Network-in-network (NiN) connections,是内核大小为 1 的卷积内核
  • 1×1 卷积提供了一个跨通道的全连贯的线性层
  • 它能够用于从多个通道映射到更少的通道
  • 1×1 卷积增加了额定的神经网络层,附加的参数很少

    • 与全连贯 (FC) 层不同——全连贯 (FC) 层增加了大量的参数

3.8 CNN 利用:机器翻译

  • 最早胜利的神经机器翻译之一
  • 应用 CNN 进行编码,应用 RNN 进行解码
  • Kalchbrennerand Blunsom(2013) Recurrent Continuous Translation Models

3.9 #论文解读# Learning Character-level Representations for Part-of-Speech Tagging

  • 对字符进行卷积以生成单词嵌入
  • 固定窗口的词嵌入被用于 POS 标签

3.10 #论文解读# Character-Aware Neural Language Models

  • 基于字符的单词嵌入
  • 利用卷积、highway network 和 LSTM

4. 深度 CNN 用于文本分类

4.1 深度卷积网络用于文本分类

  • 起始点:序列模型 (LSTMs) 在 NLP 中占主导地位;还有 CNNs、注意力等等,然而所有的模型基本上都不是很深刻——不像计算机视觉中的深度模型
  • 当咱们为 NLP 构建一个相似视觉的零碎时会产生什么
  • 从字符级开始工作

4.2 VD-CNN 构造

  • 整个零碎和视觉神经网络模型中的 VGG 和 ResNet 构造有点像

  • 不太像一个典型的深度学习 NLP 零碎

  • 后果是固定大小,因为文本被截断或者填充成对立长度了

  • 每个阶段都有部分池化操作,特色数量 double

4.3 VD-CNN 的卷积模块

  • 每个卷积块是两个卷积层,每个卷积层前面是 BatchNorm 和一个 ReLU
  • 卷积大小为 3
  • pad 以放弃 (或在部分池化时减半) 维数

4.4 试验后果

  • 应用大文本分类数据集

    • 比 NLP 中常常应用的小数据集大得多,如 Yoon Kim(2014) 的论文

补充解说

  • 以上数据均为错误率,所以越低越好
  • 深度网络会获得更好的后果,残差层获得很好的后果,然而深度再深时并未获得成果晋升
  • 试验表明应用 MaxPooling 比 KMaxPooling 和 应用 stride 的卷积 的两种其余池化办法要更好
  • ConvNets 能够帮忙咱们建设很好的文本分类零碎

4.5 RNNs 比较慢

  • RNNs 是深度 NLP 的一个十分规范的构建块
  • 但它们的并行性很差,因而速度很慢
  • 想法:取 RNNs 和 CNNs 中最好且可并行的局部

5.Q-RNN 模型

5.1 Quasi-Recurrent Neural Network

  • 致力把两个模型家族的长处联合起来
  • 工夫上并行的卷积,卷积计算候选,忘记门和输入门

$$
\begin{aligned}
\mathbf{z}_{t} &=\tanh \left(\mathbf{W}_{z}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{z}^{2} \mathbf{x}_{t}\right) \\
\mathbf{f}_{t} &=\sigma\left(\mathbf{W}_{f}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{f}^{2} \mathbf{x}_{t}\right) \\
\mathbf{o}_{t} &=\sigma\left(\mathbf{W}_{o}^{1} \mathbf{x}_{t-1}+\mathbf{W}_{o}^{2} \mathbf{x}_{t}\right)
\end{aligned}
$$

$$
\begin{aligned}
\mathbf{Z} &=\tanh \left(\mathbf{W}_{z} * \mathbf{X}\right) \\
\mathbf{F} &=\sigma\left(\mathbf{W}_{f} * \mathbf{X}\right) \\
\mathbf{O} &=\sigma\left(\mathbf{W}_{o} * \mathbf{X}\right)
\end{aligned}
$$

  • 跨通道并行性的逐元素的门控伪递归是在池化层中实现的

$$
\mathbf{h}_{t}=\mathbf{f}_{t} \odot \mathbf{h}_{t-1}+\left(1-\mathbf{f}_{t}\right) \odot \mathbf{z}_{t}
$$

5.2 Q-RNN 试验:语言模型

5.3 Q-RNNs:情感剖析

  • 通常比 LSTMs 更好更快
  • 可解释更好

5.4 QRNN 的限度

  • 对于字符级的 LMs 并不像 LSTMs 那样无效

    • 建模时遇到的更长的依赖关系问题

  • 通常须要更深刻的网络来取得与 LSTM 一样好的性能

    • 当它们更深刻时,速度依然更快
    • 无效地应用深度作为真正递归的代替

5.5 RNN 的毛病 &Transformer 提出的动机

  • 咱们心愿可能并行减速,但 RNN 是串行的

  • 只管 GRUs 和 LSTMs,RNNs 通过注意力机制能够捕捉到长时依赖,但随着序列增长,须要计算的门路也在增长

  • 如果注意力机制自身能够让咱们关注任何地位的信息,可能咱们不须要 RNN?

6. 视频教程

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

7. 参考资料

  • 本讲带学的 在线阅翻页本
  • 《斯坦福 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