美文网首页
循环神经网络

循环神经网络

作者: 英文名字叫dawntown | 来源:发表于2020-02-14 21:30 被阅读0次

1. 循环神经网络的构造

基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量H,用H_t表示H在时间步t的值。的计算基于X_tH_{t-1},可以认为H_t记录了到当前字符为止的序列信息,利用H_t对序列的下一个字符进行预测。

循环神经网络(信息流)

\boldsymbol{H}_t = \phi(\boldsymbol{X}_t \boldsymbol{W}_{xh} + \boldsymbol{H}_{t-1} \boldsymbol{W}_{hh} + \boldsymbol{b}_h)\\ \boldsymbol{O}_t = \boldsymbol{H}_t \boldsymbol{W}_{hq} + \boldsymbol{b}_q.
其中\boldsymbol{X}_t \in \mathbb{R}^{n \times d},\boldsymbol{H}_t \in \mathbb{R}^{n \times h},\boldsymbol{W}_{xh} \in \mathbb{R}^{d \times h},\boldsymbol{W}_{hh} \in \mathbb{R}^{h \times h},\boldsymbol{b}_{h} \in \mathbb{R}^{1 \times h},\boldsymbol{W}_{hq} \in \mathbb{R}^{h \times q},\boldsymbol{b}_q \in \mathbb{R}^{1 \times q}
又其中nbatch_sized为vocab_size,h为隐藏变量数目,q为输出层字典长度。

1.1 onehot

已知,略
就是把离散状态按字典编码,在字典的对应状态上为1,其他状态为0.

1.2 梯度裁剪

循环神经网络中较容易出现梯度衰减或梯度爆炸,这会导致网络几乎无法训练。裁剪梯度(clip gradient)是一种应对梯度爆炸的方法。假设我们把所有模型参数的梯度拼接成一个向量 g,并设裁剪的阈值是\theta。裁剪后的梯度

\min\left(\frac{\theta}{\|\boldsymbol{g}\|}, 1\right)\boldsymbol{g}
的范数不超过\theta

1.3 困惑度

我们通常使用困惑度(perplexity)来评价语言模型的好坏。困惑度是对交叉熵损失函数做指数运算后得到的值。特别地,

  • 最佳情况下,模型总是把标签类别的概率预测为1,此时困惑度为1;
  • 最坏情况下,模型总是把标签类别的概率预测为0,此时困惑度为正无穷;
  • 基线情况下,模型总是预测所有类别的概率都相同,此时困惑度为类别个数。

显然,任何一个有效模型的困惑度必须小于类别个数。在本例中,困惑度必须小于词典大小vocab_size

2. 训练RNN模型的特点

跟之前章节的模型训练函数相比,这里的模型训练函数有以下几点不同:

  1. 使用困惑度评价模型。
  2. 在迭代模型参数前裁剪梯度。
  3. 对时序数据采用不同采样方法将导致隐藏状态初始化的不同。

本节内容暂时还没搞明白,之后几天再作补充

相关文章

网友评论

      本文标题:循环神经网络

      本文链接:https://www.haomeiwen.com/subject/fpijfhtx.html