NLP之LSTM原理剖析
文章目录
- 背景
- simpleRNN的局限性
- LSTM
- 手写一下sigmoid例子
- 支持长记忆的神经网络
- 解读3重门
背景
SimpleRNN有一定局限性,
-
图片上的文字内容:
- 图片标题提到“SimpleRNN是一种基础模型。它用于解决序列型问题,其中的每一步的输出会影响到下一步的结果。图中的公式和结构图都展示了这种关系。”
- 下面给出了四行伪代码,描述了SimpleRNN的计算方式。简化为以下形式:
- out1和ht1是通过输入x1、前一时刻的状态h(t-1)、权重w1、u1以及偏置项bias进行某种激活函数的计算得到的。
- out2和ht2是通过输入x2、前一时刻的状态ht1、权重w2、u2以及偏置项bias进行计算得到的。
- out3和ht3是通过输入x3、前一时刻的状态ht2、权重w3、u3以及偏置项bias进行计算得到的。
- out4和ht4的计算方式未完整给出,但可以推测其与之前的计算方式类似。
-
图片中的图示内容:
- 图中展示了一个序列型的网络结构,其中每个时间步都有一个输入和一个输出。
- 从左到右,我们可以看到数据是如何流动的。每个时间步的输入都被标记为“输入”,每个时间步的输出被标记为“输出”,并且每个时间步之间都有一个状态“状态”。
- 图中还展示了这些状态是如何从一个时间步传递到下一个时间步的,表现了RNN的“记忆”特性。
-
解读SimpleRNN的工作机制:
- SimpleRNN在每个时间步都接受一个输入,并产生一个输出。但与一般的神经网络不同,SimpleRNN还维护一个“状态”,这个状态从一个时间步传递到下一个时间步。
- 这个状态可以被视为网络的“记忆”,它携带了过去的信息,并用于影响当前时间步的计算。
- 伪代码展示了每个时间步输出和状态的计算方法,这两者都依赖于当前的输入、前一时间步的状态、权重和偏置。
-
识别图中的位置:
- 在图中,“我、爱、祖国”被分别标注在每一个时间步的上方。它们与每个时间步的“计算”模块相连接。
- “记忆”则被标注在每个时间步的中心,并在时间步之间传递。
-
解释它们在SimpleRNN中的角色:
- “我、爱、祖国”:这些词分别代表每个时间步的输入。在这个例子中,我们可以认为是在处理一个文本序列,即“我 爱 祖国”。在每一个时间步,“计算”模块会接收这些词作为输入。
- “记忆”:这代表SimpleRNN的内部状态或“隐藏状态”。它会在时间步之间传递,并保存之前时间步的信息。在每一个时间步,“记忆”会被更新,并用于下一个时间步的计算。
所以,答案是“我、爱、祖国”是输入,而“记忆”代表SimpleRNN的内部状态。如果您有其他问题或需要进一步的澄清,请随时告诉我。
简而言之,图片展示了SimpleRNN如何在每个时间步接受输入,并根据前一时间步的“记忆”产生输出的过程。
simpleRNN的局限性
-
什么是神经网络和simpleRNN?
- 神经网络是一种用于数据处理和模式识别的计算模型。它们通常用于诸如图像识别、自然语言处理等任务。
- simpleRNN(简单循环神经网络)是一种特殊类型的神经网络,用于处理序列数据,比如文本或时间序列数据。
-
simpleRNN的主要局限性以及简短解释
-
梯度消失和梯度爆炸问题: 在处理长序列时,simpleRNN很难学习到早期信息的重要性,这主要是因为梯度(即用于更新模型权重的信号)会随时间减小(消失)或增大(爆炸)。
-
短期记忆: simpleRNN通常只能记住短期的信息,这意味着它不擅长处理具有长期依赖关系的任务。
-
计算效率: 尽管结构相对简单,但simpleRNN在处理非常长的序列时可能会变得计算密集和低效。
-
过拟合: 因为模型较简单,所以它容易过拟合,即在训练数据上表现很好,但在未见过的数据上表现差。
-
这些是简单循环神经网络(simpleRNN)的主要局限性。
LSTM
手写一下sigmoid例子
import numpy as np
import matplotlib.pyplot as pltx = np.arange(-5.0, 5.0, 0.1)
print(x)
y = 1 / (1 + np.exp(-x))
print(y)
plt.plot(x, y)
plt.show()
支持长记忆的神经网络
解读并给出图片中所示网络结构的流程解释。
-
识别图中的关键部分:
- A: 网络的核心计算单元。
- X t − 1 X_{t-1} Xt−1, X t X_t Xt, X t + 1 X_{t+1} Xt+1: 输入序列中的各个时间步。
- h t − 1 h_{t-1} ht−1, h t h_t ht, h t + 1 h_{t+1} ht+1: 对应时间步的输出或隐藏状态。
- “tanh”激活函数,加法和乘法运算。
-
为每一部分提供描述:
- A: 它是网络的核心部分,负责进行所有的计算。接收输入和前一个时间步的隐藏状态,输出当前时间步的隐藏状态。
- X t − 1 X_{t-1} Xt−1, X t X_t Xt, X t + 1 X_{t+1} Xt+1: 这些是顺序输入到网络中的数据,分别对应于连续的时间步。
- h t − 1 h_{t-1} ht−1, h t h_t ht, h t + 1 h_{t+1} ht+1: 这些是网络在各个时间步的输出或隐藏状态。它们包含了之前时间步的信息,并在连续的时间步中传递。
- “tanh”是一种激活函数,用于非线性转换。
-
描述整个流程:
- 开始于时间步t-1,输入 X t − 1 X_{t-1} Xt−1和隐藏状态 h t − 2 h_{t-2} ht−2被提供给单元A。
- 在单元A内,进行了乘法、加法和“tanh”激活函数的计算。
- 输出结果为隐藏状态 h t − 1 h_{t-1} ht−1,这个状态同时也是这一时间步的输出,并且会被传递到下一个时间步。
- 对于时间步t,该过程重复,输入 X t X_t Xt和隐藏状态 h t − 1 h_{t-1} ht−1被提供给单元A,输出为 h t h_t ht。
- 同样的流程继续进行,对于时间步t+1,输入为 X t + 1 X_{t+1} Xt+1和隐藏状态 h t h_t ht,输出为 h t + 1 h_{t+1} ht+1。
整体而言,这是一个循环神经网络(RNN)的简化表示,用于处理序列数据。每个时间步接收一个输入和前一个时间步的隐藏状态,产生一个输出,并将该输出传递到下一个时间步。
解读3重门
上图中,i=input o=output f=forget
这是一个展示长短时记忆(Long Short-Term Memory, LSTM)网络中某一单元的计算过程的图片。
1. 描述图片的主要部分
- 图片标题:“三重门机制”。
- 图中给出了几个公式,描述了LSTM中的输入门(i)、遗忘门(f)和输出门(o)的计算,以及记忆细胞的更新方式。
- 图片下方展示了LSTM单元中数据流的方向。
2. 解释LSTM的工作原理
- LSTM设计用于解决梯度消失和梯度爆炸的问题,这在传统的RNN中是一个挑战。
- LSTM通过三个门(输入门、遗忘门和输出门)和一个记忆细胞来工作,从而实现长期记忆。
3. 根据图片内容提供额外的补充和解读
- 输入门(i): 控制新输入信息的量。计算公式为
i = sigmoid(wt * xt + ut * ht-1 + b)
。 - 遗忘门(f): 决定哪些信息从记忆细胞中被抛弃或遗忘。计算公式为
f = sigmoid(wt * xt + ut * ht-1 + b)
。 - 输出门(o): 控制从记忆细胞到隐藏状态的输出信息量。计算公式为
o = sigmoid(wt * xt + ut * ht-1 + b)
。 - ˜C:当前输入信息的候选值。计算公式为
˜C = tanh(wt@xt + ht-1@wh + b)
。 - Ct: 更新的记忆细胞。计算公式为
Ct = f * Ct-1 + i * ˜C
,表示遗忘门选择遗忘的信息和输入门选择的新信息的结合。 - ht: 当前的隐藏状态。计算公式为
ht = o * tanh(Ct)
。
这些门的作用使LSTM能够学习和记住长期的依赖关系,从而在各种序列预测任务中取得了成功。
让我们先逐步解读LSTM的计算过程,然后将其与传统RNN进行比较。
1. LSTM的计算过程
a. 输入:
- x t xt xt:当前时间步的输入。
- $ht-1$:前一时间步的隐藏状态。
- C t − 1 Ct-1 Ct−1:前一时间步的记忆细胞。
b. 遗忘门(f):
计算哪些先前的记忆需要被保留或遗忘。
f = s i g m o i d ( w t ∗ x t + u t ∗ h t − 1 + b ) f = sigmoid(wt * xt + ut * ht-1 + b) f=sigmoid(wt∗xt+ut∗ht−1+b)
c. 输入门(i) 和 记忆候选值(˜C):
决定更新哪些新的记忆。
i = s i g m o i d ( w t ∗ x t + u t ∗ h t − 1 + b ) i = sigmoid(wt * xt + ut * ht-1 + b) i=sigmoid(wt∗xt+ut∗ht−1+b)
˜ C = t a n h ( w t @ x t + h t − 1 @ w h + b ) ˜C = tanh(wt@xt + ht-1@wh + b) ˜C=tanh(wt@xt+ht−1@wh+b)
d. 更新记忆细胞(Ct):
结合遗忘门的输出和输入门的输出,更新记忆细胞。
C t = f ∗ C t − 1 + i ∗ ˜ C Ct = f * Ct-1 + i * ˜C Ct=f∗Ct−1+i∗˜C
e. 输出门(o):
计算下一个隐藏状态应该是什么。
o = s i g m o i d ( w t ∗ x t + u t ∗ h t − 1 + b ) o = sigmoid(wt * xt + ut * ht-1 + b) o=sigmoid(wt∗xt+ut∗ht−1+b)
f. 计算隐藏状态(ht):
h t = o ∗ t a n h ( C t ) ht = o * tanh(Ct) ht=o∗tanh(Ct)
2. LSTM与传统RNN的区别
a. 记忆细胞与隐藏状态:
- LSTM: 有一个称为“记忆细胞”的附加状态,它可以存储跨多个时间步的信息。
- RNN: 只有一个隐藏状态。
b. 门机制:
- LSTM: 使用三个门(输入、输出和遗忘门)来控制信息的流动。
- RNN: 没有这些门,信息简单地在每个时间步被传递和变换。
c. 长期依赖:
- LSTM: 由于其门机制和记忆细胞,LSTM可以处理长期依赖,记住信息超过数百个时间步。
- RNN: 很难处理长期依赖,因为信息在每个时间步都会逐渐丢失或被稀释。
d. 梯度问题:
- LSTM: 设计来缓解梯度消失和爆炸问题。
- RNN: 更容易遭受梯度消失或梯度爆炸问题。
总结: 虽然LSTM和RNN都是递归神经网络的变体,但LSTM通过其门机制和记忆细胞设计,使其能够更好地处理长期依赖,而不受梯度消失或梯度爆炸问题的困扰。
内部结构:
相关文章:

