理解长短时记忆网络

2023-11-23 17:30
文章标签 理解 网络 短时记忆

本文主要是介绍理解长短时记忆网络,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

发表于2015年8月27日

循环神经网络
人类并不是每秒钟都重启他们的思维. 就像阅读这篇文章时, 你对每个字的理解都基于对前面一系列字的理解.你并不是把已知的信息都抛弃然后从头开始思考. 人类的思维是具有连续性的.

传统的神经网络没有连续性, 这看起来是一个重大的缺陷. 例如, 你想对电影发生的事件类型进行分类. 传统神经网络无法通过电影中先前事件的经验去推理后面事件的类型。

循环神经网络就是为解决这个问题而产生的.循环神经网络是由网络循环组成, 允许信息在网络里持续传递.
Recurrent Neural Networks have loops.
循环神经网络

在上图中, 一组神经网络A有输入Xt和输出ht. 循环过程可以将信息传递到下一步计算中去.

这些循环使神经网络看起来有点神秘。 但是,如果您再想一想,就会发现它们与普通的神经网络并没有什么不同。 循环神经网络可以包括了同一网络的多个副本,每个副本都将消息传递给后继者。 想一想如果展开循环会发生什么:
在这里插入图片描述
展开的循环神经网络

上图中的链条形状揭示了循环神经网络与序列和列表是密切相关的. 循环神经网络的架构本质上就与序列和列表数据而生的.

循环神经网络的确落地应用了. 近年来, 循环神经网络在解决很多问题上都取得了显著的成功, 例如语音识别, 语言建模, 翻译, 图像描述等, 应用的场景还在不断增加. 这里就不讨论循环神经网络种种令人惊讶的特性了, 大家可以到 Andrej Karpathy的博客"The Unreasonable Effectiveness of Recurrent Neural Networks"去看. 但循环神经网络真的很棒.

LSTM是取得这一系列成功的关键, 它是一种非常特殊的循环神经网络, , 在许多任务上都超过标准版的循环神经网络. 几乎所有循环神经网络取得成果都是应用LSTM. 这篇文章正是要探索LSTM的原理.

长时依赖问题
RNN吸引人的地方之一是它能够将之前的信息与当前的任务联系起来, 例如, 之前的视频帧可以用作理解当前视频帧的内容. 如果RNN可以做到这一点, 它将是非常有用的. 但它可以吗? 这需要看情况.

有时, 我们需要使用最近的信息来执行当前的任务. 例如, 一个语言模型试图去通过之前的字词去预测下一个字. 如果我们尝试去预测 “the clouds are in the sky,” 中的最后一个字, 我们不需要任何进一步的上下文—非常明显下一个字就是"sky". 在这种情况, 相关信息和需要预测位置的差距很小, RNN是可以学会使用过去信息的.如下图中, X0, X1 和h3.

在这里插入图片描述
但是还有些场景中我们需要更多的上下文. 考虑尝试预测下面这段文字的最后一个字 “I grew up in France… I speak fluent French.” 最近的信息提示下一个词很可能是一种语言的名字, 但如果我们想要缩小语言的可选范围, 我们需要从最后面追溯到"France"这个上下文. 相关信息与要预测位置的距离可能非常大. 如下图中, X0, X1和ht+1.
不幸的是, 随着差距的增大, RNN变得不能学习到相关的信息.
在这里插入图片描述
In theory, RNNs are absolutely capable of handling such “long-term dependencies.” A human could carefully pick parameters for them to solve toy problems of this form. Sadly, in practice, RNNs don’t seem to be able to learn them. The problem was explored in depth by Hochreiter (1991) [German] and Bengio, et al. (1994), who found some pretty fundamental reasons why it might be difficult.

Thankfully, LSTMs don’t have this problem!
从理论上讲,RNN绝对有能力处理这种“长时依赖关系”。 人类可以为RNN仔细选择参数以解决这种初级问题。 可悲的是,在实践中,RNN似乎无法学习它们。 Hochreiter(1991)[German]和Bengio等人对此问题进行了深入探讨。 (1994年),他们发现了为什么RNN很难实现的根本原因。

幸运的是,LSTM没有这个问题!

原文地址:
http://colah.github.io/posts/2015-08-Understanding-LSTMs/

这篇关于理解长短时记忆网络的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/419579

相关文章

如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解

《如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别详解》:本文主要介绍如何通过海康威视设备网络SDK进行Java二次开发摄像头车牌识别的相关资料,描述了如何使用海康威视设备网络SD... 目录前言开发流程问题和解决方案dll库加载不到的问题老旧版本sdk不兼容的问题关键实现流程总结前言作为

深入理解Apache Airflow 调度器(最新推荐)

《深入理解ApacheAirflow调度器(最新推荐)》ApacheAirflow调度器是数据管道管理系统的关键组件,负责编排dag中任务的执行,通过理解调度器的角色和工作方式,正确配置调度器,并... 目录什么是Airflow 调度器?Airflow 调度器工作机制配置Airflow调度器调优及优化建议最

一文带你理解Python中import机制与importlib的妙用

《一文带你理解Python中import机制与importlib的妙用》在Python编程的世界里,import语句是开发者最常用的工具之一,它就像一把钥匙,打开了通往各种功能和库的大门,下面就跟随小... 目录一、python import机制概述1.1 import语句的基本用法1.2 模块缓存机制1.

深入理解C语言的void*

《深入理解C语言的void*》本文主要介绍了C语言的void*,包括它的任意性、编译器对void*的类型检查以及需要显式类型转换的规则,具有一定的参考价值,感兴趣的可以了解一下... 目录一、void* 的类型任意性二、编译器对 void* 的类型检查三、需要显式类型转换占用的字节四、总结一、void* 的

深入理解Redis大key的危害及解决方案

《深入理解Redis大key的危害及解决方案》本文主要介绍了深入理解Redis大key的危害及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着... 目录一、背景二、什么是大key三、大key评价标准四、大key 产生的原因与场景五、大key影响与危

SSID究竟是什么? WiFi网络名称及工作方式解析

《SSID究竟是什么?WiFi网络名称及工作方式解析》SID可以看作是无线网络的名称,类似于有线网络中的网络名称或者路由器的名称,在无线网络中,设备通过SSID来识别和连接到特定的无线网络... 当提到 Wi-Fi 网络时,就避不开「SSID」这个术语。简单来说,SSID 就是 Wi-Fi 网络的名称。比如

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

深入理解C++ 空类大小

《深入理解C++空类大小》本文主要介绍了C++空类大小,规定空类大小为1字节,主要是为了保证对象的唯一性和可区分性,满足数组元素地址连续的要求,下面就来了解一下... 目录1. 保证对象的唯一性和可区分性2. 满足数组元素地址连续的要求3. 与C++的对象模型和内存管理机制相适配查看类对象内存在C++中,规

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

Linux 网络编程 --- 应用层

一、自定义协议和序列化反序列化 代码: 序列化反序列化实现网络版本计算器 二、HTTP协议 1、谈两个简单的预备知识 https://www.baidu.com/ --- 域名 --- 域名解析 --- IP地址 http的端口号为80端口,https的端口号为443 url为统一资源定位符。CSDNhttps://mp.csdn.net/mp_blog/creation/editor