赞
踩
第2章 自然语言和单词的分布式表示
第3章 word2vec
第4章 word2vec的高速化
第5章 RNN
第6章 Gated RNN
第7章 基于RNN生成文本
第8章 Attention
前馈(feedforward)
型神经网络,是指网络的传播方向是单向的,输入信号一层一层向下传递。
前馈神经网络结构简单、易于理解,且可以应用在很多应用中。但是不能很好地处理时间序列数据。循环神经网络RNN(Recurrent Neural Network)
应运而生。
CBOW模型是从语料库中获取单词序列,将第
t
t
t个单词作为目标词,周围单词作为上下文,认为上下文单词可以推测出当前单词,也就是按照后验概率式(5.1)建模(窗口大小为1时)。
P
(
w
t
∣
w
t
−
1
,
w
t
+
1
)
(5.1)
P(w_t|w_{t-1},w_{t+1}) \tag {5.1}
P(wt∣wt−1,wt+1)(5.1)
上面提到的窗口是正对当前单词对称,我们也可以将上下文限定为左侧窗口,按照左侧的两个单词推测当前单词,建模改为:
P
(
w
t
∣
w
t
−
2
,
w
t
−
1
)
(5.2)
P(w_t|w_{t-2},w_{t-1}) \tag {5.2}
P(wt∣wt−2,wt−1)(5.2)
语言模型(language model)
是可以给出单词序列发生概率的模型。举个例子,给定序列“you say goodbey”,语言模型判断这句话是自然存在的句子的概率较高,而句子“you say good die”就很不自然。
使用概率来表达语言模型,
m
m
m个单词构成的句子,语言模型给出这个序列的概率,也称为联合概率
:
P
(
w
1
,
⋅
⋅
⋅
,
w
m
)
=
P
(
w
m
∣
w
1
,
.
.
.
,
w
m
−
1
)
P
(
w
m
−
1
∣
w
1
,
⋅
⋅
⋅
,
w
m
−
2
)
⋅
⋅
⋅
P
(
w
3
∣
w
1
,
w
2
)
P
(
w
2
∣
w
1
)
P
(
w
1
)
=
∏
t
=
1
m
P
(
w
t
∣
w
1
,
⋅
⋅
⋅
w
t
−
1
)
(5.4)
简单说就是一句话中的某个词发生的概率需要考虑前面所有词的发生概率(后验概率),整个句子发生的概率就是所有词的后验概率的乘积。
从式5.4看出,语言模型中每个词的后验概率是基于这个词之前的所有词都出现的情况,也就是左侧窗口的大小不定;而CBOW模型的窗口作为超参数是需要指定的,所以和语言模型的联合概率存在差异。但是可以使用CBOW模型的概率近似表示语言模型联合概率。下面是左侧窗口大小为2、右侧窗口大小为0的情况:
P
(
w
1
,
⋅
⋅
⋅
,
w
m
)
=
∏
t
=
1
m
P
(
w
t
∣
w
1
,
⋅
⋅
⋅
w
t
−
1
)
≈
∏
t
=
1
m
P
(
w
t
∣
w
t
−
2
,
w
t
−
1
)
(5.8)
马尔可夫性是指未来的状态仅依存于当前状态。当某个事件的概率仅取决于其前面的N个事件时,称为“N阶马尔可夫链”。这里展示的可以称为“2阶马尔可夫链”。
但是这样的近似丢弃了窗口外的信息,对于一些常见就无法适应了。比如“小明在校门口撞见了小华,小华向xx打了声招呼”,如果窗口大小只为2,是无法学习到“小明”这个前提条件的。
除此之外,CBOW模型本身也丢弃了窗口内的词序信息。如图5-5左侧的常规CBOW模型所示,窗口为2,窗口内的两个词与输入权重矩阵相乘的结果是想加的,没有保留顺序信息。如果将模型改造成右侧的结构,参数的数量将与窗口大小成比例增加。
所以引入RNN来解决以上问题。
特别说明,CBOW模型只是为了获取词向量,一般不用于语言模型。上面的例子只是为了引出RNN。
循环神经网络RNN(Recurrent Neural Network)
,一定是存在回路,也就是在神经网络传递的过程中,在某点的输出重新回流到上游,和上游的输入合并共同作为输入。
一层RNN网络接收一个窗口内的多个有序输入,前一个输入对应的输出和下一个输入共同作为下一个模块的输入。换句话说,时刻
t
t
t的输入和时刻
t
−
1
t-1
t−1的输出合并共同成为时刻
t
t
t的最终输入。所以并不是在同一个模块中反复循环,而是有“时序的流动”。
所以每个时刻的计算公式如下:
h
t
=
tanh
(
h
t
−
1
W
h
+
x
t
W
x
+
b
)
(5.9)
h_t=\tanh(h_{t-1}W_h+x_tW_x+b) \tag {5.9}
ht=tanh(ht−1Wh+xtWx+b)(5.9)
从公式中可以看出,RNN有两个权重矩阵,分别是时刻 t t t的输入 x t x_t xt对应的权重 W x W_x Wx和将前一个RNN层的输出 h t − 1 h_{t-1} ht−1转化为当前时刻的输出的权重 W h W_h Wh。还有偏置 b b b。最后使用的激活函数是双曲正切函数tanh,输出 h t h_t ht一方面作为本层网络的输出传递给下层网络,另一方面也输入给下个时刻的自己。
由此RNN的输出在自身的循环迭代更新下,记录了之前时刻的输入,是具有记忆能力的神经网络。而且每个时刻都有对应的输出,都被记录了下来。输出
h
t
h_t
ht称为隐藏状态(hidden state)
或隐藏状态向量(hidden state vector)
。
上面介绍了RNN的正向传播,下面介绍RNN的反向传播——按照时间序列展开的神经网络的误差反向传播BPTT(Backpropagation Through Time)。
要基于 BPTT 求梯度,必须在内存中保存各个时刻的RNN层的中间数据,随着时序数据变长,计算机的内存使用量、计算量也会增加,反向传播的梯度也会变得不稳定。
Truncated BPTT
,将时间轴方向上过长的网络在合适的位置进行截断,从而创建多个小型网络,然后对截出来的小型网络执行误差反向传播法。只是网络的反向传播的连接被截断,正向传播的连接依然被维持。
上图演示了以10个RNN层为单位组成块,块内完成误差反向传播法。
实际训练时,我们按照每个块为单位进行正向传播和反向传播,完成一个块之后,再处理下一个块。正向传播时前一个块的输出需要传递给下一个块,但是方向传播只局限在块内。
基于 Truncated BPTT ,只需要创建一个在水平方向上长度固定的网络序列。
图中序列长度为T,保留T个时刻的隐藏状态。
可以使用下图更加模块化地表示RNN网络:
单个RNN正向传播
h
t
=
tanh
(
h
t
−
1
W
h
+
x
t
W
x
+
b
)
(5.10)
h_t=\tanh(h_{t-1}W_h+x_tW_x+b) \tag {5.10}
ht=tanh(ht−1Wh+xtWx+b)(5.10)
假设batch size为N,单词向量维度为D,隐藏状态向量维度为H,则正向传播过程中各个变量的形状如下图所示:
Time RNN 层由 T 个 RNN 层构成。
单个RNN组成Time RNN的过程很明显,需要注意的是隐藏状态的处理。
在Time RNN类中使用类变量记录隐藏状态
h
h
h,将前一个块的状态带给下一个块。可以选择将隐藏状态向量置零来模拟第一个块的情况,或者是终止前面序列向后的传播。
基于 RNN 的语言模型称为 RNNLM(RNN Language Model,RNN 语言模型)。
Embedding层将单词ID转化为单词向量,输入RNN层后输出隐藏状态,再经过Affine层和Softmax层。
以“you say goodbye and i say hello.”预料库来演示上面的结构。
可以看出,在模型参数比较理想时,对于第一个单词you,Softmax层的输出概率最大的应该是say。对于say,下一个词是goodbey或hello的概率都比较高,但是应为记住了序列,goodbey的概率还是要高于hello的。
之前我们将整体处理时序数据的层实现为了 Time RNN 层,这里也同样使用Time Embedding层、Time Affine层等来实现整体处理时序数据的层,将目标神经网络转化为下图右侧。
语言模型基于给定的已经出现的单词(信息)输出将要出现的单词的概率分布。困惑度(perplexity)
常被用作评价语言模型的预测性能的指标。
困惑度表示“概率的倒数”。对于语料库“you say goodbye and i say hello.”,向语言模型“模型1”传入单词 you 时会输出图5-32的左图所示的概率分布。此时,下一个出现的单词是 say 的概率为 0.8,这是一个相当不错的预测。取这个概率的倒数,可以计算出困惑度为
1
/
0.8
=
1.25
1/0.8= 1.25
1/0.8=1.25。
而图 5-32 右侧的模型2预测出的正确单词的概率为 0.2,这
显然是一个很差的预测,此时的困惑度为
1
/
0.2
=
5
1/0.2=5
1/0.2=5。
困惑度越小越好,可以解释为“分叉度”,指下一个可以选择的选项的数量,当然是越小越好。
在输入数据为多个的情况下,困惑度可以根据下面的式子进行计算:
L
=
−
1
N
∑
n
∑
k
t
n
k
log
y
n
k
(5.12)
L=-\frac 1 N \sum \limits _n \sum \limits _k t_{nk} \log y_{nk} \tag {5.12}
L=−N1n∑k∑tnklogynk(5.12)
困惑度
=
e
L
(5.13)
困惑度=e^L \tag {5.13}
困惑度=eL(5.13)
假设数据量为 N 个。
t
n
t_n
tn是one-hot向量形式的正确解标签,
t
n
k
t_{nk}
tnk表示第n个数据的第k个值,
y
n
k
y_{nk}
ynk表示概率分布(神经网络中的Softmax的输出)。明显,L是神经网络的损失。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。