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

    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. i = self.inner_activation(x_i + K.dot(h_tm1 * B_U[0], self.U_i))
    6. f = self.inner_activation(x_f + K.dot(h_tm1 * B_U[1], self.U_f))
    7. c = f * c_tm1 + i * self.activation(x_c + K.dot(h_tm1 * B_U[2], self.U_c))
    8. o = self.inner_activation(x_o + K.dot(h_tm1 * B_U[3], self.U_o))
    9. h = o * self.activation(c)

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

  1. LSTM入门学习——结合《LSTM模型》文章看

    摘自:https://zybuluo.com/hanbingtao/note/581764 写得非常好 见原文 长短时记忆网络的思路比较简单.原始RNN的隐藏层只有一个状态,即h,它对于短期的输入非常 ...

  2. 使用深度学习检测DGA(域名生成算法)——LSTM的输入数据本质上还是词袋模型

    from:http://www.freebuf.com/articles/network/139697.html DGA(域名生成算法)是一种利用随机字符来生成C&C域名,从而逃避域名黑名单检 ...

  3. Altium Designer入门学习笔记4:PCB设计中各层的含义

    阻焊层:solder mask,是指板子上要上绿油的部分:因为它是负片输出,所以实际上有solder mask的部分实际效果并不上绿油,而是镀锡,呈银白色! 助焊层:paste mask,是机器贴片时 ...

  4. RNN 入门学习资料整理

    建议按序阅读 1. RNN的一些简单概念介绍 A guide to recurrent neural networks and backpropagation Deep learning:四十九(RN ...

  5. git入门学习(二):新建分支/上传代码/删除分支

    一.git新建分支,上传代码到新的不同分支  我要实现的效果,即是多个内容的平行分支:这样做的主要目的是方便统一管理属于同一个内容的不同的项目,互不干扰.如图所示: 前提是我的github上已经有we ...

  6. git入门学习(一):github for windows上传本地项目到github

    Git是目前最先进的分布式版本控制系统,作为一个程序员,我们需要掌握其用法.Github发布了Github for Windows 则大大降低了学习成本和使用难度,他甚至比SVN都简单. 一.首先在g ...

  7. 使用深度学习检测TOR流量——本质上是在利用报文的时序信息、传输速率建模

    from:https://www.jiqizhixin.com/articles/2018-08-11-11 可以通过分析流量包来检测TOR流量.这项分析可以在TOR 节点上进行,也可以在客户端和入口 ...

  8. tensorflow学习之(十一)RNN+LSTM神经网络的构造

    #RNN 循环神经网络 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data tf.se ...

  9. DQN 处理 CartPole 问题——使用强化学习,本质上是训练MLP,预测每一个动作的得分

    代码: # -*- coding: utf-8 -*- import random import gym import numpy as np from collections import dequ ...

随机推荐

  1. [NOIP2011提高组]Mayan游戏

    题目:洛谷P1312.Vijos P1738.codevs1136. 题目大意:在一个7行5列的棋盘(左下角坐标0,0)上,有一些不同颜色的棋子. 规定某一时刻,连续三个横排或竖列的棋子颜色相同,则它 ...

  2. [codevs3955]最长严格上升子序列(加强版)

    题目大意:给你一个序列,要你求该序列中最长严格上升子序列的长度. 解题思路:此题算是一道LIS模板题.普通的$O(n^2)$的LIS是会TLE的,因为$n\le 1000000$,所以此题要用单调队列 ...

  3. linux 连接 NAS

    [root@kvm-server ~]# mount -o username=user01,password=1234567890 //192.168.31.20/share /mnt/nas Cou ...

  4. parted 4T磁盘

    parted /dev/vdg mklabel gpt mkpart primary ext4 0% 100%

  5. python_if_else,while,break

    #密码密文展示,getpass在pycharm中无法使用,只能在python中使用import getpass #登录判断'''raw_name="Monica"raw_passw ...

  6. 【BZOJ 1196】[HNOI2006]公路修建问题

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 二分最后选的边中的最大值是多少. mid 则所有边权小于等于mid的边都可以用了. 那么我们要怎么选择呢? ->优先选择一级的 ...

  7. Redis加入Centos Linux开机启动

    Redis加入Centos Linux开机启动 网上有很多redis在linux下自动启动的例子,实现的方式很多,很多都是参考一个老外流传出来启动的例子,其实直接使用是不行,而且有很多地方有一些语法错 ...

  8. Java的TreeMap,C++的lower_bound,合并间隔

    https://leetcode.com/problems/data-stream-as-disjoint-intervals/?tab=Description 这道题目是合并间隔的经典题目. htt ...

  9. Memcached 集群环境Java客户端

    Memcached 集群环境Java客户端 学习了: http://blog.csdn.net/zhouzhiwengang/article/details/53154112 http://guazi ...

  10. Windows下使用静态库

    开发工具 vs2010 1.新建win32控制台应用程序 2.将静态库的头文件包括在程序中并手动链接静态库(库文件和头文件都在根文件夹下) watermark/2/text/aHR0cDovL2Jsb ...