NLP之LSTM原理剖析
文章目录 背景simpleRNN的局限性 LSTM手写一下sigmoid例子支持长记忆的神经网络解读3重门 背景 SimpleRNN有一定局限性, 图片上的文字内容: 图片标题提到“SimpleRNN是一种基础模型。它用于解决序列型问题,其中的每一步的输出会影响到下一步的结果。图…...
ESP32网络开发实例-Web方式配置WiFi连接
Web方式配置WiFi连接 文章目录 Web方式配置WiFi连接1、ESP Wi-Fi 管理器介绍2、软件准备3、硬件准备4、代码实现在本文中,我们将介绍如何实现在Web页面中配置ESP32的WiFi连接。 1、ESP Wi-Fi 管理器介绍 ESP32 将在启动时设置为热点模式 连接到充当 AP 的 ESP32 开发板。 在连…...

ElasticSearch 批量插入漏数据
项目场景: 项目中需要把Mysql数据同步到ElasticSearch中 问题描述 数据传输过程中数据不时出现丢失的情况,偶尔会丢失一部分数据,本地测试也无法复现,后台程序也没有报错,一到正式环境就有问题,很崩溃 这里是批量操…...

C++——类和对象之运算符重载
运算符重载 本章思维导图: 注:本章思维导图对应的xmind文件和.png文件都已同步导入至”资源“ 文章目录 运算符重载[toc] 1. 运算符重载的意义2. 函数的声明2.1 声明运算符重载的注意事项 3. 函数的调用4. const成员函数4.1 const成员函数的声明4.2 注意…...

