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

这篇具有很好参考价值的文章主要介绍了【文本到上下文 #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 领域的复杂性和功能,弥合理论概念和实际应用之间的差距。

二、神经网络概述

【文本到上下文 #5】:RNN、LSTM 和 GRU,人工智能,NLP高级和ChatGPT,神经网络,rnn,自然语言处理

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

三、解开前向和后向传播

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

【文本到上下文 #5】:RNN、LSTM 和 GRU,人工智能,NLP高级和ChatGPT,神经网络,rnn,自然语言处理

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

【文本到上下文 #5】:RNN、LSTM 和 GRU,人工智能,NLP高级和ChatGPT,神经网络,rnn,自然语言处理

四、Gradient Descent

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

4.1 链式法则

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

【文本到上下文 #5】:RNN、LSTM 和 GRU,人工智能,NLP高级和ChatGPT,神经网络,rnn,自然语言处理

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 = word
                break
        seed_text += " " + output_word
    return 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 的理解,重点关注表示单词和短语的复杂方法,这对于处理更复杂的语言任务至关重要。请继续关注我们,我们将继续揭开自然语言处理的迷人复杂性!文章来源地址https://www.toymoban.com/news/detail-793172.html

到了这里,关于【文本到上下文 #5】:RNN、LSTM 和 GRU的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 在word的文本框内使用Endnote引用文献,如何保证引文编号按照上下文排序

    如下图所示,我在word中插入了一个文本框(为了插图),然后文本框内有引用,结果endnote自动将文本框内的引用优先排序,变成文献[1]了,而事实上应该是[31]。请问如何能让文本框内的排序也自动按照整个文章从上到下的顺序来呢?[引用自这里] 文本框中不支持尾注(和脚

    2024年02月13日
    浏览(41)
  • 深度学习RNN,GRU,LSTM文本生成解码器的训练损失讲解(附代码)

    以下以GRU为例讲解RNN作为解码器时如何根据用户、商品特征信息 hidden 生成评价。 解码器部分代码如下: 在训练时,解码器会有两个输入:一是编码器提取的用户、商品特征,二是用户对商品的评价。 评价是文字,在训练开始前已经转换成了Token ID, 比如 I love this item , 每个

    2024年04月12日
    浏览(28)
  • 【python】flask执行上下文context,请求上下文和应用上下文原理解析

    ✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN新星创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全栈,前后端开

    2024年03月26日
    浏览(41)
  • 超长上下文处理:基于Transformer上下文处理常见方法梳理

    原文链接:芝士AI吃鱼 目前已经采用多种方法来增加Transformer的上下文长度,主要侧重于缓解注意力计算的二次复杂度。 例如,Transformer-XL通过缓存先前的上下文,并允许随着层数的增加线性扩展上下文。Longformer采用了一种注意力机制,使得token稀疏地关注远距离的token,从而

    2024年02月13日
    浏览(40)
  • 无限上下文,多级内存管理!突破ChatGPT等大语言模型上下文限制

    目前,ChatGPT、Llama 2、文心一言等主流大语言模型,因技术架构的问题上下文输入一直受到限制,即便是Claude 最多只支持10万token输入,这对于解读上百页报告、书籍、论文来说非常不方便。 为了解决这一难题,加州伯克利分校受操作系统的内存管理机制启发,提出了MemGPT。

    2024年02月06日
    浏览(47)
  • LLMs之llama_7b_qlora:源代码解读inference_qlora.py(模型推理)使用LORA权重来初始化预训练的LLAMA模型来进行文本生成(基于用户交互输入的上下文生成新文本)

    LLMs之llama_7b_qlora:源码解读inference_qlora.py(模型推理)使用LORA权重来初始化预训练的LLAMA模型来进行文本生成(基于用户交互输入的上下文生成新文本) 目录

    2024年02月15日
    浏览(55)
  • 从零开始理解Linux中断架构(7)--- Linux执行上下文之中断上下文

            当前运行的loop是一条执行流,中断程序运行开启了另外一条执行流,从上一节得知这是三种跳转的第三类,这个是一个大跳转。对中断程序的基本要求就是 中断执行完毕后要恢复到原来执行的程序 ,除了时间流逝外,原来运行的程序应该毫无感知。        

    2024年02月11日
    浏览(50)
  • 〖大前端 - 基础入门三大核心之JS篇(51)〗- 面向对象之认识上下文与上下文规则

    说明:该文属于 大前端全栈架构白宝书专栏, 目前阶段免费 , 如需要项目实战或者是体系化资源,文末名片加V! 作者:哈哥撩编程,十余年工作经验, 从事过全栈研发、产品经理等工作,目前在公司担任研发部门CTO。 荣誉: 2022年度博客之星Top4、2023年度超级个体得主、谷

    2024年02月05日
    浏览(43)
  • js执行上下文

    创造执行上下文,是为了把变量声明给保存下来,在执行时,好找到变量用 看代码要分执行前(构建执行上下文)和执行时去看 执行上下文的组成 1、词法环境:[全局对象]、scope、outer 2、This Binding:提供this的访问 构建执行上下文 1、处理声明 2、检查重复定义 3、初步赋值

    2024年02月02日
    浏览(31)
  • 执行上下文

    通过var定义(声明)的变量--在定义语句之前就可以访问到 值为undefined 通过function声明的函数--在之前就可以直接调用 值为函数定义(对象) 全局代码 函数(局部)代码 在执行全局代码前将window确定为全局执行上下文 对全局数据进行预处理 var定义的全局变量--undefined--添加

    2023年04月20日
    浏览(36)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包