斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络

课程概要

1、传统语言模型
2、循环神经网络
3、实例(python)
4、RNN处理的一些技巧
5、针对其他任务的序列模型
6、总结

一、传统语言模型

语言模型可以计算一些系列的单词的概率P(w1,…,wT)

  • 可以用来进行机器翻译

    • 单词顺序:p(the cat is small) > p(small the is cat)
    • 单词选择:p(walking home after school) > p(walking house after school)
  • 对于单词的概率估计一般是依据马尔可夫假设,我们认为只有单词前面的几个单词会和单词的概率相关,因此我们只计算条件于前面N个单词的单词概率。

  • 对于这些的条件概率的计算,是通过语料库中先验的条件概率来进行估计的。下面展示的是一元和二元的估计。一般而言,随着n元中n的增加,准确率也会增加,但是n的增加会增加许多对内存(RAM)的需求。

  • 更多和语言模型相关的内容,可以参考斯坦福大学-自然语言处理入门 笔记 第四课 语言模型

二、循环神经网络

对于一组单词向量x1,x2,x3,x4…而言,每一个时间步的公式可以写成:
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第1张图片

  • x t是t时刻输入的词向量,长度为d
  • h t-1是t-1时刻得到非线性激活函数的输出值
  • W(hx)是输入词向量的权值矩阵,维度:Dh×d
  • W(hh)是h t-1的权值矩阵,维度:Dh×Dh
  • W(S)是在softmax中的对ht的权值矩阵
  • 要注意的是对于所有时刻的神经元都共用同一个W(hx),W(hh)和W(S)

循环神经网络的图像表示:
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第2张图片上图的多神经元展开:
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第3张图片
这里使用的损失函数,和我们之前提到的交叉熵损失函数是一样的。但是,考虑到我们现在的任务不是对中心词进行分类, 而是预测每个时刻的单词,因此我们需要把之前的基于类的加和换成词汇加和。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第4张图片

3、循环神经网络(RNN)的训练问题:梯度爆炸/消失

对于循环神经网络而言,在进行前馈计算的时候,每一个时刻都会乘以一个相同的矩阵;而在进行后馈计算的时候,每一个时刻也都会乘以一个相同的矩阵。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第5张图片
具体从公式展开,将RNN公式写成相似但是更简单的公式。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第6张图片

就对总体误差E求导W而言,就是求所有时刻的误差的导数之和。

利用链式法则可以把每个时刻的导数写成

其中
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第7张图片
上面的连乘公式的每一个乘子都是一个Jacobain雅克比矩阵,雅克比矩阵的基本形状如下:
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第8张图片
对雅克比矩阵而言,我们可以得到它的范数的上界,其中β是对应的范数上界:

因为梯度是一系列雅克比矩阵的连乘,所以我们可以得到对应的范数上界:
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第9张图片
只要我们一开始设定的初始是大于1的,那么我们最终得到的梯度将会无穷大;而当初始一开始是小于1的,最终梯度将会变得无穷小。
梯度无穷小还会带来的一个问题是当我们在判断t时刻的单词的时候,t-n时刻的单词的影响会变得很小。比如句子,Jane walked into the room.John walked in too. It was late in the day. Jane said hi to ____可能就没有办法填入正确的单词John。

三、实例(python)

演示代码见此处
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第10张图片
如上面的图所示,这是两个RNN模型,一个使用ReLu,一个使用sigmoid为激活函数以后得到的梯度曲线。我们可以看到的共同点是,第一层的梯度是小于第二层的梯度的,因此很有可能会发生梯度消失的问题。

四、RNN处理的一些技巧

1、处理梯度爆炸的方法:clipping trick

这是一个由Mikolov引入的方法,具体是当梯度超过某个最大的值的时候,将梯度截断。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第11张图片
直观的思想展示:这里构建了一个十分简单的神经网络,只包含一个隐层,下图绘制出的是目标函数的三维图。可以看到,实线是没有进行clipping 处理的优化情况,当梯度遇上凸出部分的时候可能会优化到一个非常远的地方;虚线是进行clipping 处理之后,可以一定程度上控制优化的距离。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第12张图片

2、处理梯度消失的方法:初始化+ReLus

所谓的初始化指的是对W矩阵进行初始化定义为单位举证(也就是默认为初始是:单位矩阵f+单位举证x,也就是词向量的加和),并且进行f(z)=rect(z)=max(z,0)的激活函数计算。
参考文献:
Parsing with Compositional Vector Grammars, Socher et al. 2013
A Simple Way to Initialize Recurrent Networks of Rectified Linear Units, Le et al. 2015
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第13张图片

3、复杂度(Perplexity)结果

我们将RNN的结果,与传统的语言模型的结果(五元+Kneser-Ney平滑)进行复杂度的比较,结果发现RNN的表现更加优秀,复杂度(Perplexity)更低。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第14张图片

4、技巧:基于分类的单词预测

softmax的计算实际上是十分巨大和缓慢的,为了提升它的计算,我们可以应用一个技巧:基于分类的单词预测。 简单来说就是先预测单词的分类(分类可以依据单词出现的频率),再预测具体类中的具体单词。分的单词类越多,复杂度(Perplexity)降低也越多,但是分类越多也可能会导致速度变慢,所以这中间需要进行一定的权衡。
p(wt|history)=p(ct|history)p(wt|ct)=p(ct|ht)p(wt|ct)
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第15张图片

5、后馈技巧

在进行后馈计算的时候,只需要遍历一遍整个序列,然后从每个Et中累积δ。

五、针对其他任务的序列模型

对每个单词进行命名实体的识别(NER),实体层面的情感分析,意见表达(opinionated expressions)

以意见表达举例,一个任务是识别直接主观表达(DSEs)和表现主观表达(ESEs)。前者是明确指出个人的观点,后者是暗含的情感与情绪。
具体的标注方法BIO标注,B表示一个实体的开始,I表示实体的继续,O表示什么都不是
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第16张图片

我们可以利用RNN来完成这个任务。结构和公式如下,其中x表示一个词向量,y表示一个标记(B、I、O),g表示softmax
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第17张图片

在进行分类的时候,我们一般希望不仅使用这个单词之前的单词,我们也希望使用这个单词之后的单词,因此我们可以使用双向RNN来解决这个问题。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第18张图片

当然也可以构建深度的双向RNN模型。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第19张图片

数据情况:MPQA 1.2 corpus(Wiebe et al., 2005) 包含535篇新闻,11111个句子。在词组层面人工进行标注DSEs与ESEs。
评价标准:F1
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第20张图片
在不同的语料规模上,得到的不同层数的F1情况。
斯坦福大学-自然语言处理与深度学习(CS224n)笔记 第八课 循环神经网络_第21张图片

六、总结

  • 循环神经网络(RNN)是最好的NLP的深度学习模型之一。
  • 训练它存在的一个困难时梯度爆炸和梯度消失。
  • 它可以进行很多方面的拓展,可以使用很多技巧使得训练得以提升。
  • 下一节课将会介绍它的拓展LSTMs与GRUs

你可能感兴趣的:(CS224,Natural,Language,Processing,w)