CS224n Part5
1 Language Models
语言模型计算特定序列中的单词出现的概率。
m
m
m个单词
{
w
1
,
.
.
.
,
w
m
}
\lbrace{w_1,...,w_m}\rbrace
{w1,...,wm} 序列的概率表示为
P
(
w
1
,
.
.
,
w
m
)
P(w_1,..,w_m)
P(w1,..,wm)。 由于在一个单词依赖之前出现的另一个单词,
w
i
w_i
wi,
P
(
w
1
,
.
.
.
,
w
m
)
P(w 1,...,w m)
P(w1,...,wm)通常以为先前
n
n
n个单词的窗口,而不是之前的所有单词:
方程式对语音和翻译系统特别有用,在确定单词序列是否是输入句子的准确翻译时。在现有的语言翻译系统中,对于每个短语/句子翻译,软件生成一些替代词序列(例如{我有,我有,我有,我有,我}}并对它们进行评分以确定最可能的翻译序列。
在机器翻译中,模型为每个输入短语序列的输出词分配一个好分数,通过分数选择最佳的单词排序。为此,模型可以在不同的单词排序或单词选择备选方案之间进行选择。它会实现这个目标通过运行所有单词序列候选者分配每个分数的概率函数。顺序用最高分是翻译的输出。例如,机器会给“the cat is small”的分数“small the is cat”的分数高一些,“walking home after school”得分比“walking house after school”更高。为了计算这些概率,每个n-gram的计数将与每个单词的频率。例如,如果模型采用二元组,通过组合单词计算每个二元组的频率它的前一个词,将除以相应的单词的频率。如下显示这种关系bigram和trigram模型。
模型中的关系基于使用的固定上下文窗口(即前
n
n
n个单词)预测下一个词。在某些情况下,过去连续
n
n
n个单词的窗口可能不足以捕获上下文。例如,考虑一篇文章讨论历史的案例:西班牙和法国以及文本后面的某个地方,它写着“两个国家进行了一场战斗“;显然是这里提供的信息单独不足以确定两个国家的名称。 Bengio介绍了第一个大规模的深度学习自然语言处理模型,可以捕获此单词的分布式表示的上下文;
在这个模型中,输入字向量由隐藏层和输出使用层。方程式
显示
s
o
f
t
m
a
x
(
)
softmax()
softmax()函数的参数由标准
t
a
n
h
(
)
tanh()
tanh()函数(即隐藏层)以及线性函数
W
(
3
)
x
+
b
(
3
)
W^{(3)}x + b^{(3)}
W(3)x+b(3)组成,它捕获所有先前的函数
n
n
n输入单词向量。
2 Recurrent Neural Networks (RNN)
与传统的转移模型不同,传统的转移模型只考虑先前单词的有限窗口来调节语言模型,递归神经网络(RNN)能够利用语料库中的所有先前单词上调整模型。
RNN架构所在的矩形框是一个时间步的隐藏层,
t
t
t。 每个这样的层都有许多神经元,每个神经元对其进行线性矩阵运算输入后跟非线性操作(例如
t
a
n
h
(
)
tanh()
tanh())。 在每个时间步,上一步的输出与下一个单词向量一起合成新的向量,
x
t
x_t
xt是隐藏层的输入,以产生预测输出
y
^
ŷ
y^和输出特征
h
t
h_t
ht。
以下是与网络中每个参数相关的详细信息:
•
x
1
,
.
.
.
,
x
t
−
1
,
x
t
,
x
t
+
1
,
.
.
.
x
T
x_1,...,x_{t - 1},x_t,x_{t + 1},... x_T
x1,...,xt−1,xt,xt+1,...xT:对应于语料库的
T
T
T个单词向量。
•
h
t
=
σ
(
W
(
h
h
)
h
t
−
1
+
W
(
h
x
)
x
t
)
h_t =σ(W^{(hh)}h_{t - 1} + W^{(hx)}x_t)
ht=σ(W(hh)ht−1+W(hx)xt):计算每个时间步
t
t
t时刻的隐藏层输出特征的关系。
x
t
∈
R
d
x_t∈R^d
xt∈Rd:时间
t
t
t的输入词向量。
W
h
x
∈
R
D
h
×
d
W^{hx}∈R^{D_h×d}
Whx∈RDh×d:用于调节输入词向量
x
t
x_t
xt的权重矩阵
W
h
h
∈
R
D
h
×
D
h
W^{hh}∈R^{D_h×D_h}
Whh∈RDh×Dh:用于调节上一个时间步,
h
t
−
1
h_{t - 1}
ht−1输出的权重矩阵。
h
t
−
1
∈
R
D
h
h_{t − 1} ∈ R^{D_h}
ht−1∈RDh前一个非线性函数时间步长
t
−
1
{t - 1}
t−1时刻的输出。
h
0
∈
R
D
h
h_0 ∈ R^{D_h}
h0∈RDh 是在时间步
t
=
0
t = 0
t=0初始化矢量隐藏层。
σ
(
)
σ()
σ():非线性函数(此处为sigmoid)
• y ^ t = s o f t m a x ( W ( S ) h t ) ŷ_t = softmax(W^{(S)}h_t) y^t=softmax(W(S)ht):每个时间步 t t t输出概率分布。 基本上, y ^ t ŷ_t y^t是给出一个上下文(即 h t − 1 h_{t - 1} ht−1)和最后观察到的词向量 x ( t ) x^{(t)} x(t)预测下一个单词。 这里, W ( S ) ∈ R ∣ V ∣ × D h W^{(S)}∈R^{| V |×D_h} W(S)∈R∣V∣×Dh和 y ^ ∈ R ∣ V ∣ ŷ∈R^{| V |} y^∈R∣V∣,其中 ∣ V ∣ | V | ∣V∣是词汇。
RNN中使用的损失函数通常是交叉熵误差,时间步
t
t
t误差为。
长度为
T
T
T的语料库上的交叉熵错误是:
困惑是衡量困惑的标准,较低的值意味着更有信心预测下一个序列中的单词。
运行RNN层所需的内存量与语料库中的字数成正比。 例如,一句话用
k
k
k个单词将
k
k
k个词向量存储在存储器中。此外,RNN必须保持两对
W
W
W,
b
b
b矩阵。 虽然
W
W
W的大小可能非常大,它的大小不会随着语料库大小而扩大。
3 Gated Recurrent Units
我们讨论使用门控激活功能从而修改RNN架构。 虽然是RNN理论上可以捕获长期依赖关系,它们非常难实际训练这样做。 门控循环装置设计为有更持久的记忆的方式,从而使它更容易RNN捕获长期依赖关系。 让我们以数学的方式看待
G
R
U
GRU
GRU如何使用
h
t
−
1
h_{t - 1}
ht−1和
x
t
x_t
xt生成下一个隐藏状态
h
t
h_t
ht。 我们然后将深入了解这种架构的直觉。
重要的是要注意,为了训练GRU,我们需要学习所有不同的参数:
W
,
U
,
W
(
r
)
,
U
(
r
)
,
W
(
z
)
,
U
(
z
)
W,U,W^{(r)},U^{(r)},W^{(z)},U^{(z)}
W,U,W(r),U(r),W(z),U(z)。 这些遵循我们过去看到的相同的反向传播程序。
4 Long-Short-Term-Memories
Long-Short-Term-Memories是另一种复杂的激活单元与GRU略有不同。 使用这些的动机是相似的。然而,对于GRU的那些,这些单元的架构确实不同。我们先来看看LSTM单元的数学公式