零、写在前面
循环神经网络(recurrent neural network)和递归神经网络(recursive neural network)都会简写成RNN,所以区分RNN代表哪种神经网络是有必要的!
recurrent: 时间维度的展开,代表信息在时间维度从前往后的的传递和积累,可以类比markov假设,后面的信息的概率建立在前面信息的基础上,在神经网络结构上表现为后面的神经网络的隐藏层的输入是前面的神经网络的隐藏层的输出;recursive: 空间维度的展开,是一个树结构,比如nlp里某句话,用recurrent neural network来建模的话就是假设句子后面的词的信息和前面的词有关,而用recurxive neural network来建模的话,就是假设句子是一个树状结构,由几个部分(主语,谓语,宾语)组成,而每个部分又可以在分成几个小部分,即某一部分的信息由它的子树的信息组合而来,整句话的信息由组成这句话的几个部分组合而来。
知乎--理查德帕克
一、输入与输出关系
有时候,网络输入输出关系不仅仅是一输入一输出(分类问题),还存在其他多种情况。
one to one: image classification
one to many: image to sequence of words
many to one: sequence of words to sentiment
many to many: translations, words to words/ frame to frame video classification
image from Lboro sildes
二、循环神经网络
image from Lboro sildes
:输入到隐藏层的权重
:隐藏层到输出的权重
三、Computational graph
循环神经网络中的参数在不同时刻是共享的
循环神经网络中通过反向传播更新权重
循环神经网络的总损失:所有时刻(或部分时刻)上损失函数的总和
损失函数为所有时刻损失函数总和,from Lboro slides
损失函数为部分时刻损失函数总和,from Lboro slides
四、RNN应用
-
字幕标定sample from Lboro slides
-
回到问题sample from Lboro slides
五、优缺点分析
- 卷积神经网络中,同层神经元之间相互独立,这就导致相互之间关联性较低,具体表现在机器翻译中,语句不通顺、单词歧义,运用RNN可以解决
- 因为RNN当前层的计算关系到前层网络,主要逐层推进,不适合分布式计算,所以计算较慢
-
长期依赖:如果输出与很久以前的上下文有关,那么RNN就很难作出正确输出。因为每经过一次迭代,所有的权重
就会更新一次,而更新时,近距离梯度作为主导,导致模型难以学到远距离的依赖关系。
于是便引出LSTM,它可以很好解决梯度消失和梯度爆炸的问题。
参考资料: