CS231n2017 Lecture10 RNN笔记

RNN:

循环神经网络(Recurrent Neural Networks),可以实现不同类型的输入/输出

如:

1 to 1:固定输入得到固定输出

1 to many: 比如输入固定size的图片,输出的是可变长度的序列,比如一段描述文本,长度随着单词数而变

many to 1: 比如输入一段可变长度的文本,输出其情感分类向量

many to many: 比如翻译任务

many to many(一一对应): 输入是可变序列,输出是针对输入的每个元素作出判断,比如帧数级别的视频分类任务,输入是帧数可变的视频,输出对每一帧进行决策判断

循环核心单元:

RNN有一个反复出现的小循环核心单元,通过输入x给RNN,计算得到内部隐藏状态h,h会在每次读取新的内容时进行更新,模式如下:

读取输入x->更新隐藏状态h->基于隐藏状态计算得到输出y

隐藏状态h的更新公式如下:

h_t = f_W(h_{t-1},x_t)

f_W在每一个时间戳都是相同的

例子:

比如vanilla RNN的更新公式:

h_t = tanh(W_{hh}h_{t-1},W_{xh}x_t)

y_t = W_{hy}h_t

RNN的计算图:

多对多(x与y一一对应):

注意到每个时间戳应用的W都相同,因此在反向传播的时候,需要将每一个时刻的梯度累加起来,才得到W最终的梯度(因为Loss是每一个时刻的loss加起来)

多对一:

在最后一个隐藏状态包含了之前所有文本的信息

一对多:

一对多的情况会接受固定长度的输入项,输出不定长的输出项,固定长度的输入项会用来初始化隐藏状态,然后RNN对输出的单元逐个处理,最终得到不定长的输出序列

多对多(均不定长):

如翻译任务,可以看作是多对一+一对多的组合,首先输入一个不定长的x到多对一的模型中,得到一个最终隐藏h,这个h被称为上下文向量,被认为包含了x的所有文意信息,然后将h作为输入,输入到一对多的模型中,得到输出序列,那么就可能是用另一种语言表述相同意思的句子

语言模型:

我们训练语言模型,读取大量的语句语料,让其能够学会字词的组合规律并生成自然语言

在语言模型的训练阶段,我们将训练序列作为输入项,每一个时间步的输入都是一个字符

字符在输入中被表示成one-hot编码的向量,即字符对应的维度为1,其余维度为0的向量,这样可以避免直接使用数字编码而导致的偏差,我们输入RNN单元得到的输出y就是其预测的下一个可能的字母,(这里取softmax概率最高的)

在测试阶段,我们输入文本的前缀,然后RNN会产生下一个预测字母的概率分布,我们根据这个概率分布进行采样得到下一个字母(不是取概率最高的,而是进行采样),直到把单词输出完毕为止

截断反向传播(truncated backpropagation):

由于实际使用模型的时候,输入的文本序列可能很长,从而导致时间戳很长,这样反向传播就难以进行,于是我们采用截断反向传播,也就是说每隔一段时间就进行一次反向传播,这次反向传播只对这段时间涉及到的输入数据点进行权重的更新

其实这样有点类似遗忘机制,因为文本和前面好多段的内容联系会很少,但这种是没有选择性的遗忘

不截断的loss组成:

截断的loss组成:

图片描述:

图片描述模型,即输入一张图片,得到其自然语言语义描述,那么自然会想到用RNN实现

训练阶段:

先通过卷积神经网络处理图像,生成图片向量(取全连接层前的输出向量),作为图像内容的表征,然后作为全局特征向量输入到RNN中生成文本,其中第一个时间戳输入的x是一个特殊的start标记

测试阶段:

同样是先对图像卷积,取全连接层前的输出向量,第一个时间戳的输入x是特殊的start标记,隐藏状态更新公式如下:

h_t = tanh(W_{xh}x_t + W_{hh}h_{t-1}+W_{ih}v)

其中v是图像的全局特征向量

第二个时间戳之后的输入x是由上一个时间戳输出的y采样得来的

基于全局注意力机制的图片描述模型:

该模型的RNN在生成单词时,会将注意力放在图像的不同部分

CNN处理图像后,不再返回一个单独的向量,而是得到图像不同位置的特征向量,比如L个位置,每个位置的特征有D维,最终返回一个L\times D 的矩阵

这样一来,在RNN的每一个时间戳,除了得到词汇的采样,还会得到基于图片位置的分布,它代表了RNN想要观察图片的哪个部分,即注意力

软注意力机制如图:

首先在第一个时间戳,会计算出基于图片位置的分布a_1a_1会与特征图运算得到z_1特征向量,则z_1是包含了特定图片位置的信息特征向量,并作为下一个时间戳的额外输入,且之后的时间戳都会得到两个输出,一个是注意力的分布,另一个是词汇的分布,如此循环如下:

上述z的计算公式可以如下:

z = \sum_{i=1}^Lp_iv_i

其中p_i就是每个位置的概率,即位置的分布,v_i是L个特征向量中的第i个

硬注意力:

硬注意力每次只产生一个单独的特征向量,它不是所有特征的组合,但它反向传播比较复杂,因为区域的选择过程不是一个可微的函数

多层RNN:


在多层RNN中,隐藏状态不止1个,而是有3层,一次运行得到RNN的第1层隐藏状态的序列,然后作为第2层隐藏序列的输入,如图:

普通RNN的梯度流:

由于RNN从头到尾循环的时候,输出要多次乘权重矩阵,那么反向传播的时候也是同理,梯度要多次乘权重,则很容易出现梯度消失或者梯度爆炸

LSTM:

LSTM(long short term memory),用于解决梯度消失和梯度爆炸

LSTM在每一个时间戳都会维持两个隐藏状态:

h_t : 与RNN中的意义一致

C_t :单元状态向量,是保留在LSTM中的隐藏状态,不会完全暴露到外部

LSTM有四个门:

输入门(i):表示有多少内容被写到单元状态

遗忘门(f):表示对之前的单元状态的遗忘程度

输出门(o):表示单元状态输出多少给隐藏状态

门值门(g):控制写入到单元状态的信息

模型公式如下:

对于c_t的更新公式,f与c_{t-1}做点积的意思是,当f为1时,表示记住上一个状态,为0时表示忘记

i和g共同控制写入到单元状态的信息,每个时间戳,单元状态向量的每个元素最大自增1或最小自减1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值