RNN循环神经网络 基础
1. 序列模型的应用
- 语音识别:将输入的语音信号直接输出相应的语音文本信息。无论是语音信号还是文本信息均是序列数据。
- 音乐生成:生成音乐乐谱。只有输出的音乐乐谱是序列数据,输入可以是空或者一个整数。
- 情感分类:将输入的评论句子转换为相应的等级或评分。输入是一个序列,输出则是一个单独的类别。
- DNA序列分析:找到输入的DNA序列的蛋白质表达的子序列。
- 机器翻译:两种不同语言之间的想换转换。输入和输出均为序列数据。
- 视频行为识别:识别输入的视频帧序列中的人物行为。
- 命名实体识别:从输入的句子中识别实体的名字。
2. 数学符号
- 输入
:如“Harry Potter and Herminone Granger invented a new spell.”(以序列作为一个输入),  表示输入  中的第  个符号。 - 输出
:如“1 1 0 1 1 0 0 0 0”(人名定位),同样,用  表示输出  中的第 个符号。 用来表示输入
的长度;
用来表示输出
的长度;
-  表示第  个输入样本的第  个符号,其余同理。 - 利用单词字典编码来表示每一个输入的符号:如one-hot编码等,实现输入
和输出
之间的映射关系。
3. 循环神经网络模型
传统标准的神经网络:
对于学习 和
的映射,我们可以很直接的想到一种方法就是使用传统的标准神经网络。也许我们可以将输入的序列X以某种方式进行字典编码以后,如one-hot编码,输入到一个多层的深度神经网络中,最后得到对应的输出
。如下图所示:
但是,结果表明这种方法并不好,主要是存在下面两个问题:
- 输入和输出数据在不同的例子中可以有不同的长度;
- 这种朴素的神经网络结果并不能共享从文本不同位置所学习到的特征。(如卷积神经网络中学到的特征的快速地推广到图片其他位置)
循环神经网络:
循环神经网络作为一种新型的网络结构,在处理序列数据问题上则不存在上面的两个缺点。在每一个时间步中,循环神经网络会传递一个激活值到下一个时间步中,用于下一时间步的计算。如下图所示:
这里需要注意在零时刻,我们需要编造一个激活值,通常输入一个零向量,有的研究人员会使用随机的方法对该初始激活向量进行初始化。同时,上图中右边的循环神经网络的绘制结构与左边是等价的。
循环神经网络是从左到右扫描数据的,同时共享每个时间步的参数。
管理从输入_到隐藏层的连接,每个时间步都使用相同的_ ,同下; 管理激活值  到隐藏层的连接; 管理隐藏层到激活值  的连接。
上述循环神经网络结构的缺点:每个预测输出 _是100维,__是10000维,那么_ 便是  维的矩阵, _便是__维的矩阵。堆叠起来,_ 便是  维的矩阵。 - ![[a^{
},x^{ }] = \left[ \begin{array}{l} {a^{ < t - 1 > }}\\\ {x^{ < t > }} \end{array} \right]](http://www.zhihu.com/equation?tex=%5Ba%5E%7B%3Ct-1%3E%7D%2Cx%5E%7B%3Ct%3E%7D%5D+%3D+%5Cleft%5B+%5Cbegin%7Barray%7D%7Bl%7D+%7Ba%5E%7B+%3C+t+-+1+%3E+%7D%7D%5C%5C%5C+%7Bx%5E%7B+%3C+t+%3E+%7D%7D+%5Cend%7Barray%7D+%5Cright%5D) ,表示一个  维的矩阵。
4. 穿越时间的反向传播
为了进行反向传播计算,使用梯度下降等方法来更新RNN的参数,我们需要定义一个损失函数,如下:
 ,实际上记忆细胞输出的是在  时间步上的激活值  ; - ![\widetilde c^{
} = \tanh (W_{c}[c^{ }, x^{ }] + b_{c})](http://www.zhihu.com/equation?tex=%5Cwidetilde+c%5E%7B%3Ct%3E%7D+%3D+%5Ctanh+%28W_%7Bc%7D%5Bc%5E%7B%3Ct-1%3E%7D%2C+x%5E%7B%3Ct%3E%7D%5D+%2B+b_%7Bc%7D%29) ,在每一个时间步上,给定一个候选值  ,用以替代原本的记忆细胞  ; - ![{\Gamma u}=\sigma (W{u}[c^{
}, x^{ }] + b_{u})](http://www.zhihu.com/equation?tex=%7B%5CGamma+_u%7D%3D%5Csigma+%28W_%7Bu%7D%5Bc%5E%7B%3Ct-1%3E%7D%2C+x%5E%7B%3Ct%3E%7D%5D+%2B+b_%7Bu%7D%29) ,代x表更新门,是一个0-1的值,用以决定是否对当前时间步的记忆细胞用候选值更新替代; -  ,记忆细胞的更新规则,门控值处于0-1之间,根据跟新公式能够有效地**缓解梯度消失**的问题。 - 其中,  均具有相同的维度。
GRU的可视化实现如下图右边所示:
完整的GRU 单元:
完整的GRU单元还存在另外一个门,以决定每个时间步的候选值,公式如下:
![\widetilde c^{
10. LSTM
GRU能够让我们在序列中学习到更深的联系,长短期记忆(long short-term memory, LSTM)对捕捉序列中更深层次的联系要比GRU更加有效。
LSTM中,使用了单独的更新门 和遗忘门
,以及一个输出门
,其主要的公式如下:
![\widetilde c^{
LSTM单元的可视化图如下所示:
其中,在实际使用时,几个门值不仅仅取决于 ![a^{
11. 双向RNN
双向RNN(bidirectional RNNs)模型能够让我们在序列的某处,不仅可以获取之间的信息,还可以获取未来的信息。
对于下图的单向RNN的例子中,无论我们的RNN单元是基本的RNN单元,还是GRU,或者LSTM单元,对于例子中第三个单词”Teddy”很难判断是否是人名,仅仅使用前面的两个单词是不够的,需要后面的信息来进行判断,但是单向RNN就无法实现获取未来的信息。
而双向RNN则可以解决单向RNN存在的弊端。在BRNN中,不仅有从左向右的前向连接层,还存在一个从右向左的反向连接层。
其中,预测输出的值 ![\hat y^{
12. 深层RNNs
与深层的基本神经网络结构相似,深层RNNs模型具有多层的循环结构,但不同的是,在传统的神经网络中,我们可能会拥有很多层,几十层上百层,但是对与RNN来说,三层的网络结构就已经很多了,因为RNN存在时间的维度,所以其结构已经足够的庞大。如下图所示: