循环神经网络
循环神经网络:Recurrent Nerual Network,简称RNN。
RNN可以有很多种结构,包括一对一的Vanilla网络,一对多的图像字幕,多对一的情感分类(处理一定数量的按顺序排列的词,然后试着把句子里的词,按正面和负面情感分类),多对多的机器翻译(将一个序列翻译成另一个序列)、视频分类。
RNN例子
RN有其自己内部的状态,但是在每个时间点接收内容,然后结合函数来修改自己的状态,也就是说影响RNN状态的因素不止有自己的状态还有接受内容。
可以将RNN的状态表达成这样一个函数:
其中表示RNN在t时刻的状态,表示在t时刻RNN收到的内容。表示参数为w的函数。
是对的权重,是对的权重。
图像标注
考虑一个图像标注的网络
网络分为两部分,CNN和RNN,CNN用来处理图像,RNN用来负责建立序列模型。
将图像放入CNN中,得到v,然后利用第二个公式计算出h(这里表示图像信息进入RNN的第一步的情况。)
而是序列的第一个单词的分布情况,假设根据,发现最可能出现的词语是“稻草”。
然后将“稻草”对应的向量放入RNN的底部,得到序列中第二个单词的描述“帽子‘”,
然后将“帽子”对应的向量放入RNN的底部,依次循环直到得到一个结束标志。最终RNN价格这张图片描述成草帽。
y向量的维数等于单词表的数目加一,这是因为考虑到了结束标志。
LSTM
RNN只有一个隐藏状态h,而LSTM包含多个隐藏状态h,c。
其中i表示input,f表示forget,o表示output,f,i,o的值是0~1,g的值是-1~1
表示细胞状态,的更新依赖f(忘记门)和i(输入门)两个变量,首先与f逐元素相乘,舍弃的部分信息,f中为1的元素对应的信息得以完全保留,为0的元素对应的信息会被丢弃。然后,i与g逐元素相乘,表示细胞状态受输入i的影响。两者加和得到新的目标状态。
而再来影响,计算o(输出门)与的点积,然后得到。
计算过程如下:
对比LSTM和RNN
- RNN全部的隐藏状态影响下一状态。而LSTM只选择部分隐藏状态影响下一状态。
- RNN可能会发生梯度消失的情况,而LSTM因为有加法的原因回均匀地分配梯度,不会产生梯度消失的问题。
总结
- RNN设计灵魂
- RNN简单但效果不够好
- LSTM的加法会使梯度流加速
- RNN梯度的反向传播会造成梯度爆炸或梯度消失,梯度爆炸问题可以通过梯度裁剪来解决,梯度消失问题就通过增加额外的加法解决(类似LSTM)
参考:https://www.cnblogs.com/coldyan/p/8385021.html
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CS231n李飞飞计算机视觉 循环神经网络 - Python技术站