给定一个长度为T的词的序列w1,w2,…,wT,语言模型将计算该序列几率:P(w1,w2,…,wT)。语言模型(language model)可用于提高语音识别和机器翻译的性能,根据序列的几率选择输出的序列。
例如,一段含有4个词的文本序列的几率
其中,P(w1)能够计算为w1在训练数据集中的词频(词出现的次数)与训练数据集的总词数之比。P(w2∣w1)能够计算为w1,w2两词相邻的频率与w1词频的比值,由于该比值即P(w1,w2)与P(w1)之比。以此类推。web
当序列长度增长时,计算和存储多个词共同出现的几率的复杂度会呈指数级增长。n元语法(n-grams)经过马尔可夫假设(虽然并不必定成立)简化了语言模型的计算。
它是基于:math:n - 1阶马尔可夫链的几率语言模型。当n分别为一、2和3时,咱们将其分别称做一元语法(unigram)、二元语法(bigram)和三元语法(trigram)。长度为4的序列w1,w2,w3,w4在一元语法、二元语法和三元语法中的几率分别为
网络
考虑输入数据存在时间相关性的状况。假设Xt∈Rn×d是序列中时间步t的小批量输入,Ht∈Rn×h是该时间步的隐藏变量。与多层感知机不一样的是,这里咱们保存上一时间步的隐藏变量Ht−1,并引入一个新的权重参数Whh∈Rh×h,该参数用来描述在当前时间步如何使用上一时间步的隐藏变量。具体来讲,时间步t的隐藏变量的计算由当前时间步的输入和上一时间步的隐藏变量共同决定:
由上式中相邻时间步的隐藏变量Ht和Ht−1之间的关系可知,这里的隐藏变量可以捕捉截至当前时间步的序列的历史信息,就像是神经网络当前时间步的状态或记忆同样。
所以,该隐藏变量也称为隐藏状态。因为隐藏状态在当前时间步的定义使用了上一时间步的隐藏状态,上式的计算是循环的。使用循环计算的网络即循环神经网络(recurrent neural network)。
在时间步t,输出层的输出和多层感知机中的计算相似:
循环神经网络的参数包括隐藏层的权重Wxh∈Rd×h、Whh∈Rh×h和误差 bh∈R1×h,以及输出层的权重Whq∈Rh×q和误差bq∈R1×q。值得一提的是,即使在不一样时间步,循环神经网络也始终使用这些模型参数。所以,循环神经网络模型参数的数量不随时间步的增长而增加。
隐藏状态中XtWxh+Ht−1Whh的计算等价于Xt与Ht−1连结后的矩阵乘以Wxh与Whh连结后的矩阵。
举个例子dom
from mxnet import nd X, W_xh = nd.random.normal(shape=(3, 1)), nd.random.normal(shape=(1, 4)) # 构造形状为(3,1)的矩阵X,和形状为(1,4)的权重W_xh H, W_hh = nd.random.normal(shape=(3, 4)), nd.random.normal(shape=(4, 4)) # 构造形状为(3,4)的矩阵H和形状为(4,4)的权重W_hh nd.dot(X, W_xh) + nd.dot(H, W_hh) # XWxh+HWhh
M=nd.concat(X,H,dim=1) X,H,M
N=nd.concat(W_xh,W_hh,dim=0) W_xh,W_hh,N
nd.dot(M,N)
svg