cs231n 2018系列笔记(lecture10)
lecture地址链接:https://pan.baidu.com/s/1ZKLepm2ow4AV3QJQwgmeFQ 密码:kaoc
本篇主讲的是RNN在机器视觉方面的应用。
one to one 是普通的Vanilla Neural Networks
one to many 应用于Image Captioning,实现看图说话
many to one应用于sentiment classification,情感分类
many to many(1)应用于机器翻译
many to many(2)结构应用于Video classification on frame level,帧级别的视频分类
many to many 模式的前向传播过程,W共享值,每次输出都产生相应的loss,最终的loss是累加得到
many to one模式,只在最后一步输出Y
one to many ,只有一个输入,每次都有输出y
many to one 和 one to many 结合起来就是 sequence to sequence结构,前面是encoder,后面是decoder.encoder部分也可以采用CNN去掉FC层,因为RNN和CNN的输出都是数组。
下面是一个简单的char rnn前向传播过程,每次得到的输出都作为下一个的输入。
反向传播过程如下
但是由于是连乘操作,会发生梯度爆炸或者为0这两种情况。需要用到Truncated
Backpropagation through time,按块来进行反向传播
这是官方推荐的一篇代码,numpy实现的最简char-rnn,作者也是 rnn captcha的创始者。
https://gist.github.com/karpathy/d4dee566867f8291f086gist.github.com
还有一篇numpy实现的LSTM.
seq to seq博客
attention机制博客
Image Captioning是cs231n的assignment3作业,从头实现,建议做一下。CNN生成的数组变成了RNN的隐藏层输入,而输入X则是标注好的图片注释,两者结合来生成图片描述。需要注意的是,要手动设置一个开始和结束标志,比如这里的START和END.
生成过程如下
Image Captioning with Attention是改良版,增加了attention机制。attention机制类似于人眼的聚焦机制,只集中注意力于重要的事情上面,忽略次要影响。具体可以上面那篇博客讲解。