我是靠谱客的博主 负责仙人掌,最近开发中收集的这篇文章主要介绍LSTM的各种门,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

动手实现LSTM代码的时候,因为忘记了各种门的原理,总感觉磕磕绊绊的。在这里重新巩固一下。

普通RNN无法学习到距离当前位置较远的信息,LSTM通过修改每个隐藏层内部的结构,来解决长距离依赖问题,实现对“记忆”的控制。如下图所示:
LSTM内部结构
这种特殊结构的主要思想是:将信息存储在一个个记忆细胞中,不同隐藏层的记忆细胞之间通过少量线性交互形成一条传送带(图中红线),实现信息的流动。同时引入一种“门”的结构,用来新增或删除记忆细胞中的信息,控制信息的流动。

这种结构的构成如下:
三个输入:
当前位置的特征x<t>,前一隐藏层的状态 a<t-1>,前一个记忆细胞c<t-1>
三个输出:
当前隐藏层状态a<t>,当前记忆细胞c<t>,当前位置预测y<t>(一些任务中只需前两个输出)
三种门:
遗忘门:控制对历史信息c<t-1>的遗忘程度。
更新门:控制新增到当前记忆细胞中的信息。
输出门:控制记忆细胞c<t>中的哪些信息需要作为输出。
三种门都会输出一个介于0-1之间的数字,表示让信息通过的比例。0表示不让任何信息通过,1表示让全部信息通过。
其他:
候选值c~<t>:新增到当前记忆细胞c<t>中的候选信息

整体工作如下:
输入x<t>a<t-1>c<t-1>;
x<t>a<t-1>进行线性变换和sigmoid操作,分别得到遗忘门的值f<t>、更新门的值i<t>和输出门的值o<t>;
x<t>a<t-1>进行线性变换和tanh操作,得到候选值c~<t>
f<t>c<t-1>进行逐元素相乘,得到保留下来的历史信息;将i<t>c~<t>进行逐元素相乘,得到新增到记忆细胞中的信息;将两者相加得到新的记忆细胞c<t>
c<t>进行tanh操作,并与o<t>进行逐元素相乘,得到过滤后的信息a<t>用来输出;
如果在当前位置还需要输出预测值,则对a<t>进行softmax操作,输出预测值y<t>

具体计算公式如图:
在这里插入图片描述

最后

以上就是负责仙人掌为你收集整理的LSTM的各种门的全部内容,希望文章能够帮你解决LSTM的各种门所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(76)

评论列表共有 0 条评论

立即
投稿
返回
顶部