CS224N笔记——RNN和语言模型
目录
传统语言模型
循环神经网络语言模型
损失函数
训练RNN时的困难
梯度消失问题
梯度消失实例
防止梯度爆炸
减缓梯度消失
困惑度结果
问题:softmax太大且太慢
一个实现技巧
序列模型的应用
双向和深层RNNs
双向RNNs
深层双向RNNs
评测
传统语言模型
语言模型就是计算一个单词序列(句子)的概率的模型。可以用于机器翻译中,判断译文序列中一种词序的自然程度高于另一种,判断一种用词选择优于另一种。
为了简化问题,引入马尔科夫假设,句子的概率通常是通过待预测单词之前长度为n的窗口建立条件概率来预测:
为了估计此条件概率,常用极大似然估计,比如对于Bigram和Trigram模型,有:
在数据量足够的情况下,n-gram中的n越大,模型效果越好。但实际上,数据量总是不如人意,这时候一些平滑方法就不可或缺。另外,这些ngram可能会占用上G的内存,在最新的研究中,一个1260亿的语料在140G内存的单机上花了2.8天才得到结果。
循环神经网络语言模型
新的语言模型是利用RNN对序列建模,复用不同时刻的线性非线性单元及权值,理论上之前所有的单词都会影响到预测单词。
所需内存只与词表大小成正比,不取决于序列长度。
给定一个词向量序列:,在每个时间点上都有隐藏层的特征表示:
损失函数
分类问题中常见的交叉熵损失函数:
在大小为T的整个语料上的交叉熵误差为:
如果以2为底数会得到“perplexity困惑度”,代表模型下结论时的困惑程度,越小越好:
Perplexity:
训练RNN时的困难
观察句子1:
"Jane walked into the room. John walked in too. Jane said hi to ___"
以及句子2:
"Jane walked into the room. John walked in too. It was late in the day, and everyone was walking home after a long day at work. Jane said hi to ___"
人类可以轻松地在两个空中填入“John”这个答案,但RNN却很难做对第二个。这是因为在前向传播的时候,前面的x
反复乘上W,导致对后面的影响很小。
反向传播时也是如此。
梯度消失问题
整个序列的预测误差是之前每个时刻的误差之和:
而每个时刻t的误差又是之前每个时刻的误差之和,应用链式法则:
此处的指的是在[k,t]时间区域上应用链式法则:
由于,每个就是h的雅克比矩阵(导数矩阵):
将这几个式子写在一起,得到:
这个式子最中间的部分最值得关注,因为它是一个连乘的形式,长度为时间区域的长度。记βW 和 βh分别为矩阵和向量的范数(L2),则上述雅克比矩阵的范数满足:
指数项在显著地大于或小于1的时候,经过足够多的t−k次乘法之后就会趋近于0或无穷大。小于1更常见,会导致很长时间之前的词语无法影响对当前词语的预测。
而大于1时,浮点数运算会产生溢出(NaN),一般可以很快发现。这叫做梯度爆炸。小于1,或者下溢出并不产生异常,难以发现,但会显著降低模型对较远单词的记忆效果,这叫做梯度消失。
梯度消失实例
http://cs224d.stanford.edu/notebooks/vanishing_grad_example.html
防止梯度爆炸
一种暴力的方法是,当梯度的长度大于某个阈值的时候,将其缩放到某个阈值。虽然在数学上非常丑陋,但实践效果挺好。
其直观解释是,在一个只有一个隐藏节点的网络中,损失函数和权值w偏置b构成error surface,其中有一堵墙:
每次迭代梯度本来是正常的,一次一小步,但遇到这堵墙之后突然梯度爆炸到非常大,可能指向一个莫名其妙的地方(实线长箭头)。但缩放之后,能够把这种误导控制在可接受的范围内(虚线短箭头)。
但这种trick无法推广到梯度消失,因为你不想设置一个最低值硬性规定之前的单词都相同重要地影响当前单词。
减缓梯度消失
与其随机初始化参数矩阵,不如初始化为单位矩阵。这样初始效果就是上下文向量和词向量的平均。然后用ReLU激活函数。这样可以在step多了之后,依然使得模型可训练。
困惑度结果
相较于NGram,RNN的困惑度要小一些。
问题:softmax太大且太慢
词表太大的话,softmax很费力。一个技巧是,先预测词语的分类(比如按词频分),然后在分类中预测词语。分类越多,困惑度越小,但速度越慢。所以存在一个平衡点:
一个实现技巧
记录每个t的误差不要丢,反向传播的时候将其累加起来。
序列模型的应用
可以把每个词分类到NER、实体级别的情感分析、意见表达。
其中,意见挖掘任务就是将每个词语归类为:
DSE:直接主观描述(明确表达观点等)
ESE:间接主观描述(间接地表达情感等)
语料标注采用经典的BIO标注:
实现这个任务的朴素网络结构就是一个裸的RNN:
但是这个网络无法利用当前词语的下文辅助分类决策,解决方法是使用一些更复杂的RNN变种。
双向和深层RNNs
双向RNNs
这里箭头表示从左到右或从右到左前向传播,对于每个时刻t的预测,都需要来自双向的特征向量,拼接后进行分类。箭头虽然不同,但参数还是同一套参数(有些地方是两套参数)。
深层双向RNNs
理解了上图之后,再加几个层,每个时刻不但接受上个时刻的特征向量,还接受来自下层的特征表示:
评测
评测方法是标准的F1(因为标签样本不均衡),在不同规模的语料上试验不同层数的影响:
可见层数不是越多越好。
CS224N笔记——RNN和语言模型相关推荐
- 【笔记3-6】CS224N课程笔记 - RNN和语言模型
CS224N(六)Recurrent Neural Networks and Language Models 语言模型 语言模型介绍 n-gram 基于窗口的神经语言模型 RNN RNN Loss a ...
- 【2019斯坦福CS224N笔记】(5)The probability of a sentence Recurrent Neural Networks and Language Models
这部分内容主要研究语言模型及循环神经网络在语言模型中的应用. 目录 1.语言模型 2.经典n-gram模型 3.Window-based DNN 4.Recurrent Neural Networks ...
- CS224n笔记13 卷积神经网络
为什么80%的码农都做不了架构师?>>> 本文由码农场同步,最新版本请查看原文:http://www.hankcs.com/nlp/cs224n-convolutional-n ...
- 基于RNN的语言模型与机器翻译NMT
语言模型 传统的语言模型 基于RNN的语言模型 机器翻译 基于统计的机器翻译架构 基于RNN的seq2seq架构 seq2seq结构 优化seq2seq attention search in dec ...
- 用 RNN 建立语言模型
用 RNN 建立语言模型 今天来看循环神经网络的一个重要的应用:语言模型. 本文结构: 什么是语言模型? 语言模型的应用? 为什么用基于 RNN 的语言模型? RNN 是如何实现语言模型的? RNN ...
- 【NLP CS224N笔记】Assignment 1 - Exploring Word Vectors
作业来源:https://github.com/xixiaoyao/CS224n-winter-together 1. 写在前面 这篇文章是CS224N课程的第一个大作业, 主要是对词向量做了一个探索 ...
- CS224N笔记(四) Lecture 7:循环神经网络RNN的进阶——LSTM与GRU
本文将介绍两种比RNN更好地应对梯度消失问题的模型结构--LSTM和GRU,文章以CS224N的课件和材料为基础,重点分析他们的结构特点和梯度计算,在梯度消失的解决策略上进行了深入探究,并进一步分析它 ...
- 【NLP CS224N笔记】Lecture 12 - Information from parts of words Subword Models
本次梳理基于Datawhale 第12期组队学习 -CS224n-预训练模块 详细课程内容参考(2019)斯坦福CS224n深度学习自然语言处理课程 1. 写在前面 自然语言处理( NLP )是信息时 ...
- cs224n笔记(一) Lecture1: word2vec算法详细解析
本文是对斯坦福CS224N关于word2vec内容的学习笔记 目录 1. 背景知识 2. 基本原理 1. CBOW 2. skip-gram 3.维度爆炸的处理 1. negative samplin ...
- 机器学习笔记 RNN初探 LSTM
1 引入 一个input的属性 会受到其前后文的影响-->神经网络需要记忆 这里"Taipei"的属性(destination还是source)受到前面的动词"ar ...
最新文章
- dlna和miracast可以共存吗_AirPlay、DLNA、Miracast三大无线技术介绍
- php文件上传指定路径,php上传文件到指定文件夹
- java中用字节流读取文本时中文乱码
- oracle正在启动或关闭中的解决方法
- MFC的非模态对话框资源管理
- 动易SiteFactory数据采集模块
- 魅族路由器极速版刷机_[技术贴]路由器刷pandavan固件教程——以魅族路由器极速版为例...
- 原生社区交友婚恋视频即时通讯双端APP源码 ONE兔2.0版
- Detours库配置记录
- Latex添加一条水平线
- 2011款iMac的AirDrop使用方法。
- 海豚浏览器显示连接服务器失败,海豚浏览器常见问题解答
- 5G 时代,AI 如何破竹而出? | AI ProCon
- 2016面试总结,面试宝典有木有
- 如何清理占用计算机内存,告诉你如何深度清理电脑内存
- Idea创建一个java项目
- KANO模型以及产品经理的素质模型
- 一般能ping通自己的IP ,但是ping 不通网关,也ping不通别的主机IP
- 这些电脑软件堪称惊艳,你一定用得上【建议收藏】
- 一键免费下载全网在线视频素材,自己动手丰衣足食
热门文章
- onclick控制元素显示与隐藏时,点击第一次无反应的原因
- JavaWeb学习总结第四篇--Servlet开发
- 2.2 CSS3基本语法 + 选择器
- jQuery EasyUI API 中文文档 - 数值微调器(NumberSpinner)
- ajax调用webService
- 【工具推荐】PDF和其他格式的相关的转换
- 【c++ | 谭浩翔】第四章练习
- OBS( Open Broadcaster Software )录制视频黑屏问题录制方法
- matlab将多个nc文件进行合成TIF
- oracle数据库直方图,数据库 – Oracle伪造直方图