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. python 面向对象 继承

    什么是继承 继承表达的是一种”是“的关系,比如人是动物 继承是一种创建新类的方式,在python中,新建的类可以继承一个或多个父类,父类又可称为基类或超类,新建的类称为派生类或子类 继承是基于抽象的结 ...

  2. C#调用带结构体指针的C Dll的方法

    在C#中调用C(C++)类的DLL的时候,有时候C的接口函数包含很多参数,而且有的时候这些参数有可能是个结构体,而且有可能是结构体指针,那么在C#到底该如何安全的调用这样的DLL接口函数呢?本文将详细 ...

  3. 电源管理ACPI、及APM、GNU/Linux系统下的相应命令使用

    /*********************************************************************  * Author  : Samson  * Date   ...

  4. lower_bound与upper_bound

    昨天一道题目用了lower_bound,大致了解了lower_bound指的是第一个>=x的位置.但是之前对于upper_bound有误解,其实upper_bound指的是第一个>x的位置 ...

  5. Leetcode--easy系列9

    #198 House Robber You are a professional robber planning to rob houses along a street. Each house ha ...

  6. 第九章 TCP和UDP同一时候用复用一个port实现一个回射server

    #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> #include &l ...

  7. Android 仿 窗帘效果 和 登录界面拖动效果 (Scroller类的应用) 附 2个DEMO及源代码

    在android学习中,动作交互是软件中重要的一部分.当中的Scroller就是提供了拖动效果的类,在网上.比方说一些Launcher实现滑屏都能够通过这个类去实现.以下要说的就是上次Scroller ...

  8. 图像手工画效果【QT+OpenCV】

    效果例如以下 [木雕]

  9. 自己封装js组件 - 中级中高级

    接着做关于alert组件的笔记 怎么又出来个中高级呢 对没错 就是出一个中高级来刷流量呵呵呵,但是中高级也不是白叫的 这次主要是增加了widget类,增加了自己绑定的事件和触发事件的方法!这么做是为什 ...

  10. MDNS DDoS 反射放大攻击——攻击者假冒被攻击者IP向网络发送DNS请求,域名为“_services._dns-sd._udp.local”,这将引起本地网络中所有提供服务的主机都向被攻击者IP发送DNS响应,列举网络中所有服务

    MDNS Reflection DDoS 2015年3月,有报告叙述了mDNS 成为反射式和放大式 DDoS 攻击中所用媒介的可能性,并详述了 mDNS 反射式攻击的原理和相应防御方式.Q3,Akam ...