【文本到上下文 #5】:RNN、LSTM 和 GRU

一、说明

        欢迎来到“完整的 NLP 指南:文本到上下文 #5”,这是我们对自然语言处理 (NLP) 和深度学习的持续探索。从NLP的基础知识到机器学习应用程序,我们现在深入研究了神经网络的复杂世界及其处理语言的深刻能力。

        在本期中,我们将重点介绍顺序数据在 NLP 中的重要性,介绍递归神经网络 (RNN) 及其在处理此类数据方面的独特能力。我们将解决 RNN 面临的挑战,例如梯度消失问题,并探索长短期记忆 (LSTM) 和门控循环单元 (GRU) 等高级解决方案。

        以下是本章中您可以期待的内容:

  1. 神经网络概述:深入研究神经网络的基本原理,包括它们的架构、功能和在现代技术中的重要性。
  2. 循环神经网络 (RNN):了解专为处理顺序数据而设计的 RNN 的独特架构,探索它们的功能及其在 NLP 中的应用。
  3. 长短期记忆 (LSTM): 了解 LSTM 网络的复杂性,LSTM 网络是一种能够学习长期依赖关系的特殊形式的 RNN,以及它们在解决标准 RNN 中常见的梯度消失问题中的关键作用。
  4. 门控循环单元 (GRU):了解 GRU,它是 LSTM 的简化变体,它以更简单的架构设计提供可比的性能,使其成为某些类型的顺序数据处理的有效工具。
  5. RNN、LSTM 和 GRU 的比较:研究 RNN、LSTM 和 GRU 的优势和劣势,深入了解它们的比较性能、对不同任务的适用性以及处理顺序数据挑战的整体效率。
  6. 使用玩具文本数据实现 RNN、LSTM 和 GRU:深入了解实际演示,了解如何使用简单的文本数据集实现 RNN、GRU 和 LSTM 模型。本部分介绍从预处理文本数据到动手训练和比较不同模型的步骤。

        加入我们的全面探索,我们将揭示神经网络在 NLP 领域的复杂性和功能,弥合理论概念和实际应用之间的差距。

二、神经网络概述

        神经网络 (NN) 是机器学习的一个基本概念,其灵感来自人脑的结构和功能。神经网络的核心由组织成层的互连节点组成。输入层接收数据,隐藏层处理信息,输出层生成结果。神经网络的优势在于它们能够从数据中学习,在训练过程中调整内部参数(权重)以优化性能。

三、解开前向和后向传播

        在前向传播阶段,数据通过网络传输,并在每一层进行计算,从而生成预测。它类似于从输入流向输出的信息。

        向后传播阶段涉及学习的关键方面。通过梯度下降等技术,该网络通过计算损失函数相对于权重的梯度来细化其内部参数。链式规则在这里起着举足轻重的作用,它允许网络将损失归因于特定的权重,从而实现微调以提高准确性。

四、Gradient Descent

        梯度下降是神经网络重量调整背后的驱动力。它是一种优化算法,通过在多维权重空间中迭代地向最陡峭的下坡方向移动来最小化损失函数。这种权重的迭代调整增强了网络的预测准确性。

4.1 链式法则

        微积分中的链式法则是反向传播的关键。它能够计算偏导数,将网络的整体误差归因于单个权重。这种分解对于在训练过程中进行细微的调整至关重要。

4.2 序列在 NLP 任务中的重要性

        在自然语言处理 (NLP) 中,理解和处理序列至关重要。与数据点独立的传统机器学习任务不同,语言本质上涉及顺序信息。在NLP中,句子中单词的顺序具有意义,前一个单词的上下文会影响后续单词的解释。

五、递归神经网络 (RNN)

        RNN 是 NN 的一种特殊形式,旨在处理顺序数据。它们引入了内存的概念,使网络能够保留有关先前输入的信息。这种记忆对于上下文很重要的任务至关重要,例如语言理解和生成。

5.1 RNN 的工作原理

  • 顺序处理:与传统的神经网络不同,RNN 旨在处理数据序列。他们通过按顺序一次获取一个输入来做到这一点。
  • 经常连接:RNN 的主要特征是其循环连接。这些连接允许网络保留某种形式的“内存”。在序列中的每一步,RNN 都会处理当前输入以及上一步的“隐藏状态”。此隐藏状态包含从先前输入中学习的信息。
  • 隐藏状态:隐藏状态在每个时间步长都会根据新输入和以前的隐藏状态进行更新。这种机制允许 RNN 在序列中的不同步骤中携带信息。
  • 共享权重:在 RNN 中,权重(参数)在所有时间步长之间共享。这意味着使用相同的权重来处理序列中的每个输入,从而使模型更加高效并减少参数数量。

5.2 挑战与优势:

  • 递归神经网络 (RNN) 在处理顺序数据方面表现出色,使其适用于语言处理和时间序列分析中的任务。它们记住先前输入的能力对于中短序列来说是一个明显的优势。
  • 然而,RNN 在梯度消失问题上苦苦挣扎,阻碍了它们处理长期依赖关系的能力。对于需要广泛历史背景的任务来说,此限制非常重要。此外,它们的顺序性限制了现代并行处理技术的利用,导致训练时间更长。尽管存在这些挑战,RNN仍然是序列数据分析的基础架构。

5.3 使用案例

  • RNN 在自然语言处理(语言建模、机器翻译)、语音识别(音素识别、语音合成)和时间序列预测(股价预测、天气预报)中都有应用。

六、长短期记忆 (LSTM)

        LSTM 代表了递归神经网络领域的高级发展,专门用于解决和克服传统 RNN 固有的局限性,尤其是在处理长期依赖关系时。

6.1 LSTM 的工作原理:

  • 高级内存处理:LSTM 的定义特征是其复杂的存储单元,称为 LSTM 单元。该装置可以长时间保持信息,这要归功于其由不同门组成的独特结构。
  • 浇注机构:LSTM 包含三种类型的门,每种门在网络的内存管理中都起着至关重要的作用。

输入门:确定应使用输入中的哪些值来修改内存。

忘记门:决定应丢弃现有内存的哪些部分。

输出栅极:控制内存内容到网络中下一层的输出流。

  • 细胞状态:LSTM的核心是单元状态,这是一种直接沿着网络的整个链向下延伸的传送带。它允许信息相对不变地流动,并确保网络有效地保留和访问重要的长期信息。

6.2 挑战与优势:

  • LSTM 专门设计用于避免长期依赖性问题,使其对于需要长时间理解信息的任务更有效。
  • 然而,与基本的 RNN 和 GRU 相比,它们更加复杂和计算密集,这在训练时间和资源分配方面可能是一个挑战。

6.3 使用案例:

  • LSTM 已被证明在需要处理具有长期依赖关系的序列的各种领域中有效,例如文本、语音识别和时间序列分析中的复杂句子结构。

        总之,LSTM 网络提供了一种处理顺序数据的复杂方法,尤其擅长于理解长期依赖关系至关重要的任务。尽管它们很复杂,但它们是神经网络架构库中的强大工具,特别适合 NLP 及其他领域的深度学习任务。

七、门控循环单元 (GRU)

        GRU 是递归神经网络的创新变体,旨在改进和简化 LSTM 的架构。它们提供了一种更简化的方法来处理顺序数据,在长期依赖关系至关重要的情况下特别有效。

7.1 GRU的工作原理:

  • 简化架构:与 LSTM 相比,GRU 以其简化的结构而闻名,使其在计算资源方面更加高效。这种效率源于其门数量的减少。
  • 浇注机构:GRU 使用两个门:

更新门:此门决定将来自先前状态的信息传递到当前状态的程度。它是 LSTM 中遗忘门和输入门的混合体。

重置门:它决定了要忘记多少过去的信息,有效地允许模型决定有多少过去信息与当前预测相关。

  • 没有单独的单元状态:与 LSTM 不同,GRU 没有单独的单元状态。它们将单元状态和隐藏状态组合到一个结构中,简化了信息流,使它们更易于建模和训练。

7.2 挑战与优势:

  • GRU 以其训练效率和速度而闻名,使其成为关注计算资源的模型的合适选择。
  • 虽然它们通常比 LSTM 更快、更简单,但由于其简化的结构,它们在捕获非常长期的依赖关系方面可能不那么有效。

7.3 使用案例:

  • GRU 已成功应用于各种领域,例如语言建模、机器翻译和语音转文本应用程序,在这些领域中,复杂性和性能之间的平衡至关重要。

        总之,GRU 提供了一种更简化的 LSTM 替代方案,在处理具有长期依赖关系的顺序数据方面提供类似的功能,但计算复杂性较低。这使得它们成为 NLP 和其他需要处理顺序数据的领域的许多实际应用的有吸引力的选择。它们能够平衡性能和计算效率,这使它们成为深度学习领域的宝贵工具,尤其是在资源有限或需要更快训练时间的情况下。

八、RNN、LSTM 和 GRU 的比较

        循环神经网络 (RNN):

  • 优点:非常适合在短时间内处理序列和维护信息。简单的架构使它们具有计算效率。
  • 局限性:由于梯度消失问题,难以与长期依赖关系作斗争。

        长短期记忆 (LSTM) 网络:

  • 优势:在学习长期依赖性方面非常有效。输入门、遗忘门和输出门的增加可以更好地控制存储单元,使其能够熟练地处理梯度消失问题等问题。
  • 复杂度:比具有附加参数的 RNN 更复杂,导致更高的计算成本。

        门控循环单元 (GRU):

  • 优势:在管理长期依赖关系方面与 LSTM 类似,但结构更简单。GRU 将输入门和忘记门合并到单个更新门中,从而降低了复杂性。
  • 效率:由于参数较少,训练速度通常比 LSTM 快,同时通常实现相似的性能。

        关键要点:

  • 选择 RNN 是为了简单起见,并且在处理长期依赖关系不重要的较短序列时。
  • 当任务在较长时间内涉及复杂的依赖关系时,请选择 LSTM,并且模型精度至关重要。
  • 选择 GRU 以获得更平衡的方法,特别是当计算效率与模型准确性同样重要时,或者在处理有限的数据时。

总之,RNN、LSTM 和 GRU 之间的选择取决于任务的具体要求,包括输入序列的性质、计算资源以及捕获长期依赖关系的重要性。

九、使用玩具文本数据实现 RNN、LSTM 和 GRU

import numpy as np
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import SimpleRNN, GRU, LSTM, Dense, Embedding
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences# Toy text data
text_data = ["This is the first document.","This document is the second document.","And this is the third one.","Is this the first document?"
]# Tokenize the text data
tokenizer = Tokenizer()
tokenizer.fit_on_texts(text_data)
total_words = len(tokenizer.word_index) + 1# Create input sequences and labels for training
input_sequences = []
for line in text_data:token_list = tokenizer.texts_to_sequences([line])[0]for i in range(1, len(token_list)):n_gram_sequence = token_list[:i+1]input_sequences.append(n_gram_sequence)max_sequence_length = max(len(seq) for seq in input_sequences)
input_sequences = pad_sequences(input_sequences, maxlen=max_sequence_length, padding='pre')X, y = input_sequences[:, :-1], input_sequences[:, -1]
y = tf.keras.utils.to_categorical(y, num_classes=total_words)# Build and train the SimpleRNN model
model_rnn = Sequential()
model_rnn.add(Embedding(total_words, 50, input_length=max_sequence_length-1))
model_rnn.add(SimpleRNN(100))
model_rnn.add(Dense(total_words, activation='softmax'))
model_rnn.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_rnn.fit(X, y, epochs=100, verbose=0)# Build and train the GRU model
model_gru = Sequential()
model_gru.add(Embedding(total_words, 50, input_length=max_sequence_length-1))
model_gru.add(GRU(100))
model_gru.add(Dense(total_words, activation='softmax'))
model_gru.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_gru.fit(X, y, epochs=100, verbose=0)# Build and train the LSTM model
model_lstm = Sequential()
model_lstm.add(Embedding(total_words, 50, input_length=max_sequence_length-1))
model_lstm.add(LSTM(100))
model_lstm.add(Dense(total_words, activation='softmax'))
model_lstm.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy'])
model_lstm.fit(X, y, epochs=100, verbose=0)# Generate text using the trained models
def generate_text(seed_text, model, max_sequence_len, num_words):for _ in range(num_words):token_list = tokenizer.texts_to_sequences([seed_text])[0]token_list = pad_sequences([token_list], maxlen=max_sequence_len-1, padding='pre')predicted = np.argmax(model.predict(token_list), axis=-1)output_word = ""for word, index in tokenizer.word_index.items():if index == predicted:output_word = wordbreakseed_text += " " + output_wordreturn seed_text# Example of generating text with each model
generated_text_rnn = generate_text("This is", model_rnn, max_sequence_length, num_words=5)
generated_text_gru = generate_text("This is", model_gru, max_sequence_length, num_words=5)
generated_text_lstm = generate_text("This is", model_lstm, max_sequence_length, num_words=5)print("Generated Text (SimpleRNN):", generated_text_rnn)
print("Generated Text (GRU):", generated_text_gru)
print("Generated Text (LSTM):", generated_text_lstm)

