当前位置: 首页 > 编程日记 > 正文

图解LSTM与GRU单元的各个公式和区别

640?wx_fmt=png

作者 | Che_Hongshu

来源 | AI蜗牛车 (ID: AI_For_Car)

因为自己LSTM和GRU学的时间相隔很远,并且当时学的也有点小小的蒙圈,也因为最近一直在用lstm,gru等等,所以今天没事好好缕了一下,接下来跟着我一起区分并且每个单元全都非常深刻的记一下把。

一、LSTM


这里我们只看内部结构

640?wx_fmt=png

公式为


640?wx_fmt=png

看内部结构的话为


640?wx_fmt=png

接下来是我的理解和记忆方法以及区分。自己对上面的图片进行了编辑,单元和公式一一对应颜色,方便自己和他人观看。


640?wx_fmt=png


一张图清晰地搞定LSTM。


个人理解简短的说明这张图。

  1. 首先输入为三个值,一个是此刻的输入值x,另一个是上一时刻的状态值c,最后一个是上一个单元的输出h

  2. 最终输出为两个值,一个是此刻产生的状态值c和输出h

  3. 首先是输入值x和上一个单元的输出h,分别两个输入都有对应的权重,在经过sigmoid激活作用下得到0-1的值,也就是三个门值

  4. 和3差不多,依然还是 输入值x和上一个单元的输出h,两个值有对应的权重和3中的描述一模一样,唯一的区别在于有一个tanh激活函数,最后相当于得到此时输入得到的当前state,也就是new memory。这里可以理解为输入其实是近似的x和h的concatenate操作,经过正常的神经网络的权重,最后经过tanh激活函数得到此时输入的当前的state,x相当于此刻的输入,h为前面历史的输入,合在一起就是整个序列的信息,也就是此时的new memory。

  5. 最后输出的state,也就是final memory的计算利用了input gate和forget gate,output gate只与输出有关。final memory的计算自然而然和上一步算得此时的记忆state相关并且和上一个输出的final memory相关,故为忘记门和Ct-1的乘积加上上一步算出来的此时单元的C和输入门的乘积为最终的state(故 c)

  6. 输出门只与输出相关,最终的输出h为输出门乘以tanh(c)

致此这里LSTM 梳理完毕


二、GRU


内部结构和公式


640?wx_fmt=png

640?wx_fmt=png

自己对上面的图片进行了编辑,单元和公式一一对应颜色,方便自己和他人观看。
.

640?wx_fmt=png

  1. 这里GRU只有两个gate,一个是reset gate, 一个是update gate, update gate的作用类似于input gate和forget gate,(1-z)相当于input gate, z相当于forget gate。

  2. 输入为两个值,输出也为一个值,输入为输入此时时刻值x和上一个时刻的输出ht-1, 输出这个时刻的输出值ht

  3. 首先依然是利用xt和ht-1经过权重相乘通过sigmoid,得到两个0-1的值,即两个门值。

  4. 接下来这里有一些不同,并且经常容易搞混淆。对于LSTM来说依然还是xt与ht-1分别权重相乘相加,之后经过tanh函数为此时的new memory,而GRU为在这个计算过程中,在ht-1与权重乘积之后和reset gate相乘,之后最终得到new memory,这里的reset gate的作用为让这个new memory包括之前的ht-1的信息的多少。

  5. 接下来和lstm得到final memory其实一样,只是GRU只有两个输入,一个输出,其实这里h即输出也是state,就是说GRU的输出和state是一个值,所以4步骤得到的是new h,这步骤得到的是final h,通过update gate得到。


三、细数LSTM与GRU之间的不同


3.1 结构上


  1. lstm为三个输入xt,ht-1, ct-1,两个输出。gru为两个输入xt, ht-1,一个输出ht,输出即state。

  2. lstm有三个门,输入输出忘记门。gru有两个门,reset,update 门。

  3. update 类似于 input gate和forget gate


3.2 功能上


  1. GRU参数更少,训练速度更快,相比之下需要的数据量更少

  2. 如果有足够的数据,LSTM的效果可能好于GRU


Reference


https://blog.csdn.net/sinat_33741547/article/details/82821782
https://towardsdatascience.com/understanding-gru-networks-2ef37df6c9be
https://medium.com/mlrecipies/deep-learning-basics-gated-recurrent-unit-gru-1d8e9fae7280


(*本文为 AI 科技大本营转载文章,转载请联系原作者)

福利时刻



入群参与每周抽奖~

扫码添加小助手,回复:大会,加入福利群,参与抽奖送礼!

640?wx_fmt=jpeg

大会优惠票限时抢购中!此外,伯克利大学名师精髓课程移师北京。《动手学深度学习》作者、亚马逊首席科学家李沐线下亲授「深度学习实训营」,免费GPU资源,现场还将限量赠送价值85元的配套书籍一本,先到先得。原价1099元,限时专享CSDN 独家福利价199元识别海报二维码,即刻购票~

640?wx_fmt=jpeg

推荐阅读

  • 字节跳动李航:自学机器学习,研究AI三十载,他说AI发展或进入平缓期

  • 2019 AI ProCon日程出炉:Amazon首席科学家李沐亲授「深度学习

  • 读完ACL 2019录取的30篇知识图谱论文,我发现了这5点趋势

  • 如何用知识图谱挖掘商业数据背后的宝藏?

  • 腾讯AI开源框架Angel 3.0重磅发布:超50万行代码,打造全栈机器学习平台

  • 教你阅读CPython的源码

  • 安装Python/PyCharm,入门级爬虫案例 | Mac下玩转Python

  • Python冷知识,不一样的技巧带给你不一样的乐趣

  • 互联网人职业发展之路:三年升高工,七年做架构,十年送外卖

  • IT公司老板落水,各部门员工怎么救?

640?wx_fmt=png

你点的每个“在看”,我都认真当成了喜欢

相关文章:

iphone越狱神器

前阵子刚刚换了iphone5,老婆的4就留给我了。一到手就决定越狱,无意中发现了一款越狱神器:爱思助手http://www.i4.cn/ 确实很好用转载于:https://blog.51cto.com/shanks/1306423

json11库的使用

JSON(JavaScript Object Notation)是一种轻量级的文本数据交换格式,易于让人阅读。同时也易于机器解析和生成。尽管JSON是Javascript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。JSON解析器和JSON库支持许…

覆盖10亿设备,月活2亿,快应用要取代App?

作者 | 伍杏玲 来源 | CSDN(ID:CSDNnews) 2017 年 1 月 9 日,微信小程序横空出世,紧接着支付宝小程序、百度智能小程序、今日头条小程序、12 大厂商联盟的快应用等布局小程序。自此,小程序迅速改变国内移…

跨域的四种方式

本文主要是关于跨域的几种方式,关于什么是跨域这里就不多说了,写这个也是为了记住一些知识点的。 一. jsonp jsonp的跨域方式很容易理解,页面的的每一个script标签浏览器都会发送get请求获取对应的文本资源,获取到了之后&#xff…

使用模式创建一个面向服务的组件中间件

引言 在本文中,您将了解面向服务的组件中间件在用于资源有限的语音设备时,在设计阶段所应用的模式。它涵盖了项目的问题上下文,并被看成是一组决定因素,是对相关体系结构远景的一个简要概括。您还会得到一份描述,其中介…

OpenCV代码提取:遍历指定目录下指定文件的实现

OpenCV 3.1之前的版本,在contrib目录下有提供遍历文件的函数,用起来比较方便。但是在最新的OpenCV 3.1版本给去除掉了。为了以后使用方便,这里将OpenCV 2.4.9中相关的函数给提取了出来,适合在Windows 64bits上使用。directory.hpp…

姚班三兄弟3万块创业八年,旷视终冲刺港股

作者 | 余洋洋 杨健楷编辑 | 张丽娟来源 | CV智识(ID:CVAI2019)旷视此次 IPO 或将成为整个 AI 行业的信号,不只是“ 四小龙”的另外三家——商汤、依图、云从,整个 AI 行业的创业公司都将受到影响。8月25日晚,AI 独角兽…

Java类加载器详解

Java虚拟机中的类加载有三大步骤:,链接,初始化.其中加载是指查找字节流(也就是由Java编译器生成的class文件)并据此创建类的过程,这中间我们需要借助类加载器来查找字节流. Java虚拟…

linux svn客户端的使用

一下内容转载于:http://blog.chinaunix.net/space.php?uid22976768&doblog&id1640924。这个总结的很好~ windows下的TortoiseSVN是资源管理器的一个插件,以覆盖图标表示文件状态,几乎所以命令都有图形界面支持,比较好用&…

C++中vector的使用

向量std::vector是一种对象实体,能够容纳许多各种类型相同的元素,包括用户自定义的类,因此又被称为序列容器。与string相同,vector同属于STL(Standard Template Library)中的一种自定义的数据类型,可以广义上认为是数组…

说出来你可能不信,现在酒厂都在招算法工程师

导语:虽然夏日已过,但人们喝啤酒的热情还在持续高涨。不过随着大众的追求和理念提升,对于啤酒的要求也越来越高,比如逐渐兴起的精酿之风,都在印证人们在啤酒的口感和风味上,拥有更加「苛刻」的要求。那么这…

「前端面试题系列7」Javascript 中的事件机制(从原生到框架)

前言 这是前端面试题系列的第 7 篇,你可能错过了前面的篇章,可以在这里找到: 理解函数的柯里化ES6 中箭头函数的用法this 的原理以及用法伪类与伪元素的区别及实战如何实现一个圣杯布局?今日头条 面试题和思路解析最近&#xff0c…

安装Ecshop首页出现报错:Only variables should be passed by referen

出现下面这就话: Strict Standards: Only variables should be passed by reference in D:\wamp\ecshop\includes\cls_template.php on line 406 第406行:$tag_sel array_shift(explode( , $tag)); 解决办法 1 5.3以上版本的问题,应该也和配…

KDD 2019高维稀疏数据上的深度学习Workshop论文汇总

作者 | 深度传送门来源 | 深度传送门【导读】本文是“深度推荐系统”专栏的第九篇文章,这个系列将介绍在深度学习的强力驱动下,给推荐系统工业界所带来的最前沿的变化。本文简要总结一下阿里妈妈在 KDD 2019 上组织的第一届面向高维稀疏数据的深度学习实…

C++中fstream的使用

C中处理文件类似于处理标准输入和标准输出。类ifstream、ofstream和fstream分别从类 istream、ostream和iostream派生而来。作为派生的类,它们继承了插入和提取运算符(以及其他成员函数),还有与文件一起使用的成员和构造函数。可将…

浅谈Disruptor

Disruptor是一个低延迟(low-latency),高吞吐量(high-throughput)的事件发布订阅框架。通过Disruptor,可以在一个JVM中发布事件,和订阅事件。相对于Java中的阻塞队列(ArrayBlockingQueue,LinkedBlockingQueue),Disruptor的优点是性…

web 服务发布注意事项

1、在发布的时候首先查看服务器对外开放的端口,如果没有最好和客户进行沟通需要开放那些对应的端口,要不外界无法访问发布的站点。 2、在oracle需要远程控制服务器的数据库的时候需要开发1521端口。转载于:https://www.cnblogs.com/jzm53550629/p/337563…

OpenCV代码提取:resize函数的实现

之前在http://blog.csdn.net/fengbingchun/article/details/17335477 中有过对cv::resize函数五种插值算法的介绍。这里将OpenCV3.1中五种插值算法的代码进行了提取调整。支持N通道uchar和float类型。经测试,与OpenCV3.1结果完全一致。实现代码resize.hpp&#xff1…

IBM重磅开源Power芯片指令集?国产芯迎来新机遇?

