目录
一、何为隐状态?
有时,我们想让模型当前t时刻的输出不仅取决于当前时刻的输入xt,还取决于t时刻以前的输入,但如果把xt-1,xt-2,...,x1都考虑进来,词表中的词汇量将会变得很大,而且也很难设计这样一个如此大的模型。因此,我们便会想让t时刻之前的输入加权和并到一个隐藏变量(hidden variable)中,这个隐藏变量也称为隐状态(hidden state),存储了t时刻之前的序列信息。通常我们可以基于当前输入xt和先前隐状态ht−1来计算时间步t处的任何时间的隐状态:
循环神经网络(recurrent neural networks,RNNs) 是具有隐状态的神经网络。
二、无隐状态的神经网络
在介绍具有隐状态的神经网络之前,先回顾一下无隐状态的神经网络。经典的多层感知机MLP就是一种无隐状态的神经网络。在MLP的隐藏层中,我们会使用如下式子表示其输入输出关系:
上式中,Φ为隐藏层的激活函数,假设批量大小为n,那么输入X的维度为n×x,输出H的维度为n×h。
同理,输出层的输入输出关系如下式所示:
式中各符号意义已显而易见。
三、有隐状态的循环神经网络
不同于无隐状态的神经网络,在有隐状态的循环循环神经网络中,我们首先需要考虑以另一种形式表示当前时刻的隐藏变量:
上式中,输入Xt的维度为n×x,n表示批量大小,x可以理解为一个token进行独热编码后的长度;隐状态H的维度为n×h,n表示批量大小,h为隐藏单元的数目。
可以看到,我们引入了一个新的权重参数Whh,使得当前时刻的隐藏变量不仅与当前输入有关,还与之前输入造成的影响因子有关。在循环神经网络中,执行上述步骤的网络层称为循环层。
循环神经网络的输出层与MLP相似:
具有隐状态的循环神经网络的网络结构如下图所示:
四、损失函数
语言模型可以视作一个分类模型,预测出来的