本文中的RNN是指Recurrent neural network,循环神经网络,而不是递归神经网络,Recursive neural network。
循环神经网络的核心在于利用相同的权值,即权值共享,这样可以减少需要学习的参数,提高学习效率。
典型RNN结构示例如下
这里的输入以单词为例,实际中输入的通常是词向量,则在某个时刻输入的单词首先需要通过词嵌入将该单词映射到某个空间中,比如针对某个单词或词语
映射之后的形式示例为
然后再映射到隐含层
其中h0是初始的隐含层状态。
最后映射到输出层
输出层本质上可以看做一个分布,比如
该示例中出现概率最大的是books这个单词。
循环神经网络理论上可以处理任意长度的输入,同时模型的大小不会因为输入长度更长而变大。另外,理论上可以利用先前多步的信息,不同时间节点的权值共享,因此表示可以共享。
虽然循环神经网络具有挺多优势,但是这种循环计算带来的计算量也比较大,因此速度较慢,事实上,很难利用先前多步的信息。
循环神经网络中比较常用的损失函数为交叉熵损失函数,形式如下
整体损失为所有损失取均值
循环神经网络的反向传播公式如下
需要注意的是,在t步跟t-1步所依赖的项数是不同的,因此这种反向传播也称时间段反向传播,BPTT(backpropagation through time)。
评价语言模型的指标可以使用混乱度,公式如下