理解长短时记忆网络

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

相关文章

深入理解Mysql OnlineDDL的算法

《深入理解MysqlOnlineDDL的算法》本文主要介绍了讲解MysqlOnlineDDL的算法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小... 目录一、Online DDL 是什么?二、Online DDL 的三种主要算法2.1COPY(复制法)

Python实现简单封装网络请求的示例详解

《Python实现简单封装网络请求的示例详解》这篇文章主要为大家详细介绍了Python实现简单封装网络请求的相关知识,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录安装依赖核心功能说明1. 类与方法概览2.NetHelper类初始化参数3.ApiResponse类属性与方法使用实

Debian 13升级后网络转发等功能异常怎么办? 并非错误而是管理机制变更

《Debian13升级后网络转发等功能异常怎么办?并非错误而是管理机制变更》很多朋友反馈,更新到Debian13后网络转发等功能异常,这并非BUG而是Debian13Trixie调整... 日前 Debian 13 Trixie 发布后已经有众多网友升级到新版本,只不过升级后发现某些功能存在异常,例如网络转

Python开发简易网络服务器的示例详解(新手入门)

《Python开发简易网络服务器的示例详解(新手入门)》网络服务器是互联网基础设施的核心组件,它本质上是一个持续运行的程序,负责监听特定端口,本文将使用Python开发一个简单的网络服务器,感兴趣的小... 目录网络服务器基础概念python内置服务器模块1. HTTP服务器模块2. Socket服务器模块

Go语言网络故障诊断与调试技巧

《Go语言网络故障诊断与调试技巧》在分布式系统和微服务架构的浪潮中,网络编程成为系统性能和可靠性的核心支柱,从高并发的API服务到实时通信应用,网络的稳定性直接影响用户体验,本文面向熟悉Go基本语法和... 目录1. 引言2. Go 语言网络编程的优势与特色2.1 简洁高效的标准库2.2 强大的并发模型2.

深入理解go中interface机制

《深入理解go中interface机制》本文主要介绍了深入理解go中interface机制,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学... 目录前言interface使用类型判断总结前言go的interface是一组method的集合,不

Java Spring的依赖注入理解及@Autowired用法示例详解

《JavaSpring的依赖注入理解及@Autowired用法示例详解》文章介绍了Spring依赖注入(DI)的概念、三种实现方式(构造器、Setter、字段注入),区分了@Autowired(注入... 目录一、什么是依赖注入(DI)?1. 定义2. 举个例子二、依赖注入的几种方式1. 构造器注入(Con

深入理解Go语言中二维切片的使用

《深入理解Go语言中二维切片的使用》本文深入讲解了Go语言中二维切片的概念与应用,用于表示矩阵、表格等二维数据结构,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧... 目录引言二维切片的基本概念定义创建二维切片二维切片的操作访问元素修改元素遍历二维切片二维切片的动态调整追加行动态

Linux中压缩、网络传输与系统监控工具的使用完整指南

《Linux中压缩、网络传输与系统监控工具的使用完整指南》在Linux系统管理中,压缩与传输工具是数据备份和远程协作的桥梁,而系统监控工具则是保障服务器稳定运行的眼睛,下面小编就来和大家详细介绍一下它... 目录引言一、压缩与解压:数据存储与传输的优化核心1. zip/unzip:通用压缩格式的便捷操作2.

从原理到实战深入理解Java 断言assert

《从原理到实战深入理解Java断言assert》本文深入解析Java断言机制,涵盖语法、工作原理、启用方式及与异常的区别,推荐用于开发阶段的条件检查与状态验证,并强调生产环境应使用参数验证工具类替代... 目录深入理解 Java 断言(assert):从原理到实战引言:为什么需要断言?一、断言基础1.1 语