十、结论

        在 NLP 之旅的这一阶段,我们深入研究了深度学习,探索了神经网络 (NN) 的复杂性及其在处理 NLP 任务中顺序数据中的关键作用。我们的冒险带领我们穿越了循环神经网络 (RNN) 的迷人领域,在那里我们面对并克服了梯度消失问题等挑战。这一探索为揭示更先进的神经架构奠定了基础,如长短期记忆网络 (LSTM) 和门控循环单元 (GRU)。我们的旅程是对这些神经结构如何熟练地管理顺序数据的丰富探索,这是取决于上下文的任务的一个关键方面,例如语言理解和生成。

        当我们结束这个丰富的探索时,我们准备深入研究下一个激动人心的章节:高级单词嵌入技术。即将到来的这个部分有望进一步增强我们对 NLP 的理解,重点关注表示单词和短语的复杂方法,这对于处理更复杂的语言任务至关重要。请继续关注我们,我们将继续揭开自然语言处理的迷人复杂性!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/241717.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ValueError: Unable to read workbook: could not read strings from data.xlsx解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

路由器结构

路由器是连接互联网的设备,本文主要描述路由器的结构组成。 如上所示,OSI(Open System Interconnect)开放系统互联参考模型是互联网架构的标准协议栈,由ISO标准组织制定。自底向上,互联网架构分为7层&#…

Sentinel 轨道数据及下载

Sentinel卫星轨道文件在处理Sentinel卫星数据时发挥着关键作用。这些轨道文件包含了有关卫星在轨道上的运动、位置、姿态等信息,对于地理校正、成像几何校正以及多时相分析等方面具有重要作用。以下是Sentinel卫星轨道文件的主要作用: 地理校正&#xff…

怎么提取伴奏?推荐4个好用软件

怎么提取伴奏?随着音乐在日常生活中的应用越来越广泛,人们对音乐的需求也日益增加。其中,伴奏作为音乐的重要组成部分,往往在创作、娱乐等方面起到关键作用。那么,如何从各种音乐资源中提取出伴奏呢?推荐使…

高级编程。JavaScript中有哪些类型转换机制?

一、概述 前面我们讲到,JS中有六种简单数据类型:undefined、null、boolean、string、number、symbol,以及引用类型:object 但是我们在声明的时候只有一种数据类型,只有到运行期间才会确定当前类型 let x y ? 1 : …

利用appium自动控制移动设备并提取数据

安装appium-python-client模块并启动已安装好的环境 安装appium-python-client模块 在window的虚拟环境下执行pip install appium-python-client 启动夜神模拟器,进入夜神模拟器所在的安装路径的bin目录下,进入cmd终端,使用adb命令建立adb…

UE4使用技巧

打开蓝图编辑器时不是打开一个新窗口,而是作为主窗口 适用于全部的打开新窗口的操作 蓝图编译时自动保存 开始游戏后立即捕获鼠标

【51单片机系列】单片机与PC进行串行通信

