- 作者:韩信子 @ShowMeAI
- 教程地址:http://www.showmeai.tech/tutorials/36
- 本文地址:http://www.showmeai.tech/article-detail/247
- 申明:版权所有,转载请分割平台与作者并注明出处
- 珍藏 ShowMeAI 查看更多精彩内容
本系列为 斯坦福 CS224n《自然语言解决与深度学习 (Natural Language Processing with Deep Learning)》的全套学习笔记,对应的课程视频能够在 这里 查看。
ShowMeAI 为 CS224n 课程的全副课件,做了 中文翻译和正文 ,并制作成了 GIF 动图!点击 第 11 讲 -NLP 中的卷积神经网络 查看的课件正文与带学解读。更多材料获取形式见文末。
引言
CS224n是顶级院校斯坦福出品的深度学习与自然语言解决方向专业课程,核心内容笼罩 RNN、LSTM、CNN、transformer、bert、问答、摘要、文本生成、语言模型、浏览了解等前沿内容。
本篇笔记对应斯坦福 CS224n 自然语言解决专项课程的常识板块:NLP 中的卷积神经网络。次要解说卷积神经网络的构造,及其在 NLP 场景下的应用形式,一些模块和可调构造。
笔记外围词
- 卷积神经网络 / CNN
- 卷积层
- 池化层
- 多卷积核
- 多通道 / Multiple-Channels
- 卷积核
- N-gram
- filter
- k-max pooling
- 文本分类
1.NLP 中的卷积神经网络
1.1 为什么应用 CNN
卷积神经网络是一种非凡构造的神经网络,最早被广泛应用于计算机视觉畛域,但在 NLP 畛域同样有着显著的利用成果。它绝对于传统神经网络,引入了部分感触野和多滤波器概念,能在控制参数量的状况下,对输出数据进行高效地解决。具体到 NLP 中,它接管词向量的序列,并首先为所有子短语创立短语向量(embedding),而后 CNNs 基于卷积核并行实现数据处理计算。
(对于 CNN 的细节也能够参考 ShowMeAI 的对吴恩达老师课程的总结文章 深度学习教程 | 卷积神经网络解读,内含动图解说)
1.2 什么是卷积
咱们从一维的状况开始。思考两个一维向量 \(f\) 和 \(g\),其中 \(f\) 是主向量,\(g\) 是 filter。\(f\) 和 \(g\) 之间的卷积,第 \(n\) 项处的值示意为 \((f \ast g)[n]\),它等于 \(\sum_{m=-M}^{M} f[n-m] g[m]\)。
对于二维卷积而言,计算如下所示,\(9\times9\) 的绿色矩阵示意关注的主矩阵 \(f\)(在理论利用中就是输出数据矩阵)。\(3\times3\) 的红色矩阵示意 filter \(g\),以后正在计算的卷积位于起始地位,计算形式为 filter 和 input 区域的逐元素乘法再求和,计算结果为 4。
这里应用 ShowMeAI 深度学习教程 | 卷积神经网络解读 文章中的一个动静计算过程:
1.3 卷积层解说
思考单词向量 \(x_{i} \in R^{k}\) 和一个 \(n\) 个单词的句子的单词向量串联,\(x_{1 : n}=x_{1} \oplus x_{2} \ldots \oplus x_{n}\)。最初,思考卷积滤波器 \(w \in R^{h k}\),即作用于 \(h\) 个单词。对于 \(k = 2, n = 5, h = 3\),上图为 NLP 的单层卷积层。在 the country of my birth
这个句子中,间断三个单词的每一个可能组合都将失去一个值。
留神,滤波器 \(w\) 自身是一个向量,咱们将有 \(c_{i}=f\left(w^{T} x_{i : i | h-1}+b\right)\) 来给出 \(\mathbf{c}=\left[c_{1}, c_{2} \dots c_{n-h+1}\right] \in R^{n-h+1}\)。最初两个工夫步,即从 my
或 birth
开始,咱们没有足够的字向量来与滤波器相乘 (因为 \(h = 3\))。如果咱们须要与后两个词向量相干的卷积,一个常见的技巧是用 \(h – 1\) 个零向量填充句子的左边,如上图所示。
1.4 池化层解说
假如咱们不应用补零,咱们将失去最终的卷积输入,\(\mathbf{c}\) 有 \(n-h+1\) 个数。通常,咱们心愿接管 CNN 的输入,并将其作为输出,输出到更深层,如前馈神经网络或 RNN。然而,所有这些都须要一个固定长度的输出,而 CNN 输入的长度依赖于句子的长度 \(n\)。解决这个问题的一个聪慧的办法是应用 max-pooling。CNN 的输入 \(\mathbf{c} \in \mathbb{R}^{n-h-1}\) 是 max-pooling 层的输出。max-pooling 的输入层 \(\hat{c}=\max {\mathbf{c}}\),因而 \(\hat{c} \in \mathbb{R}\)。
咱们也能够应用最小池化,因为通常咱们应用 ReLU 作为非线性激活函数而 ReLU 的下界是 \(0\)。因而,一个最小池化可能会被 ReLU 笼罩,所以咱们简直总是应用最大池化而不是最小池化。
1.5 多卷积核
在下面与图 2 相干的例子中,咱们有 \(h = 2\),这意味着咱们只应用一个特定的组合办法,即应用过滤器来查看 bi-grams。咱们能够应用多个 bi-grams 过滤器,因为每个过滤器将学习辨认不同类型的 bi-grams。更一般地说,咱们并不仅限于应用 bi-grams,还能够应用 tri-grams、quad-grams 甚至更长的过滤器。每个过滤器都有一个关联的最大池化层。因而,CNN 层的最终输入将是一个长度等于过滤器数量的向量。
1.6 多通道
如果咱们容许梯度流入这里应用的单词向量,那么单词向量可能会随着训练而产生显著变动。这是须要的,因为它将单词向量专门用于以后特定工作(远离 GloVe 初始化)。然而,如果单词只呈现在测试集中而没有呈现在训练集上呢?尽管呈现在训练集中的其余语义相干的单词向量将从它们的起始点显著挪动,然而这些单词仍将处于它们的初始点。神经网络将专门用于已更新的输出。因而,咱们在应用这些单词的句子中会体现得很差。
一种办法是保护两组单词向量,一组“动态”(没有梯度流)和一组“动静”(通过 SGD 更新)。它们最后是一样的(GloVe 或者其余初始化)。这两个汇合同时作为神经网络的输出。因而,初始化的词向量在神经网络的训练中始终起着重要的作用。在测试中给出看不见的单词能够进步正确理解的几率。
有几种解决这两个 channel 的办法,最常见的是在 CNN 中应用之前对它们进行均匀。另一种办法是将 CNN 过滤器的长度加倍。也能够在通过卷积层之后失去 feature maps 再进行合并(比方下图一样做 pooling 操作合并)
1.7 CNN 构造抉择
1) 宽卷积还是窄卷积
参见上图。另一种问这个问题的办法是咱们应该放大还是扩充?即咱们是否应用 zero-pad?
如果咱们应用窄卷积,咱们只在一个滤波器的所有重量都有一个匹配输出重量的地位计算卷积。在输出的开始和完结边界处显然不是这样,如图 4 中的左侧网络所示。
如果咱们应用宽卷积,咱们有一个输入重量对应于卷积滤波器的每个对齐。为此,咱们必须在输出的开始和完结处填充 \(h – 1\) 个零。
在窄卷积状况下,输入长度为 \(n – h+ 1\),而在宽卷积状况下,输入长度为 \(n+h – 1\)。
2) k-max 池化
这是对最大池化层的概括。k-max 池化层不是只从它的输出中抉择最大的值,而是抉择 \(k\) 个最大的值(并且放弃原有的程序)。设置 \(k = 1\) 则是咱们后面看到的最大池化层。
2. 参考资料
- 本教程的 在线浏览版本
- 《斯坦福 CS224n 深度学习与自然语言解决》课程学习指南
- 《斯坦福 CS224n 深度学习与自然语言解决》课程大作业解析
- 【双语字幕视频】斯坦福 CS224n | 深度学习与自然语言解决(2019·全 20 讲)
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 与深度学习的将来