CS231N-10-Recurrent Neural Network

来源:互联网 发布:南昌软件外包公司 编辑:程序博客网 时间:2024/05/06 18:23

  • Introduction
  • RNN structure
    • BPTT
  • LSTM

Introduction

Recurrent a. 反复发生的,周期性的,循环的。
RNN,循环神经网络,用在时间序列模型上,如:样本出现的时间顺序对于自然语言处理、语音识别、手写体识别等应用非常重要。

RNN强调时序时序时序。Sequential Sequential Sequential.

想想很有道理,图像这种空间的东西是不在意哪个像素先后的,只是位置。但语言文字是在意先后的。

这里写图片描述

这里展示了RNN的应用场景。多对多的输入输出,使得应用变得广泛。图片是一个输入,而一段话和视频(因为都讲究时序)是多个输入。故图像标注是一对多,视频分类是多对一,机器翻译是多对多(不确定长度),视频每帧分类是多对多(确定长度)。真是太有趣了。

这里写图片描述

甚至CNN做的图像识别可以变成时序遍历数字的每一笔画,从而识别。使用了RNN。

RNN structure

这里写图片描述

这是RNN最基本的结构。第一反应是有限状态机,后面一想可能是无限状态机,再一想连续与离散以及模糊了。言归正传,RNN中间有个state h,时刻t,那么有ht=f(ht1,xt),f是W学习的函数,state updates when input feeds in,输出y是yt=g(ht). 很好理解,是不是很像FSM?
设计很精巧。通过计算图的unrolling,可以更透彻地理解:
这是many to many的计算图:时序输入{xt}nt=1,每个xt是t时刻的输入向量,对应时序输出{yt}nt=1,注意W是share同一套,loss是所有yt的loss之和。链式法则就是L对W的偏导,对所有W出现的地方求和(具体还没搞清…)。
下面是机器翻译的RNN计算图:
左边是many to one,将时序的句子输入(最小单位是字)放入模型,输出一个中间变量(语义?),然后one to many,输出时序的句子输出。各有一个W,相当于两种模型的时序对接。

这里写图片描述

这里写图片描述

这是RNN预测输入单词下一个字母的例子。
注意这是character-level,其实也有word-level。每次输入字母,得到状态更新,并输出对下一个字母的预测,用softmax求出概率分布,进而计算loss。计算loss所需的label又恰好是下一个时刻的输入。
疑问:输出只和状态有关吗?和输入有关吗?不然得到次态后直接就有输出啊…

这里写图片描述

这是multilayer RNN,即将一维的时间序列延拓到多层,不过不想CNN100多层,RNN最多就三四层。看着结构图,真的好壮观。这也是现在常见模型。

这里写图片描述

BPTT

back prop through time,将RNN结构图展开,容易求导。
数学求导部分的优美解答见博客.这位兄台的矩阵求导术值得学习。

这里写图片描述

我自己手推了cross entropy loss + softmax prob 的导数,非常优雅。就是图片中的yt(hat)yt. 涉及的就是矩阵(向量函数)对向量的求导,考虑(i,j)元,见笔记。这才领悟到卓翰说两者结合的数学求导原因。

所有Loss求和对V求导,就得到最后的式子,十分优雅,没有了偏导项。其他的求导见博客。

这里写图片描述

课件提出截断式BPTT,就是计算一些步数停止传播,减少计算量。

LSTM

传统的RNN在时间序列很长时,会遇到梯度消失或者爆炸问题。
原因就是反向传播时,每经过一个门,乘以相同的权值,故如果小于1,梯度消失,大于1,梯度爆炸。
梯度爆炸可以用gradient clipping来处理,超过threshold,就除以norm。
梯度消失采用新的结构LSTM。

这里写图片描述
这里写图片描述

LSTM 长短期记忆神经网络, 1997年德国人提出。
RNN的变种,解决反向传播问题。细节见笔记。关键在有四个门,决定是否记住old cell state的forget gate,是否增减的input gate,还有控制程度的gate gate。不像RNN全程共享参数,这相当于有个长期记忆一直不忘,这会造成无法处理短期记忆,不变通。而LSTM有遗忘机制,有增减机制,反向传播的不再是W的幂,而是不同f的累乘,不容易消失和爆炸,也符合人的记忆机制。
具体数学推导好恶心…见博客.
现在RNN都不是vanilla的,都用LSTM及其变种,在2015年后很流行。

这里写图片描述
这里写图片描述

这里写图片描述

这里写图片描述

目前业界主要用LSTM及GRU(LSTM的简化,两个门,一个状态,但效果一样好)。

更多关于RNN及LSTM,可参考博客,强烈建议看CS224d (比CS224n难)是RNN在NLP上的应用,看其中介绍RNN的几讲就好。

原创粉丝点击