深度学习算法原理——LSTM
1. 概述
在循环神经网络RNN一文中提及到了循环神经网络RNN存在长距离依赖的问题,长短期记忆(Long Short-Term Memory,LSTM)网络便是为了解决RNN中存在的梯度爆炸的问题而提出。在LSTM网络中,主要依靠引入“门”机制来控制信息的传播。
2. 算法原理
2.1. LSTM的网络结构
LSTM的网络结构如下所示(图片来自参考文献):
与循环神经网络RNN相比,LSTM的网络结构要复杂的多。
在LSTM网络中,通过引入三个门来控制信息的传递,这三个门分别为遗忘门(forget gate),输入门(input gate)和输出门(output gate)。门机制是LSTM中重要的概念,那么什么是“门”以及门机制在LSTM中是如何解决长距离依赖的问题的。
2.2. 门机制
现实中的“门”通常解释为出入口,在LSTM网络的门也是一种出入口,但是是控制信息的出入口。门的状态通常有三种状态,分别为全开(信息通过概率为1),全闭(信息通过概率为0)以及半开(信息通过概率介于0和1之间)。在这里,我们发现对于全开,全闭以及半开三种状态下的信息通过可以通过概率来表示,在神经网络中,sigmoid函数也是一个介于0和1之间的表示,可以应用到LSTM中门的计算中。
2.3. LSTM的计算过程
如下是LSTM的网络结构的具体形态,如下所示(图片来自邱锡鹏老师的课件):
其中,ct−1c_{t-1}ct−1表示的是t−1t-1t−1时刻的cell state(注:关于cell state,查了多个版本的中文翻译,有翻译为“细胞状态”,有翻译成“单元状态”,邱老师使用的是内部状态,没有一个明确的中文翻译,故在此使用英文),ht−1h_{t-1}ht−1表示的是t−1t-1t−1时刻的hidden state(注:与前面的cell state对应),xtx_txt表示的是ttt时刻的输入,ftf_tft表示的是遗忘门,iti_tit表示的是输入门,c~t\tilde{c}_tc~t表示的是候选值(candidate values),oto_tot表示的是输出门。
从图中的数据流向得到的计算流程如下所示:
- 利用t−1t-1t−1时刻的hidden state ht−1h_{t-1}ht−1计算遗忘门ftf_tft的结果,ftf_tft的计算公式如下所示
ft=σ(Wfxt+Ufht−1+bf)f_t=\sigma \left ( W_fx_t+U_fh_{t-1}+b_f \right )ft=σ(Wfxt+Ufht−1+bf)
- 利用t−1t-1t−1时刻的hidden state ht−1h_{t-1}ht−1计算输入门iti_tit的结果,iti_tit的计算公式如下所示
it=σ(Wixt+Uiht−1+bi)i_t=\sigma \left ( W_ix_t+U_ih_{t-1}+b_i \right )it=σ(Wixt+Uiht−1+bi)
- 利用t−1t-1t−1时刻的hidden state ht−1h_{t-1}ht−1计算候选值c~t\tilde{c}_tc~t的结果,c~t\tilde{c}_tc~t的计算公式如下所示
c~t=tanh(Wcxt+Ucht−1+bc)\tilde{c}_t=tanh \left ( W_cx_t+U_ch_{t-1}+b_c \right )c~t=tanh(Wcxt+Ucht−1+bc)
- 利用t−1t-1t−1时刻的hidden state ht−1h_{t-1}ht−1计算输出门oto_tot的结果,oto_tot的计算公式如下所示
ot=σ(Woxt+Uoht−1+bo)o_t=\sigma \left ( W_ox_t+U_oh_{t-1}+b_o \right )ot=σ(Woxt+Uoht−1+bo)
- 根据ttt时刻的cell state ctc_tct,这里会使用到t−1t-1t−1时刻的cell state ct−1c_{t-1}ct−1,遗忘门ftf_tft,输入门iti_tit和候选值c~t\tilde{c}_tc~t,ctc_tct的计算公式如下所示
ct=ft⊙ct−1+it⊙c~tc_t=f_t\odot c_{t-1}+i_t\odot \tilde{c}_tct=ft⊙ct−1+it⊙c~t
上述的公式是由前面的1,2,3部分的公式组成,也是LSTM网络中的关键的部分,对该公式,我们从如下的几个部分来理解:
- ft⊙ct−1f_t\odot c_{t-1}ft⊙ct−1,使用遗忘门ftf_tft对t−1t-1t−1时刻下的cell state ct−1c_{t-1}ct−1遗忘;
- it⊙c~ti_t\odot \tilde{c}_tit⊙c~t,首先是c~t\tilde{c}_tc~t表示的是通过ttt时刻的输入和t−1t-1t−1时刻的hidden state ht−1h_{t-1}ht−1需要增加的信息,与输入门iti_tit结合起来就表示整体需要增加的信息;
- 两部分结合表示的是ttt时刻下的cell state下需要从t−1t-1t−1时刻下的cell state中保留的部分信息以及ttt时刻下新增信息的总和。
- 根据输出门oto_tot和cell state ctc_tct计算外部状态hth_tht,hth_tht的计算公式如下所示
ht=ot⊙tanh(ct)h_t=o_t\odot tanh\left ( c_t \right )ht=ot⊙tanh(ct)
参考文献
- Understanding LSTM Networks
- LSTM与GRU的原理,不熟悉的再来看看呀
- 神经网络与深度学习
- 人人都能看懂的LSTM
深度学习算法原理——LSTM相关推荐
- Python大数据综合应用 :零基础入门机器学习、深度学习算法原理与案例
机器学习.深度学习算法原理与案例实现暨Python大数据综合应用高级研修班 一.课程简介 课程强调动手操作:内容以代码落地为主,以理论讲解为根,以公式推导为辅.共4天8节,讲解机器学习和深度学习的模型 ...
- TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书
作者:蒋子阳 著 出版社:中国水利水电出版社 品牌:智博尚书 出版时间:2019-01-01 TensorFlow深度学习算法原理与编程实战 人工智能机器学习技术丛书 ISBN:97875170682 ...
- 深度学习算法原理_用于对象检测的深度学习算法的基本原理
深度学习算法原理 You just got a new drone and you want it to be super smart! Maybe it should detect whether ...
- ZAO 背后的深度学习算法原理浅析
ZAO最近火爆,成为现象级产品之一,引起大家的广泛关注,ATA上面已经有同学做了一些说明分析,链接如下: https://www.atatech.org/articles/148375?spm=ata ...
- DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优
DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优 目录 基于keras对LSTM算法进行超参数调优 1.可视化LSTM模型的loss和acc曲线
- 大话卷积神经网络CNN,小白也能看懂的深度学习算法教程,全程干货建议收藏!...
来源 | 程序员管小亮 本文创作的主要目的,是对时下最火最流行的深度学习算法的基础知识做一个简介,作者看过许多教程,感觉对小白不是特别友好,尤其是在踩过好多坑之后,于是便有了写这篇文章的想法. 由于文 ...
- 一文梳理深度学习算法演进
来源:https://zhuanlan.zhihu.com/p/464515049 作者:Peter潘欣 编辑:蘑菇先生 学习记涉及语音.图像.nlp.强化学习.隐私保护.艺术创作.目标检测.医疗.压 ...
- 平均年薪30万的深度学习算法工程师,正面临100万的人才缺口
深度学习的突破极大推动了人工智能的发展,并广泛应用在计算机视觉.自然语言处理等领域中.谷歌.百度的IDL.腾讯的AI lab.华为等都在重金布局人工智能,同时,以深度学习为核心技术的人工智能企业不断涌 ...
- 人工智能综述性论文_人工智能论文研读:深度学习算法与架构综述(包含详细统计表)...
综述一共26页 总体内容概括 本文综述了几种提高训练精度和缩短训练时间的优化方法.深入研究了最近深度网络中使用的训练算法背后的数学原理.将描述当前的缺点.增强和实现.本文还介绍了深度卷积网络.深度残差 ...
最新文章
- Img与background的区别
- 七十四、Python | Leetcode数字系列(下篇)
- 在 ASP.NET Core 中使用 HTTP 标头传播
- java.net.SocketException: Software caused connection abort: socket write erro
- 红橙Darren视频笔记 热更新 bsdiff bspatch 在Android设备上的应用 架构篇1完结篇
- VisualStudio异常处理 —— LNK1112 模块计算机类型“x64”与目标计算机类型“X86”冲突
- 7-37 抓老鼠啊~亏了还是赚了? (20 分)
- 常用排序算法(六)——希尔排序
- mysql悲观锁隔离级别_mysql隔离级别与悲观锁、乐观锁
- Python pycharm(windows版本)部署spark环境
- OpenMP4.0: #pragma openmp simd实现SIMD指令优化(ARM,X86,MIPS)
- 未来编程语言展望——G语言的神奇新要素
- 【Java】简单的马戏团节目单项目
- CSS-Cascading Style Sheet_层叠样式表_用法详解
- 淘宝双11大数据分析(环境篇)
- Java工具使用(导读)
- micropython api_micropython和python 微云
- 1,10-Phen|邻菲啰啉|邻二氮杂菲|1,10-菲啰啉有机配体-66-71-7
- cool edit工具介绍及使用
- Vue中的深坑——component和components
热门文章
- 在内网也想使用微信、钉钉和飞书,怎么办?
- 推陈、致新——城市更新促进美丽城市建设
- 做科技型券商,光大证券构建私有云平台
- 华为mate40pro+和华为mate40RS保时捷有什么区别
- 【Nginx01】Ngnix入门
- 强劲推力配上刚猛转速,真是个运动护理好手,OPOVE APEX筋膜枪体验
- linux 魅族,传魅族17全系90Hz刷新率
- 「关羽斩废」! 垃圾处理与发电参加「护家担当」概念雄安跨界斜杠派展区!AiHiX
- 步进电机c语言控制程序6,步进电机控制程序(c语言+51单片机)
- 2022年福田英才荟海归创业港补贴申请指南