一、单片机与PC机串行通信的设计 工业现场的测控系统中,常使用单片机进行监测点的数据采集,然后单片机通过串口与PC通信,把采集的数据串行传送到PC机上,再在PC机上进行数据处理。 PC机配置的都是RS-232标准串口,为D型…

Docker-Confluence部署记录

启动 docker container run -v $(pwd):/var/atlassian/application-data/confluence/ --nethost -d --nameconfluence_720_20240120 confluence/confluence:7.2.0新建mysql数据库 导入破解包 atlassian-agent 参考-Confluence 破解方式(Linux) 按流程破…

JS中的File(四):文件流Streams API使用详解

目录 一、流的原理 二、流的分类 1、可读流(ReadableStream) 3、转换流(TransformStream) 三、流中的Request和Response对象 四、综合应用 PS:涉及到一些基本的文件操作和格式内容知识,可以进入我的主…

书生·浦语大模型实战营第四次课堂笔记

先来看看参考作业 哈哈到这才想起来写笔记 倒回去看发现要求将不要葱姜蒜换成自己的名字和昵称! 好好好我就是不配玩(换成管理员也不行!) 诶怎么能进这个环境?要进双系统ubuntu? 现在看视频发现原来是…

k8s------Pod、Label、NameSpace

一、Pod: Kubernetes中的最小调度对象 1.1 说明 Pod(容器组)是k8s创建和调度的最小单元。一个Pod封装多个容器(container)、存储资源(volume)、一个独立网络ip和管理控制容器运行方式。 Pod可以单独运行一个容器,也可以兼容多个容器运行,多个容器共享…

周五的胡思乱想

众所周知 csdn 在程序员的心目中是比较逊色的, 因为博客水平的参差不齐, 大部分人也都是用来作为自己的笔记方便未来复制。这样就导致这里的文章都是点到为止,没有去深究问题的根本原因,大家也都是复制一下解决方案就关闭的页面。或许这就是 csdn 的价值…

使用 ClassFinal 对SpringBoot jar加密加固并进行机器绑定

写在前面:各位看到此博客的小伙伴,如有不对的地方请及时通过私信我或者评论此博客的方式指出,以免误人子弟。多谢!如果我的博客对你有帮助,欢迎进行评论✏️✏️、点赞👍👍、收藏⭐️⭐️&#…

Linux搭建dns主从服务器

一、实验要求 配置Dns主从服务器,能够实现正常的正反向解析 二、知识点 1、DNS简介 DNS(Domain Name System)是互联网上的一项服务,它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便的访问互联网。…

Microsoft365域名DNS设置

DNS 基础 项目2023/09/227 个参与者DNS 基础 - Microsoft 365 admin | Microsoft Learn 反馈 本文内容 观看:域和 DNS:概述什么是域名?了解 DNS 记录类型DNS 如何工作? 显示另外 4 个 如果找不到要查找的内容,请…

1.php开发-个人博客项目文章功能显示数据库操作数据接收

(2022-day12) #知识点 1-php入门,语法,提交 2-mysql 3-HTMLcss ​ 演示案例 博客-文章阅读功能初步实现 实现功能: 前端文章导航,点入内容显示,更改ID显示不同内容 实现步骤&#xff1…

java8 列表通过 stream流 根据对象属性去重的三种实现方法

java8 列表通过 stream流 根据对象属性去重的三种实现方法 一、简单去重 public class DistinctTest {/*** 没有重写 equals 方法*/SetterGetterToStringAllArgsConstructorNoArgsConstructorpublic static class User {private String name;private Integer age;}/*** lombo…

LeetCode.2788. 按分隔符拆分字符串

题目 题目链接 分析 题目的意思是给我们一个字符串数组和一个分隔符,让我们按照分隔符把字符串数组分割成新的字符串数组。 看到这个描述,这不就是直接就是利用 按照分隔符分割字符串的系统库函数split(),这个函数的意思就是 把一个字符串…

JDBC编程详细教程与示例源码

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl JDBC概述 为了在Java语言中提供对数据库访问的支持,Sun公司于1996年提供了一套访问数据库的标准Java类库JDBC。JDBC的全称是Java数据库连接(Java Database Conn…