\parinterval 输出$\mathbf y $是词表上的一个分布,通过$ w_i $可以索引到相应的概率${\rm P}(w_i|w_{i-1},w_{i-2},w_{i-3})$。\\$\mathbf U $、$\mathbf H $和$\mathbf d $是模型的参数。从结构上看,FNNLM主要有三层:1)词的分布式表示层,即把输入的离散的单词变为分布式表示对应的实数向量;2)隐藏层,即将得到的词的分布式表示进行线性和非线性变换;3)输出层,根据隐藏层的输出预测单词的概率分布。这三层堆叠在一起构成了整个网络,而且也可以加入从词的分布式表示直接到输出层的连接(红色虚线箭头)。
\noindent 其中,$\mathbf h_t $表示$ t $时刻循环单元的输出,$\mathbf h_{t-1}$表示$ t-1$时刻循环单元的输出,$\mathbf U $和$\mathbf W $是模型的参数。可以看出,循环单元的结构其实很简单,只是一个对$\mathbf h_{t-1}$和$\mathbf x_t $的线性变换再加上一个Tanh函数。通过读入上一时刻的输出,当前时刻可以访问以前的历史信息。这个过程可以循环执行,这样就完成了对所有历史信息的建模。$\mathbf h_t $可以被看作是序列在$ t $时刻的一种表示,也可以被看作是网络的一个隐藏层。进一步,$\mathbf h_t $可以被送入输出层,得到$ t $时刻的输出: