LSTM入门学习——本质上就是比RNN的隐藏层公式稍微复杂了一点点而已

简介:

LSTM入门学习

摘自:http://blog.csdn.net/hjimce/article/details/51234311

下面先给出LSTM的网络结构图:

看到网络结构图好像很复杂的样子,其实不然,LSTM的网络结构图无非是为了显示其高大上而已,这其实也是一个稍微比RNN难那么一丁点的算法。为了简单起见,下面我将直接先采用公式进行讲解LSTM,省得看见LSTM网络结构图就头晕。

(1)RNN回顾

     先简单回顾一下RNN隐层神经元计算公式为:

其中U、W是网络模型的参数,f(.)表示激活函数。RNN隐层神经元的计算由t时刻输入xt,t-1时刻隐层神经元激活值st-1作为输入。总之说白了RNN的核心计算公式就只有上面这么简简单单的公式,所以说会者不难,难者不会,对于已经懂得RNN的人来说,RNN是一个非常简单的网络模型。

(2)LSTM前向传导

     相比于RNN来说,LSTM隐层神经元的计算公式稍微复杂一点,LSTM隐藏层前向传导由下面六个计算公式组成,而且其中前4个公式跟上面RNN公式都非常相似:


首先需要先记住上面五个公式中输入变量的含义:

(1)输入变量:x(t)表示t时刻网络的输入数据,S(t-1)表示t-1时刻隐藏层神经元的激活值、C是一个记忆单元

(2)网络参数:U、W都是网络LSTM模型的参数,或者称之为权值矩阵

(3)σ表示sigmoid激活函数

(4)另外s(t)是t时刻,LSTM隐藏层的激活值

     从上面的公式我们可以看出LSTM在t时刻的输入包含:X(t)、S(t-1)、C(t-1),输出就是t时刻隐层神经元激活值S(t)。LSTM前四个公式和RNN非常相似,模型都是:

这四个公式的输入都是x(t),s(t-1),每个公式各有各自的参数U、W。前面三个公式的激活函数选择s型函数,大牛门给它们起了一个非常装逼的名词,i、f、o分别称之为输入门、遗忘门、输出门;第4个公式选用tanh激活函数。

1、输入门

输入门可以控制你的输入是否影响你的记忆当中的内容。因变量为i,自变量为:输入数据x(t)、上一时刻隐藏层神经元激活值s(t-1),其采用S激活函数,输出的数值在0~1之间。如果从业余的角度来讲,可以把它看成是一个权值;当i为0的时候,表示当前时刻x(t)的信息被屏蔽,没有存储到记忆中。

2、遗忘门

遗忘门是来看你的记忆是否自我更新保持下去。因变量为f,自变量依旧为:

3、输出门

输出门是影响你的记忆是否被输出出来影响将来这三个们有一个特点:它们的输入数据都是x(t),上一时刻隐藏层的激活值s(t-1),另外这三个们

这种方式使你的记忆得到灵活的保持,而控制记忆如何保持的这些门本身是通过学习得到的,通过不同的任务学习如何去控制这些门。

三、源码实现

https://github.com/fchollet/keras/blob/master/keras/layers/recurrent.py

 

[python]  view plain  copy
 
    1.     x_i = K.dot(x * B_W[0], self.W_i) + self.b_i  
    2.     x_f = K.dot(x * B_W[1], self.W_f) + self.b_f  
    3.     x_c = K.dot(x * B_W[2], self.W_c) + self.b_c  
    4.     x_o = K.dot(x * B_W[3], self.W_o) + self.b_o  
    5.   
    6. i = self.inner_activation(x_i + K.dot(h_tm1 * B_U[0], self.U_i))  
    7. f = self.inner_activation(x_f + K.dot(h_tm1 * B_U[1], self.U_f))  
    8. c = f * c_tm1 + i * self.activation(x_c + K.dot(h_tm1 * B_U[2], self.U_c))  
    9. o = self.inner_activation(x_o + K.dot(h_tm1 * B_U[3], self.U_o))  
    10.   
    11. h = o * self.activation(c)  






















本文转自张昺华-sky博客园博客,原文链接:http://www.cnblogs.com/bonelee/p/7714843.html ,如需转载请自行联系原作者

相关文章
|
小程序 数据安全/隐私保护
点餐小程序实战教程01需求分析
点餐小程序实战教程01需求分析
|
存储 网络协议 Ubuntu
【C++网络编程】Socket基础:网络通讯程序入门级教程
【C++网络编程】Socket基础:网络通讯程序入门级教程
376 7
|
机器学习/深度学习 算法 索引
LSTM(长短期记忆网络)原理介绍
LSTM算法是一种重要的目前使用最多的时间序列算法,是一种特殊的RNN(Recurrent Neural Network,循环神经网络),能够学习长期的依赖关系。主要是为了解决长序列训练过程中的梯度消失和梯度爆炸问题。简单来说,就是相比普通的RNN,LSTM能够在更长的序列中有更好的表现。
7609 0
LSTM(长短期记忆网络)原理介绍
|
Ubuntu Linux 网络安全
/var/log/auth.log日志详解
`/var/log/auth.log`是Linux(尤其是Debian系如Ubuntu)记录身份验证和授权事件的日志文件,包括登录尝试(成功或失败)、SSH活动、sudo使用和PAM模块的操作。登录失败、SSH连接、sudo命令及其它认证活动都会在此记录。查看此日志通常需root权限,可使用`tail`、`less`或`grep`命令。文件内容可能因发行版和配置而异。例如,`sudo tail /var/log/auth.log`显示最后几行,`sudo grep "failed password" /var/log/auth.log`搜索失败密码尝试。
1993 8
|
调度 网络架构 索引
NR PDSCH(三) TB size determination
谈TB size前,首先了解下PDSCH resource mapping,基站会通过RRC层配置的参数告知UE有一些时频资源(RB级/RE级)不能作为UE的PDSCH 资源使用,网络侧会对这些资源可能有特定用途,例如DSS场景中LTE作为NR 的inband部署时。用于发送RAR/OSI/Paging/MSG4/MSGB/SIB1 的PDSCH资源如果与SSB 的PRB overlap,overlap的PDSCH不能用于PDSCH 传输。
NR PDSCH(三) TB size determination
|
人工智能 自然语言处理 开发者
AIGC助力元宇宙应用落地
【1月更文挑战第15天】AIGC助力元宇宙应用落地
302 3
AIGC助力元宇宙应用落地
|
测试技术
你真的知道什么是冒烟测试吗?
你真的知道什么是冒烟测试吗?
657 0
你真的知道什么是冒烟测试吗?
|
前端开发 小程序 JavaScript
基于微信小程序社区老年人健康医疗信息服务平台设计与实现
基于微信小程序社区老年人健康医疗信息服务平台设计与实现
497 0
|
Windows Linux 网络安全
windows 上rsync客户端使用方法
1.1 获取 windows上实现rsync的软件(cwRsync) cwRsync是Windows 客户端GUI的一个包含Rsync的包装。您可以使用cwRsync快速远程文件备份和同步。 1.
9688 0
windows 上rsync客户端使用方法
|
开发者 Kotlin
变“鼠”为“鸭”——为SVG Path制作FIFO路径变换动画,效果丝滑
曾撰文《使用batik在kotlin中将TTF字体转换为SVG图像》介绍了如何将汉字转为SVG Path路径进行展示和变换,以此为基础用动画将一个汉字变为另一个汉字,感官上很好玩
498 0
变“鼠”为“鸭”——为SVG Path制作FIFO路径变换动画,效果丝滑