当前位置:网站首页>一文看懂 LSTM(Long Short-Term Memory)
一文看懂 LSTM(Long Short-Term Memory)
2022-04-23 09:56:00 【码猿小菜鸡】
LSTM(Long Short-Term Memory)
0. 从RNN说起
循环神经网络(Recurrent Neural Network,RNN)是一种用于处理序列数据的神经网络。相比一般的神经网络来说,他能够处理序列变化的数据。比如某个单词的意思会因为上文提到的内容不同而有不同的含义,RNN就能够很好地解决这类问题。
1. 普通RNN
先简单介绍一下一般的RNN。
其主要形式如下图所示(图片均来自台大李宏毅教授的PPT):
这里:
x x x 为当前状态下数据的输入, h h h 表示接收到的上一个节点的输入。
y y y 为当前节点状态下的输出,而 h ′ h' h′ 为传递到下一个节点的输出。
通过上图的公式可以看到,输出 h’ 与 x 和 h 的值都相关。
而 y 则常常使用 h’ 投入到一个线性层(主要是进行维度映射)然后使用 s o f t m a x softmax softmax 进行分类得到需要的数据。
对这里的 y y y 如何通过 h ′ h' h′ 计算得到往往看具体模型的使用方式。
通过序列形式的输入,我们能够得到如下形式的 RNN。
2. LSTM
2.1 什么是LSTM
长短期记忆(Long short-term memory, LSTM)是一种特殊的 RNN,主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的 RNN,LSTM能够在更长的序列中有更好的表现。
LSTM结构(图右)和普通RNN的主要输入输出区别如下所示。
相比RNN只有一个传递状态 h t h^t ht,LSTM 有两个传输状态,一个 c t c^t ct(cell state),和一个 h t h^t ht(hidden state)。(Tips:RNN中的 h t h^t ht 对于LSTM中的 c t c^t ct )
其中对于传递下去的 c t c^t ct 改变得很慢,通常输出的 c t c^t ct 是上一个状态传过来的 c t − 1 c^{t-1} ct−1 加上一些数值。
而 h t h^t ht 则在不同节点下往往会有很大的区别。
2.2 深入LSTM结构
下面具体对LSTM的内部结构来进行剖析。
首先使用LSTM的当前输入 x t x^t xt 和上一个状态传递下来的 h t − 1 h^{t-1} ht−1 拼接训练得到四个状态。
其中, z f z^f zf , z i z^i zi , z o z^o zo 是由拼接向量乘以权重矩阵之后,再通过一个 s i g m o i d sigmoid sigmoid 激活函数转换成 0 0 0 到 1 1 1 之间的数值,来作为一种门控状态。而 z z z 则是将结果通过一个 t a n h tanh tanh 激活函数将转换成 -1 到 1 之间的值(这里使用 t a n h tanh tanh 是因为这里是将其做为输入数据,而不是门控信号)。
下面开始进一步介绍这四个状态在LSTM内部的使用。
⊙ \odot ⊙ 是 Hadamard Product,也就是操作矩阵中对应的元素相乘,因此要求两个相乘矩阵是同型的。 ⊕ \oplus ⊕ 则代表进行矩阵加法。
2.3 LSTM内部主要有三个阶段:
- 忘记阶段。这个阶段主要是对上一个节点传进来的输入进行选择性忘记。简单来说就是会 “忘记不重要的,记住重要的”。
具体来说是通过计算得到的 z f z^f zf (f 表示forget)来作为忘记门控,来控制上一个状态的 c t − 1 c^{t-1} ct−1 哪些需要留哪些需要忘。
- 选择记忆阶段。这个阶段将这个阶段的输入有选择性地进行“记忆”。主要是会对输入 x t x^t xt 进行选择记忆。哪些重要则着重记录下来,哪些不重要,则少记一些。当前的输入内容由前面计算得到的 z z z 表示。而选择的门控信号则是由 z i z^i zi (i代表information)来进行控制。
将上面两步得到的结果相加,即可得到传输给下一个状态的 [公式] 。也就是上图中的第一个公式。
- 输出阶段。这个阶段将决定哪些将会被当成当前状态的输出。主要是通过 z o z^o zo 来进行控制的。并且还对上一阶段得到的 c o c^o co 进行了放缩(通过一个tanh激活函数进行变化)。
与普通RNN类似,输出 y t y^t yt 往往最终也是通过 h t h^t ht 变化得到。
Reference
原文链接
原文链接:http://iloveeli.top:8090/archives/lstmlongshort-termmemory
版权声明
本文为[码猿小菜鸡]所创,转载请带上原文链接,感谢
https://blog.csdn.net/weixin_47160526/article/details/124331904
边栏推荐
- 通过流式数据集成实现数据价值(2)
- Redis exception read error on connection solution
- DBA常用SQL语句(4)- Top SQL
- (Extended) bsgs and higher order congruence equation
- SQL调优系列文章之—SQL性能方法论
- 计算机网络安全实验二|DNS协议漏洞利用实验
- PHP notes (I): development environment configuration
- Example of data object mask used by SAP translate
- [ACM-ICPC 2018 Shenyang Network preliminaries] J. Ka Chang (block + DFS sequence)
- [CF 1425d] danger of mad snakes
猜你喜欢
Construire neuf capacités de fabrication agile à l'ère métacosmique
構建元宇宙時代敏捷制造的九種能力
解决VMware卸载后再安装出现的问题
Redis exception read error on connection solution
Windows安装redis并将redis设置成服务开机自启
Sim Api User Guide(4)
Number theory blocking (integer division blocking)
Interviewer: let's talk about some commonly used PHP functions. Fortunately, I saw this article before the interview
【无标题】
Solving Lucas number and combination theorem
随机推荐
Sim Api User Guide(4)
Planning and construction of industrial meta universe platform
"Gu Yu series" airdrop
论文阅读《Integrity Monitoring Techniques for Vision Navigation Systems》——4视觉系统中的多故障
DBA常用SQL语句(2)— SGA和PGA
SAP salv14 background output salv data can directly save files and send emails (with sorting, hyperlink and filtering format)
DBA常用SQL语句(3)- cache、undo、索引和等待事件
Construire neuf capacités de fabrication agile à l'ère métacosmique
最长公共前串
C language: expression evaluation (integer promotion, arithmetic conversion...)
SAP debug debug for in, reduce and other complex statements
Computer network security experiment II DNS protocol vulnerability utilization experiment
Solving Lucas number and combination theorem
Redis 异常 read error on connection 解决方案
ARM调试(1):两种在keil中实现printf重定向到串口的方法
杰理之系统事件有哪些【篇】
Practice of Flink streaming batch integration in Xiaomi
Code source daily question div1 (701-707)
通过流式数据集成实现数据价值(2)
SAP RFC_ CVI_ EI_ INBOUND_ Main BP master data creation example (Demo customer only)