整理 | 郭芮出品 | CSDN(ID:CSDNnews)自去年 IBM 以 340 亿美元收购了 Linux 巨头红帽之后,这家 107 岁的蓝色巨人终于又在开源方面有大动作了!近日在 Linux 基金会开源峰会上,IBM 宣布向开源社区提供 Powe…

构造函数不能为虚/重载函数总结

构造函数不能为虚/重载函数总结 作为一个类,他最基础的成员函数就要数构造函数了。这里我们先探讨一下构造函数为什么不能是虚函数。 在解决这个问题之前,要先明白类中函数的调用方式。一个类的函数共用一个函数空间,因此在实例化的对象中是不…

通过data:image/png;base64把图片直接写在src里

2019独角兽企业重金招聘Python工程师标准>>> 关于用base64存储图片 网页上有些图片的src或css背景图片的url后面跟了一大串字符,比如:data:image/png;base64, iVBORw0KGgoAAAANSUhEUgAAAAEAAAAkCAYAAABIdFAMAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZS…

算力“竞速”,企业AI落地的当务之急

充足的算力资源,在数据量持续增长及算法持续复杂化的前提下,无疑是保障人工智能应用落地效果的关键。软件定义算力——打造AI转型最佳实践8月2日,第四范式联合英特尔共同举办了AI实践者之声夏令营活动。第四范式基础架构负责人刘一鸣以《软件…

内存检测工具Dr. Memory的使用

Dr. Memory是一个内存调试工具,它是一个开源免费的内存检测工具,它能够及时发现内存相关的编程错误,比如未初始化访问、内存非法访问、数组越界读/写、以及内存泄露等。它可以在Linux、Windows、Mac OS和Android操作系统上使用。关于Dr. Memo…

手把手教你如何新建scrapy爬虫框架的第一个项目(下)

前几天小编带大家学会了如何在Scrapy框架下创建属于自己的第一个爬虫项目(上),今天我们进一步深入的了解Scrapy爬虫项目创建,这里以伯乐在线网站的所有文章页为例进行说明。在我们创建好Scrapy爬虫项目之后,会得到上图…

.net完整的图文验证

摘自:http://blog.csdn.net/durongjian/article/details/4336380 一、创建ValidaeCode类库工程: 1、创建ValidaeCode类库工程,在[解决胜方案资源管理器]面板中,右键单击[ValidateCode]节点,并选择[属性]命令。 2、单击[属性]命令&…

Tesseract-OCR 3.04在Windows7 vs2013上编译过程

从https://github.com/tesseract-ocr/tesseract下载最新源码,commit id: 86acff5, 2016.06.07. 里面有个vs2010目录,用vs2013打开tesseract.sln。Tesseract依赖图像库Leptonica,Leptonica的编译过程可以参考http://blog.csdn.net/fengbingchun/article/d…

【Laravel-海贼王系列】第九章, Events 功能解析

Events 注册 框架如何在启动的时候加载注册的事件?框架如何触发事件?1,先在容器中注册 events 的全局对象。 Application 构造函数中对 events 进行注册代码 protected function registerBaseServiceProviders(){$this->register(new EventServiceProvider($th…

触类旁通,经典面试题最长公共子序列应该这么答

作者 | labuladong来源 | labuladong(ID:labuladong)【导读】最长公共子序列(Longest Common Subsequence,简称 LCS)是一道非常经典的面试题目,因为它的解法是典型的二维动态规划,大部分比较困难的字符串问…

两分公支的IPSec***流量走总部测试

一.概述:在论坛上看到一个朋友发帖希望两个分支的IPSEC ***流量经过总部,如是搭建拓扑测试了一下,因为跑两个VM版的ASA8.42机器性能不过,所以用PIX8.0来代替ASA,应该主要配置都跟ASA8.0差不多。二.基本思路:A.两个分支…

OpenCV代码提取:cvtColor函数的实现

OpenCV中的cvtColor函数包括了很多颜色格式之间的转换,用起来很方便,这里对cvtColor函数的code进行了提取,经测试,和OpenCV3.1结果完全一致。实现代码cvtColor.hpp:// fbc_cv is free software and uses the same licence as Open…