1. 基础概念
循环神经网络(Recurrent Neural Networks ,以下简称RNN)是一类用于处理序列数据的神经网络,广泛的用于自然语言处理、基因序列分析等领域,其中自然语言处理包括语音识别、机器翻译、语义分析等。
以下是一个简单的自然语言处理应用,该应用可以识别语句中的人名。应用的输入是一段语句,输出为语句中包含的人物名称。
如上图所示,在RNN算法中,我们使用表示索引位置,表示t索引位置对应的输入,表示t索引位置对应的输出。表示输入的长度,表示输出的长度,在上例中。
输入采用One-hot编码表示,具体方法如下:
1. 确定字典
假设字典的大小为10000个单词,则我们选择最常用的前10000个单词按字典顺序排序,得到一个单词数组,该数组即为RNN算法使用的单词字典。在通常的应用程序中,字典大小一般在30000-100000之间。
2. 编码
将每一个输入单词表示为一个数组,数组大小为10000(等于字典大小),数组中除了单词所在字典位置对应的数值为1,其他数值均为0。以上面示例说明,假设Harry在字典中的位置是4075,则Harry可以表示为下面的数组,在该数组中,4075下标对应的数值为1,其余的数值均为0。
如果输入中的单词不在字典中,则可以统一表示为UNK,用One-hot向量表示,在该向量中,索引10000位置的数值为1,其他位置均为0。
为什么不能使用标准的神经网络算法处理以上问题,主要有几个原因:
- 不同的输入和输出长度不一致
- 不同位置间的特征不能共享
- 特征参数过多
2. RNN模型
下面是RNN的基本模型图: