机器学习(ML)六之RNN基础

循环神经网络

下图展示了如何基于循环神经网络实现语言模型。目的是基于当前的输入与过去的输入序列,预测序列的下一个字符。循环神经网络引入一个隐藏变量𝐻,用𝐻𝑡表示𝐻在时间步𝑡的值。𝐻𝑡的计算基于𝑋𝑡𝐻𝑡1,可以认为𝐻𝑡记录了到当前字符为止的序列信息,利用𝐻𝑡对序列的下一个字符进行预测。

 

循环神经网络的构造

先看循环神经网络的具体构造。假𝑋𝑡𝑛×𝑑是时间步𝑡的小批量输入,𝐻𝑡𝑛×是该时间步的隐藏变量,则:

𝐻𝑡=𝜙(𝑋𝑡𝑊𝑥+𝐻𝑡1𝑊+𝑏).

实现循环神经网络

 

one-hot向量

需要将字符表示成向量,这里采用one-hot向量。假设词典大小是𝑁,每次字符对应一个从0𝑁1的唯一的索引,则该字符的向量是一个长度为𝑁的向量,若字符的索引是𝑖,则该向量的第𝑖个位置为1,其他位置为0。下面分别展示了索引为0和2的one-hot向量,向量长度等于词典大小。

 

裁剪梯度

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

𝐿2范数不超过𝜃

定义预测函数

以下函数基于前缀prefix(含有数个字符的字符串)来预测接下来的num_chars个字符。这个函数稍显复杂,其中我们将循环神经单元rnn设置成了函数参数,这样在后面小节介绍其他循环神经网络时能重复使用这个函数。

困惑度

我们通常使用困惑度(perplexity)来评价语言模型的好坏。回忆一下“softmax回归”一节中交叉熵损失函数的定义。困惑度是对交叉熵损失函数做指数运算后得到的值。特别地,

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

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

定义模型训练函数

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

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

 

posted @ 2020-02-14 17:18  Jaww  阅读(348)  评论(0编辑  收藏  举报