Overview
传统语言模型
RNNs
RNN 语言模型
一些训练时重要的策略和技巧
梯度消失和梯度爆炸的问题
双向RNNs
其他序列问题中的RNNs
Language Models
语言模型计算的是一连串词的概率:P(w1,w2…wT);其中的w1,w2…wT都是词向量。
这种语言模型有利于机器翻译,例如:
1.词序:p(the cat is small) > p(small the is cat)
2.词的选取:p(walking home after school) > p(walking house after school)
Traditional Language Models
在传统的语言模型中,计算的概率P通常取决于之前的一个包含n个词的窗(window)中的词。
传统语言模型可以理解为一个不准确但是必要的马尔科夫假设:
以基于单个词和两个词为例(一元和二元),估计接下来出现的词的概率:
更高的元(grams)能获得更好结果
单个这样的传统的语言模型存在非常多的n-grams(n元),所以要求巨大的RAM。
目前处于领先地位的研究:
论文题目:Scalable Modified Kneser--‐Ney Language Model Estimation by Heafield et.建立了一个基于126 billion tokens的模型,在140GB的机器上训练了2.8天。
Recurrent Neural Networks!
RNN模型在每一个(时间节点)time step都有一个相应的权重(weights)
RNN模型考虑到了前面出现的所有词
对RAM的需求仅仅是特定数目的词
Recurrent Neural Network Language Model
词向量:x1…xt-1,xt,xt+1…xT
对于单个时间节点(time step):
RNN Language Model的中心思想:在所有的time step上使用同一组weights。而对于每个time step,其计算公式不变:
那么总的y就是基于整个词汇表V的概率分布
交叉熵公式是相同的:
Training RNNs is hard
RNN训练困难,可以体现在以下几点:
1)在每次的前向传播中,都需要乘以一个矩阵W
2)理论上,在RNN模型中,很久以前的time step上的输入也会影响RNN的输出y
3)试试求一下RNN模型中,连续两个time step对的导数
The vanishing gradient problem
在反向传播过程中,对于每一个time step都要乘以同一个矩阵W
剖析造成RNN vanishing gradient problem的原因:
1)每个time step上的计算公式:
2)全局的误差等于每个time step上的误差之和:
3)又因为链式法则:
4)观察下面红色框中的公式:
5)又因为:
原因是之前time step的h会对后面的time step的h产生影响
6)而前面累乘号里面的式子即导数,有事一个雅克比(jacobian)矩阵:
7)要计算雅克比行列式,需要对其中的每个元素进行求导:
8)而梯度则是雅克比矩阵的乘积,这样的话到最后,梯度会变得特别大或者特别小,造成vanishing gradient problem:
理论上,单个time step上的误差error在反向传播时,会影响之前很多time step的改变,所以vanishing gradient 是一个problem:
vanishing gradient problem对问答系统等的影响:对于当前语句涉及到的单词,模型不会考虑离这些单词的很远的time step上的单词。例如:
IPython Notebook with vanishing gradient example
Trick for exploding gradient: clipping trick
伪代码:
这样修改直接改变了梯度公式本身
For vanishing gradients: Initialization + ReLus!
将W初始化为单位矩阵,并且使用max(x,0)作为非线性函数:
这是只有一个节点的RNN的梯度下降图。蓝色实线是没做trick的梯度轨迹,撞到那堵墙后就被弹飞了;做了trick后的轨迹是虚线,同样遇到那堵墙后,新的梯度不会被乱弹。每一步的W会用梯度更新,梯度爆了的话,新W就离老W远很多了,局部性就被打破了
Problem: Softmax is huge and slow
策略:基于类的单词预测
即:
类的数量越多,则复杂性更大,速度也越低。
Sequence modeling for other tasks
分类:
1)NER(命名实体识别,如车辆,地点等等)
2)情感分析
3)观点表达
可以参考下面这篇论文:
Opinion Mining with Deep Recurrent Nets
目标:通过以下两种方法给每个单词进行分类
这两张slides我没有理解,欢迎留言指导讨论
Approach: Recurrent Neural Network
标记:
其中:
1)x代表一个单词(token)所表示的词向量
2)y代表模型输出的label(B,I或者O),上图中的g=softmax
3)h是记忆单元(可以理解为隐含层),是由之前的记忆单元和当前的词向量计算得到,可以说概括了直到这个time step的一段话
Bidirectional RNNs
对于分类问题,如果想要当前的time step包含之前和之后的词的信息,则可以考虑使用双向RNN:
Data
时间: 2024-10-28 07:39:05