长短期记忆(LSTM)-tensorflow代码实现(10分钟搞定,不要急躁)

本文介绍了RNN在处理长序列数据时的梯度消失问题,并详细阐述了LSTM(长短期记忆网络)的结构与工作原理,包括输入门、输出门和忘记门的作用。LSTM通过门控机制解决了RNN的记忆问题,提高了学习长期依赖性的能力。此外,文章还提及了LSTM的变体GRU(门控循环单元)及其简化设计。并提供了一个使用tensorflow实现LSTM的例子。
摘要由CSDN通过智能技术生成

作者:Jason
时间:2017.10.17

长短期记忆(LSTM)神经网络是之前讲的RNN的一种升级版本,我们先来聊聊RNN的弊端

RNN的弊端

在这里插入图片描述
之前我们说过, RNN 是在有顺序的数据上进行学习的. 为了记住这些数据, RNN 会像人一样产生对先前发生事件的记忆. 不过一般形式的 RNN 就像一个老爷爷, 有时候比较健忘. 为什么会这样呢?

这里写图片描述

想像现在有这样一个 RNN, 他的输入值是一句话: ‘我今天要做红烧排骨, 首先要准备排骨, 然后…., 最后美味的一道菜就出锅了’, shua ~ 说着说着就流口水了. 现在请 RNN 来分析, 我今天做的到底是什么菜呢. RNN可能会给出“辣子鸡”这个答案. 由于判断失误, RNN就要开始学习 这个长序列 X 和 ‘红烧排骨’ 的关系 , 而RNN需要的关键信息 ”红烧排骨”却出现在句子开头.

只需当权重w稍微小于1时(反向传播的误差越来越小,梯度弥散
这里写图片描述

只需当权重w稍微大于1时(反向传播的误差越来越大,梯度爆炸
这里写图片描述

具体example:

图1.1
这里写图片描述

  如上图,所示普通的RNN情况下,再来看看 RNN是怎样学习的吧. 红烧排骨这个信息原的记忆要进过长途跋涉才能抵达最后一个时间点. 然后我们得到误差, 而且在 反向传递 得到的误差的时候, 他在每一步都会 乘以一个自己的参数 W. 如果这个 W 是一个小于1 的数, 比如0.99. 这个0.99 不断乘以误差, 误差传到初始时间点也会是一个接近于零的数, 所以对于初始时刻, 误差相当于就消失了. 我们把这个问题叫做梯度消失或者梯度弥散 Gradient vanishing. 反之如果 W 是一个大于1 的数, 比如1.01 不断累乘, 则到最后变成了无穷大的数, RNN被这无穷大的数撑死了, 这种情况我们叫做剃度爆炸(Gradient exploding)。
  如图1.1所示当依次输入1,0,0,0时,当W=0.99时,序列很长的情况下,最终的值为W的999次方,约等于0,远远小于1,LOSS/w=梯度也会变得特别小,当W=1.01时,序列很长的情况下,最终的值为W的999次方,约等于+00,远远大于1,LOSS/w=梯度也会变得特别大 。
  这就是普通 RNN 没有办法回忆起久远记忆的原因.

RNN —>LSTM

这里写图片描述

LSTM 就是为了解决这个问题而诞生的. LSTM 和普通 RNN 相比, 多出了三个控制器. (输入控制, 输出控制, 忘记控制). 现在, LSTM RNN 内部的情况是这样.

他多了一个 控制全局的记忆, 我们用粗线代替. 为了方便理解, 我们把粗线想象成电影或游戏当中的 主线剧情. 而原本的 RNN 体系就是 分线剧情. 三个控制器都是在原始的 RNN 体系上, 我们先看 输入方面 , 如果此时的分线剧情对于剧终结果十分重要, 输入控制就会将这个分线剧情按重要程度 写入主线剧情 进行分析. 再看 忘记方面, 如果此时的分线剧情更改了我们对之前剧情的想法, 那么忘记控制就会将之前的某些主线剧情忘记, 按比例替换成现在的新剧情. 所以 主线剧情的更新就取决于输入 和忘记 控制. 最后的输出方面, 输出控制会基于目前的主线剧情和分线剧情判断要输出的到底是什么.基于这些控制机制, LSTM 就像延缓记忆衰退的良药, 可以带来更好的结果.
以下为traditional LSTM的公式:

这里写图片描述

  前三行是三个门,分别是遗忘门 ft,输入门 it,输出门 ot,输入都是

评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值