第二阶段第一章——面向对象
前言 学习了这么久Python(呃其实也没多久差不多两周),可能有小伙伴说我废了,两周才学这么点,咋说呢,我曾经也是急于求成,做任何事情都是急于求成,比如我喜欢一个人我就想马上跟她在…...

Linux学习第33天:Linux INPUT 子系统实验(二):Linux 自带按键驱动程序的使用
Linux版本号4.1.15 芯片I.MX6ULL 大叔学Linux 品人间百味 思文短情长 本节笔记主要内容是学会如何使用Linux自带的按键驱动程序。 一、自带按键驱动程序源码简析 配置选项路径如下: -> Device Drivers ->…...

解决Visual Studio 2010 运行时屏幕一闪而过,无结果显示的问题
安装配置:Visual Studio 2010 软件安装教程(附下载链接)——计算机二级专用编程软件https://blog.csdn.net/W_Fe5/article/details/134218817?spm1001.2014.3001.5502 1、 我们在运行时会出现窗口一闪而过,这时候我们右键Test_1…...
C++(20):为[[nodiscard]]提供提示信息
C17中引入了[[nodiscard]]以对一些被忽略的函数返回值进行警告。 C(17):[[nodiscard]]编译属性_[[nodiscard]] c-CSDN博客 C20可以为[[nodiscard]]提供一个可选的提示信息 [[nodiscard("cant ignore")]] int fi() {return 1; }int main() {fi();return 0…...
hi3518ev200 从sd卡启动rootfs
板卡为 hisi 的 hi3518ev200,16M RAM,64M Flash。板卡不支持从SD卡启动,但是由于Flash空间有限,很多应用都放不下,因此考虑把 rootfs 放到 SD 卡中。先从 Flash 中启动 kernel,然后再加载 SD 卡中的 rootfs…...

[BUUCTF NewStar 2023] week5 Crypto/pwn
最后一周几个有难度的题 Crypto last_signin 也是个板子题,不过有些人存的板子没到,所以感觉有难度,毕竟这板子也不是咱自己能写出来的。 给了部分p, p是1024位给了922-101位差两头。 from Crypto.Util.number import * flag b?e 655…...

使用seldom编写http接口用例
在编写接口用例的过程中,针对一个接口,往往只是参数不同,那么参数化就非常有必要了。 seldom 中参数化的用法非常灵活,这里仅介绍file_data() 的N种玩法。 二维列表 当参数比较简单时可以试试下面的方式。 参数化数据 {"…...

Redis中Hash类型的命令
目录 哈希类型的命令 hset hget hexists hdel hkeys hvals hgetall hmget hlen hsetnx hincrby hincrbyfloat 内部编码 Hash类型的应用场景 作为缓存 哈希类型和关系型数据库的两点不同之处 缓存方式对比 Redis自身已经是键值对的结构了,Redis自身的键值对就…...
Java 函数式编程
1.Lambda 1.1 格式 JDK 从 1.8 版本开始支持 Lambda 表达式,通过 Lambda 表达式我们可以将一个函数作为参数传入方法中。在 JDK 1.8 之前,我们只能通过匿名表达式来完成类似的功能,但是匿名表达式比较繁琐,存在大量的模板代码&…...

类的成员函数总结
前言: 如果一个类中什么成员都没有,简称为空类。 空类中真的什么都没有吗?并不是,任何类在什么都不写时,编译器会自动生成以下6个默认成员函数。 默认成员函数:用户没有显式实现,编译器会生成的…...

java高级之单元测试、反射
1、Junit测试工具 Test定义测试方法 1.被BeforeClass标记的方法,执行在所有方法之前 2.被AfterCalss标记的方法,执行在所有方法之后 3.被Before标记的方法,执行在每一个Test方法之前 4.被After标记的方法,执行在每一个Test方法之后 public …...

MSQL系列(十三) Mysql实战-left/right/inner join 使用详解及索引优化
Mysql实战-left/right/inner join 使用详解及索引优化 前面我们讲解了BTree的索引结构,也详细讲解下Join的底层驱动表 选择原理,今天我们来了解一下为什么会出现内连接外连接,两种连接方式,另外实战一下内连接和几种最常用的join…...

前端面试题之HTML篇
1、src 和 href 的区别 具有src的标签有:script、img、iframe 具有href的标签有:link、a 区别 src 是source的缩写。表示源的意思,指向资源的地址并下载应用到文档中。会阻塞文档的渲染,也就是为什么js脚本放在底部而不是头部的…...
Django ORM:数据库操作的Python化艺术
Django的对象关系映射器(ORM)是其核心功能之一,允许开发者使用Python代码来定义、操作和查询数据库。这篇文章将带你深入了解Django ORM的强大之处,从基本概念到高级查询技巧,提供丰富的示例帮助你掌握使用Django ORM进…...
react受控组件与非受控组件
React中的组件可以分为受控组件和非受控组件: 受控组件:受控组件是指组件的值受到React组件状态的控制。通常在组件中,我们会通过state来存储组件的值,然后再将state的值传递给组件的props,从而实现组件的双向数据绑定…...
小米产品面试题:淘宝为何需要确认收货?京东为何不需要?
亲爱的小米粉丝们,大家好!我是小米,一个热爱技术、热衷于分享的小编。今天,我要和大家聊聊一个有趣的话题:为什么淘宝购物需要确认收货,而京东不需要?这可是一个让很多人纳闷的问题,…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...

【第二十一章 SDIO接口(SDIO)】
第二十一章 SDIO接口 目录 第二十一章 SDIO接口(SDIO) 1 SDIO 主要功能 2 SDIO 总线拓扑 3 SDIO 功能描述 3.1 SDIO 适配器 3.2 SDIOAHB 接口 4 卡功能描述 4.1 卡识别模式 4.2 卡复位 4.3 操作电压范围确认 4.4 卡识别过程 4.5 写数据块 4.6 读数据块 4.7 数据流…...

React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
如何为服务器生成TLS证书
TLS(Transport Layer Security)证书是确保网络通信安全的重要手段,它通过加密技术保护传输的数据不被窃听和篡改。在服务器上配置TLS证书,可以使用户通过HTTPS协议安全地访问您的网站。本文将详细介绍如何在服务器上生成一个TLS证…...
【android bluetooth 框架分析 04】【bt-framework 层详解 1】【BluetoothProperties介绍】
1. BluetoothProperties介绍 libsysprop/srcs/android/sysprop/BluetoothProperties.sysprop BluetoothProperties.sysprop 是 Android AOSP 中的一种 系统属性定义文件(System Property Definition File),用于声明和管理 Bluetooth 模块相…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

tree 树组件大数据卡顿问题优化
问题背景 项目中有用到树组件用来做文件目录,但是由于这个树组件的节点越来越多,导致页面在滚动这个树组件的时候浏览器就很容易卡死。这种问题基本上都是因为dom节点太多,导致的浏览器卡顿,这里很明显就需要用到虚拟列表的技术&…...
Mysql8 忘记密码重置,以及问题解决
1.使用免密登录 找到配置MySQL文件,我的文件路径是/etc/mysql/my.cnf,有的人的是/etc/mysql/mysql.cnf 在里最后加入 skip-grant-tables重启MySQL服务 service mysql restartShutting down MySQL… SUCCESS! Starting MySQL… SUCCESS! 重启成功 2.登…...

【MATLAB代码】基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),附源代码|订阅专栏后可直接查看
文章所述的代码实现了基于最大相关熵准则(MCC)的三维鲁棒卡尔曼滤波算法(MCC-KF),针对传感器观测数据中存在的脉冲型异常噪声问题,通过非线性加权机制提升滤波器的抗干扰能力。代码通过对比传统KF与MCC-KF在含异常值场景下的表现,验证了后者在状态估计鲁棒性方面的显著优…...