CS231n——RNN

RNN的应用有很多:

  • one to one:普通的神经网络结构,一个输入对应一个输出
  • one to many: 将一幅图片输出一个句子,用于Image Captioning
  • many to one: 语句的情感分类,将一个句子分为积极还是消极的
  • many to many:机器翻译以及视频分类(一个视频的类别由之前所有帧的函数得到)

一、RNN的定义

现在的状态ht由之前的状态ht-1和该时刻的输入xt来决定,它们要经过一个激活函数fw
CS231n——RNN_第1张图片
注意:对于任意时刻,无论序列有多长,我们使用的都是同一个函数fw,w都是一样的。
最简单的RNN就如下:
CS231n——RNN_第2张图片

【Character-level language model example】
CS231n——RNN_第3张图片
先输入'h'然后通过w_xh计算出ht然后在t+1输入'e'然后用ht和w_hh算出ht+1,以此类推,之后再用w_hy算出y,绿色的部分就是我们想要其值为很高的地方,所以接下来用反向传播控制w的值。

二、Image Captioning

CS231n——RNN_第4张图片 CS231n——RNN_第5张图片

这里只讲前向传播的过程(测试过程):将一幅图送入VGG网络,然后把最后的softmax层去掉,取出FC-4096这层的输出向量,写作V,然后修改RNN公式,添加一项Wih*V,使得图像信息融入RNN,然后从y0得到straw,将straw放入RNN的底部,得到h1,y1以此类推

【一个图片语句数据库】——Microsoft COCO,大约120万张图片,每张图片有5句话的描述

三、LSTM

借鉴:http://mp.weixin.qq.com/s/0bBTVjkfAK2EzQiaFcUjBA
有时会出现一帧图片网络会认为人物在美国,下一帧它看到人在吃寿司,就会又认为人在日本,在其后的一帧它看到了北极熊,就又会认为人在伊兹拉岛,这种混乱意味着信息在快速地转移和消失,模型难以保持长期的记忆。所以LSTM出现了:
  • 添加了一个遗忘机制(forgetting mechanism):当新的输入来临时,模型需要知道记住哪些,以及丢弃哪些
  • 添加一个保存机制(saving mechanism):当模型看到一幅新的图片时,它需要学习关于这张图片的信息是否值得使用和保存
  • 聚焦长期记忆:模型需要学习长期记忆中的哪些部分是即刻有用的


CS231n——RNN_第6张图片     --------------》》》》             CS231n——RNN_第7张图片
CS231n——RNN_第8张图片


  • ltm(t)长期记忆,通常被成为cell state,记作c(t),它的值就是忘掉我们认为将来不会再次用到的信息以及保存有用的新来的信息之后,我们就有了更新的长期记忆。ltm(t)'是指能从xt中学习到的信息,也就是我们长期记忆中的候选者。
  • remember(t)就是遗忘门,记作f(t),用sigmoid函数激活因为要使得值在0,1之间,0表示完全忘记,1表示完全保持记忆
  • save(t)input gate,因为它决定输入中有多少被允许进入cell state,记作i(t)
  • focus(t)是聚焦向量,通常被称为output gate,简称o(t)
  • wmt是t时刻的工作记忆(长期记忆中需要现在关注的部分)即ht(hiden state),它由一个聚焦向量focus(t)与长期记忆点乘得到,也就是说我们将全部注意集中在focus为1的元素上,经过o(t)调整,只有一部分cell state进入hiden state
CS231n——RNN_第9张图片

【RNN与LSTM做对比】

CS231n——RNN_第10张图片
对于LSTM,cell States 不断进入网络,且只有部分的细胞状态进入hidden state,然后根据hidden state 来决定如何对cell state进行操作,如果忽略遗忘门,那么LSTM可以看做是一个对cell state不断叠加的过程,这个结构有点像ResNet
而且当反向传播时,这些加法操作可以使得不会发生梯度消失问题,而RNN就会有这个问题。通常梯度爆炸或者梯度消失问题的解决办法就是采用gradient clip,裁剪掉梯度过大的值,或者采用引入一个偏置。

你可能感兴趣的:(CS231n——RNN)