李宏毅的深度学习之RNN

RNN引言

如果需要对一句话中的每个单词做slot filling(槽位填充),eg: I will arrive Taipei on November。
此时训练样本中,
Taipei 对应 目的地,
November 对应 到达时间

但是如果变成了另一句话:I will leave Taipei on November。
此时训练样本中,
Taipei 对应 离开地点。
但是在普通的神经网络中,一个训练样本X无法对应多个label Y。因此,我们希望神经网络是有记忆的。这种有记忆的神经网络就是RNN。
RNN就是在DNN的基础上加上了记忆单元memory cell。记忆单元会保存上一时刻中隐藏单元的值,并作为输入来起作用。

下图中每次按顺序输入句子中的一个词时,用来预测的神经网络都是相同的。但是由于memory单元a的存在,句子中词的顺序对预测结果会产生影响。
这里写图片描述

LSTM原理

为了解决梯度消失的问题,而引出的LSTM。
LSTM有4个输入:输入x,input gate参数,forget gate的参数,output gate参数。LSTM
LSTM是如何存在于神经网络中的呢?实际上就是使用每一个LSTM单元替换原来的隐藏单元,此时对于每一个隐藏单元有4个输入,每个输入都是由上一层的输出线性组合得来的。因此在训练时的参数量也是很大的。(是一般神经网络参数的4倍)
这里写图片描述
图中的 z f , z i , z , z o z^f,z^i,z,z^o zf,zi,z,zo分别表示输入 x t x^t xt经过参数线性变换(wx+b)后的vector值。vector中的每一个值对一个隐藏单元起作用。

有时候,会将输出+memory当前值+下一次的输入一起作为输入进入下一次训练,那么:
这里写图片描述

RNN的训练

在这种情况下,RNN的训练变得十分复杂,在训练时,可能会出现损失函数时大时小的情况,这是因为RNN下的损失函数的曲线要不十分平坦,要不非常陡峭,在进行梯度训练时一不小心梯度就可能上一个陡峰,因此需要进行clipping在梯度到达一定值的时候及时停止对梯度的训练。
那为什么梯度的会时大时小呢?这是因为RNN的结构是被循环利用的,因此传播参数也经常是被循环利用多次的,当一个参数w>1时容易发生梯度爆炸,w<1时容易出现梯度消失,因此梯度在1左右会形成一个陡峰。

而LSTM就可以解决梯度消失的问题
为什么?
传统的RNN每一次memory会被覆盖掉,而LSTM是在原来的基础上加上输入,因此就算是小的影响也不会被去除。

但是LSTM并不能解决梯度爆炸的问题,所以我们在训练的时候需要使用较小的learning_rate。

GRU是将LSTM中的input gate 和 forget gate互异,因此只需要两个门进行训练,总体来说训练模型会简单的多。
激活函数:一般情况下使用sigmoid效果会好,但是在参数使用identity matrix的时候,使用Relu会好一些。

应用:

1.输入为一个矢量,输出为一个标量sequence to vector
实例:语义分析
比如输入为:好看的电影; 输出为:正类

2.输入为一个矢量,输出为一个比输入短的矢量
比如语音识别
输入的语音在很短的时间内转换为一个输入元素,有可能几个输入元素指的是同一个意思,这时候采用CTC网络去重,且加入一个Null的输出表示两个词语之间的空白。

3.输入与输出不确定长短sequence to sequence
实例:翻译
翻译时并不知道哪种语言会比较长,因此在输出时是将上一次的输出作为下一次的输入来不断训练,再加入一个字符“断”表示停止。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值