RNN与LSTM

https://blog.csdn.net/hfutdog/article/details/96479716
这篇讲得好,我理解得8太行。

RNN在这里插入图片描述
X为不同时间的输入向量,h是隐藏层,o是输出层,RNN中隐藏层中的hi与距离它很远的hj关系不是很大,以至于输出的o与o之间,只有临近的才有所联系,而我们的语言不是这样,在这里插入图片描述,就比如这句话,中间的…可能很长,通过前面的france预测后面的franch很难实现。
LSTM
斯认为与RNN相比,是隐藏层有所不同。
在这里插入图片描述LSTM的隐藏层有两个元素,h很好理解,存储的就是隐藏层的状态;c存储的则是长期状态(又叫做cell space,细胞状态?)。每一个当前时刻的h都是由当前时刻的c得到的,而c又是如何得到?c又是如何推导出h?具体是下面的图。
在这里插入图片描述
上一时刻的长期状态通过忘记门控制其各个元素的权重后,加上,当前时刻的状态通过输入门控制其各个元素的权重后,得到了当前时刻的长期状态,进一步通过输出门,控制其各个元素的权重后,得到当前隐藏层的状态。还有三张流程图很重要。
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
上面一直说的控制权重
基本都是用sigmoid层,即图中ft、it、ot函数都差不多,都是根据上一时刻隐藏层的状态、当前时刻的输入来形成的一个激活层。就是输入一个向量,sigmoid决定给你的向量的每一个元素乘上不同的权重,代表不同的重要性。而权重和一定等于1的。
另一个函数(候选层?)就是tanh(双曲正切),由双曲正弦和双曲余弦得出,可以将输入固定到-1到1的范围内。为什么要用到tanh?在知乎上看到一段话:

LSTM中的三个门是用的sigmoid作为激活函数,生成候选记忆时候用的才是tanh,门的激活函数如果用relu的话会有个问题,就是relu是没有饱和区域的,那么就没法起到门的作用。候选记忆用tanh是因为tanh的输出在-1~1,是0中心的,并且在0附近的梯度大,模型收敛快

(作者:扁豆焖面1.0
链接:https://www.zhihu.com/question/317674477/answer/635233425
来源:知乎)

还有这段

激活函数的大致选取原则:非线性,可导,计算方便,有效梯度区域广(在参数通常取值的区间,梯度不会过大或过小),激活后的取值范围合适。LSTM中的tanh单元只是对数据作一次线性变换+非线性映射tanh(wx+b)以提升非线性建模的模型容量。用其它的理论上也可以,符合上述选取原则就行,比如leakyrelu等。当然LSTM里还有很多sigmoid激活,这个主要方便把门的开度限制在0~1,大家都懂的。

(作者:ZJU某小白
链接:https://www.zhihu.com/question/317674477/answer/633934024
来源:知乎)

总的来说,用tanh函数,是因为它:

  • 输出在-1到1之间,以0为中心
  • 在0附近梯度大,模型收敛快
  • 非线性、可导、计算方便、有效梯度区域广

代码取自https://github.com/nicodjimenez/lstm
有空要研究

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值