【自然语言处理(NLP)】深度循环神经网络(Deep Recurrent Neural Network,DRNN)原理和实现

文章目录

  • 介绍
  • 深度循环神经网络(DRNN)原理和实现
    • 结构特点
    • 工作原理
      • 符号含义
      • 公式含义
    • 应用领域
    • 优势与挑战
    • DRNN 代码实现

个人主页:道友老李
欢迎加入社区:道友老李的学习社区

介绍

**自然语言处理(Natural Language Processing,NLP)**是计算机科学领域与人工智能领域中的一个重要方向。它研究的是人类(自然)语言与计算机之间的交互。NLP的目标是让计算机能够理解、解析、生成人类语言,并且能够以有意义的方式回应和操作这些信息。

NLP的任务可以分为多个层次,包括但不限于:

  1. 词法分析:将文本分解成单词或标记(token),并识别它们的词性(如名词、动词等)。
  2. 句法分析:分析句子结构,理解句子中词语的关系,比如主语、谓语、宾语等。
  3. 语义分析:试图理解句子的实际含义,超越字面意义,捕捉隐含的信息。
  4. 语用分析:考虑上下文和对话背景,理解话语在特定情境下的使用目的。
  5. 情感分析:检测文本中表达的情感倾向,例如正面、负面或中立。
  6. 机器翻译:将一种自然语言转换为另一种自然语言。
  7. 问答系统:构建可以回答用户问题的系统。
  8. 文本摘要:从大量文本中提取关键信息,生成简短的摘要。
  9. 命名实体识别(NER):识别文本中提到的特定实体,如人名、地名、组织名等。
  10. 语音识别:将人类的语音转换为计算机可读的文字格式。

NLP技术的发展依赖于算法的进步、计算能力的提升以及大规模标注数据集的可用性。近年来,深度学习方法,特别是基于神经网络的语言模型,如BERT、GPT系列等,在许多NLP任务上取得了显著的成功。随着技术的进步,NLP正在被应用到越来越多的领域,包括客户服务、智能搜索、内容推荐、医疗健康等。

深度循环神经网络(DRNN)原理和实现

深度循环神经网络(Deep Recurrent Neural Network,DRNN)是在循环神经网络(RNN)基础上发展而来的一种深度学习模型。

结构特点

  • 多层循环结构:普通的RNN通常只有一层循环层,而DRNN包含多个循环层堆叠在一起。每一层循环层都可以学习到不同层次和粒度的序列特征。底层的循环层可以捕捉到序列中的局部短期依赖关系,随着层数的增加,高层的循环层能够逐渐提取出更抽象、更长期的依赖关系。
  • 丰富的连接方式:除了循环层之间的堆叠,DRNN还可以有多种连接方式。例如,每一层循环层的输出可以直接连接到下一层循环层的输入,也可以采用跳跃连接的方式,将底层循环层的输出直接连接到高层循环层,甚至可以连接到输出层,这种连接方式有助于信息的快速传递和融合,增强模型的表达能力。

工作原理

  • 信息传递与处理:在每个时间步,DRNN的每一层循环单元都会接收当前的输入以及上一层循环单元在前一个时间步的隐藏状态。然后,通过特定的计算(如矩阵乘法和非线性激活函数)来更新当前层的隐藏状态。这个过程在所有的时间步和所有的循环层中依次进行,使得模型能够对序列中的信息进行逐步深入的处理和分析。
  • 梯度传播与学习:在训练过程中,DRNN使用时间反向传播算法(BPTT)来计算梯度并更新参数。由于深度结构的存在,梯度在反向传播过程中需要经过多个循环层和时间步。这可能会导致梯度消失或梯度爆炸的问题,即梯度在传播过程中变得非常小或非常大,使得模型难以训练。为了缓解这些问题,通常会采用一些技巧,如使用合适的激活函数、进行梯度裁剪、采用正则化方法等。

在这里插入图片描述
在这里插入图片描述
某一层在时间步 t t t的隐藏状态计算以及最终输出计算:

符号含义

  • 隐藏状态
    • H t ( l ) \mathbf{H}_t^{(l)} Ht(l):表示在第 l l l层、时间步 t t t的隐藏状态矩阵,维度一般为 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l ) ] [batch\_size, hidden\_size^{(l)}] [batch_size,hidden_size(l)] b a t c h _ s i z e batch\_size batch_size是批量大小, h i d d e n _ s i z e ( l ) hidden\_size^{(l)} hidden_size(l)是第 l l l层隐藏层神经元数量。
    • H t ( l − 1 ) \mathbf{H}_t^{(l - 1)} Ht(l1):第 l − 1 l - 1 l1层、时间步 t t t的隐藏状态矩阵,维度为 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l − 1 ) ] [batch\_size, hidden\_size^{(l - 1)}] [batch_size,hidden_size(l1)],用于为当前层提供输入信息。
    • H t − 1 ( l ) \mathbf{H}_{t - 1}^{(l)} Ht1(l):第 l l l层、时间步 t − 1 t - 1 t1的隐藏状态矩阵,维度是 [ b a t c h _ s i z e , h i d d e n _ s i z e ( l ) ] [batch\_size, hidden\_size^{(l)}] [batch_size,hidden_size(l)],体现循环特性。
  • 输出
    • O t \mathbf{O}_t Ot:时间步 t t t的最终输出矩阵,维度为 [ b a t c h _ s i z e , o u t p u t _ s i z e ] [batch\_size, output\_size] [batch_size,output_size] o u t p u t _ s i z e output\_size output_size是输出层神经元数量。
  • 权重矩阵和偏置项
    • W x h ( l ) \mathbf{W}_{xh}^{(l)} Wxh(l):第 l − 1 l - 1 l1层隐藏状态到第 l l l层隐藏状态的权重矩阵,维度为 [ h i d d e n _ s i z e ( l − 1 ) , h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l - 1)}, hidden\_size^{(l)}] [hidden_size(l1),hidden_size(l)],负责将上一层隐藏状态信息转换到当前层隐藏状态空间。
    • W h h ( l ) \mathbf{W}_{hh}^{(l)} Whh(l):第 l l l层自身隐藏状态到隐藏状态的权重矩阵,维度是 [ h i d d e n _ s i z e ( l ) , h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l)}, hidden\_size^{(l)}] [hidden_size(l),hidden_size(l)],用于在前一时刻隐藏状态与当前输入共同作用时,对当前层隐藏状态计算进行变换。
    • W h q \mathbf{W}_{hq} Whq:第 L L L层(最后一层)隐藏状态到输出层的权重矩阵,维度为 [ h i d d e n _ s i z e ( L ) , o u t p u t _ s i z e ] [hidden\_size^{(L)}, output\_size] [hidden_size(L),output_size],将最后一层隐藏状态表示转换为输出。
    • b h ( l ) \mathbf{b}_{h}^{(l)} bh(l):第 l l l层隐藏层的偏置向量,维度为 [ h i d d e n _ s i z e ( l ) ] [hidden\_size^{(l)}] [hidden_size(l)] ,给第 l l l层隐藏层计算增加可学习的偏置值。
    • b q \mathbf{b}_{q} bq:输出层的偏置向量,维度是 [ o u t p u t _ s i z e ] [output\_size] [output_size] ,给输出层计算增加偏置。
  • 激活函数
    • ϕ l \phi_l ϕl:第 l l l层使用的激活函数,常见的有sigmoid、tanh、ReLU等,为计算引入非线性。

公式含义

  • 隐藏状态计算:公式 H t ( l ) = ϕ l ( H t ( l − 1 ) W x h ( l ) + H t − 1 ( l ) W h h ( l ) + b h ( l ) ) \mathbf{H}_t^{(l)} = \phi_l(\mathbf{H}_t^{(l - 1)}\mathbf{W}_{xh}^{(l)} + \mathbf{H}_{t - 1}^{(l)}\mathbf{W}_{hh}^{(l)} + \mathbf{b}_{h}^{(l)}) Ht(l)=ϕl(Ht(l1)Wxh(l)+Ht1(l)Whh(l)+bh(l))表示在第 l l l层、时间步 t t t,先将上一层(第 l − 1 l - 1 l1层)在时间步 t t t的隐藏状态 H t ( l − 1 ) \mathbf{H}_t^{(l - 1)} Ht(l1)与权重矩阵 W x h ( l ) \mathbf{W}_{xh}^{(l)} Wxh(l)相乘,同时将本层(第 l l l层)上一时间步 t − 1 t - 1 t1的隐藏状态 H t − 1 ( l ) \mathbf{H}_{t - 1}^{(l)} Ht1(l)与权重矩阵 W h h ( l ) \mathbf{W}_{hh}^{(l)} Whh(l)相乘,然后把这两个乘积结果相加,再加上偏置 b h ( l ) \mathbf{b}_{h}^{(l)} bh(l),最后通过激活函数 ϕ l \phi_l ϕl对其进行非线性变换,得到第 l l l层在时间步 t t t的隐藏状态 H t ( l ) \mathbf{H}_t^{(l)} Ht(l) 。这一过程在各层和各时间步重复进行,实现对序列信息的多层处理。
  • 输出计算:公式 O t = H t ( L ) W h q + b q \mathbf{O}_t = \mathbf{H}_t^{(L)}\mathbf{W}_{hq} + \mathbf{b}_{q} Ot=Ht(L)Whq+bq用于计算最终输出。在经过多层循环层处理后,取最后一层(第 L L L层)在时间步 t t t的隐藏状态 H t ( L ) \mathbf{H}_t^{(L)} Ht(L),与隐藏层到输出层的权重矩阵 W h q \mathbf{W}_{hq} Whq相乘,再加上输出层偏置 b q \mathbf{b}_{q} bq,得到时间步 t t t的最终输出 O t \mathbf{O}_t Ot

应用领域

  • 自然语言处理:在机器翻译中,能够处理源语言和目标语言的复杂序列信息,实现更准确的翻译;在文本生成任务中,可以生成更连贯、更有逻辑的文本内容;在情感分析中,能更好地捕捉文本中的情感线索,提高情感分类的准确率。
  • 语音识别:可以对语音信号的时间序列进行建模,更好地识别语音中的单词和句子,提高语音识别的精度。
  • 时间序列预测:在金融领域,对股票价格、汇率等时间序列数据进行预测;在气象领域,预测气温、降水等气象数据;在工业领域,对设备的运行状态、生产数据等进行预测和监控。
  • 视频处理:可以用于视频中的动作识别、视频内容分类、视频生成等任务,通过对视频帧序列的学习,理解视频中的语义信息和时空关系。

优势与挑战

  • 优势:相比普通的RNN,能够学习到更复杂、更深入的序列特征,对长序列数据中的长期依赖关系有更好的建模能力,在各种序列数据处理任务中通常能取得更好的性能表现。
  • 挑战:训练难度较大,由于深度结构和循环特性,训练过程中容易出现梯度问题,导致模型难以收敛或过拟合;计算复杂度较高,需要更多的计算资源和时间来进行训练和推理;模型的可解释性较差,难以直观地理解模型是如何做出决策和预测的。

DRNN 代码实现

双层隐藏层的循环神经网络 训练和预测:

import torch
from torch import nn
import dltoolsbatch_size, num_steps = 32, 35
train_iter, vocab = dltools.load_data_time_machine(batch_size, num_steps)vocab_size, num_hiddens, num_layers = len(vocab), 256, 2
num_inputs = vocab_size
device = dltools.try_gpu()
rnn_layer = nn.RNN(num_inputs, num_hiddens, num_layers)
model = dltools.RNNModel(rnn_layer, len(vocab))
model = model.to(device)num_epochs, lr = 500, 1
dltools.train_ch8(model, train_iter, vocab, lr, num_epochs, device)

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

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

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

相关文章

Niagara学习笔记

橙色 发射器 , 绿色 粒子, 红色 渲染器 Emitter State 发射器状态 Life Cycle Mode(生命周期模式) 选择Self就是发射器自身管理生命周期 Loop Behavior 决定粒子发射次数 一次(Once):发射器只播放一次多次&#…

17 一个高并发的系统架构如何设计

高并发系统的理解 第一:我们设计高并发系统的前提是该系统要高可用,起码整体上的高可用。 第二:高并发系统需要面对很大的流量冲击,包括瞬时的流量和黑客攻击等 第三:高并发系统常见的需要考虑的问题,如内存不足的问题,服务抖动的…

2025数学建模美赛|F题成品论文

国家安全政策与网络安全 摘要 随着互联网技术的迅猛发展,网络犯罪问题已成为全球网络安全中的重要研究课题,且网络犯罪的形式和影响日益复杂和严重。本文针对网络犯罪中的问题,基于多元回归分析和差异中的差异(DiD)思…

适配Android16

Android16新特性 Android 16带来了许多新特性和改进,提升了系统的流畅度、用户体验和安全性。对于应用开发者来说,适配Android 16可以确保应用在该版本上的兼容性和性能,同时也可以利用其新特性为用户提供更好的服务。以下是Android 16的一些…

【C++数论】880. 索引处的解码字符串|2010

本文涉及知识点 数论:质数、最大公约数、菲蜀定理 LeetCode880. 索引处的解码字符串 给定一个编码字符串 s 。请你找出 解码字符串 并将其写入磁带。解码时,从编码字符串中 每次读取一个字符 ,并采取以下步骤: 如果所读的字符是…

【MQ】如何保证消息队列的高可用?

RocketMQ NameServer集群部署 Broker做了集群部署 主从模式 类型:同步复制、异步复制 主节点返回消息给客户端的时候是否需要同步从节点 Dledger:要求至少消息复制到半数以上的节点之后,才给客户端返回写入成功 slave定时从master同步数据…

ESP32 I2S音频总线学习笔记(二):I2S读取INMP441音频数据

简介 在这个系列的上一篇文章中,我们介绍了ESP32 I2S音频总线的相关知识,简要了解了什么是I2S总线、它的通信格式,以及相关的底层API函数。没有看过上篇文章的可以点击文章进行回顾: ESP32 I2S音频总线学习笔记(一&a…

EasyExcel使用详解

文章目录 EasyExcel使用详解一、引言二、环境准备与基础配置1、添加依赖2、定义实体类 三、Excel 读取详解1、基础读取2、自定义监听器3、多 Sheet 处理 四、Excel 写入详解1、基础写入2、动态列与复杂表头3、样式与模板填充 五、总结 EasyExcel使用详解 一、引言 EasyExcel 是…

objection的简单使用

objection环境配置 下载以下版本 objection1.11.0 frida-tools9.2.4 python3.8.8 报错的话看这里: 在这个网站下载frida-tools14.2.18的离线包Links for frida 然后放入C:\Users\Asus\frida-14.2.18-py3.8-win-amd64.egg文件夹下 执行poetry add frida-tools14.2.18 ob…

危机13小时:追踪一场GitHub投毒事件

事件概要 自北京时间 2024.12.4 晚间6点起, GitHub 上不断出现“幽灵仓库”,仓库中没有任何代码,只有诱导性的病毒文件。当天,他们成为了 GitHub 上 star 增速最快的仓库。超过 180 个虚假僵尸账户正在传播病毒,等待不…

【Redis】缓存+分布式锁

目录 缓存 Redis最主要的使用场景就是作为缓存 缓存的更新策略: 1.定期生成 2.实时生成 面试重点: 缓存预热(Cache preheating): 缓存穿透(Cache penetration) 缓存雪崩 (Cache avalan…

记录 | MaxKB创建本地AI智能问答系统

目录 前言一、重建MaxKBStep1 复制路径Step2 删除MaxKBStep3 创建数据存储文件夹Step4 重建 二、创建知识库Step1 新建知识库Step2 下载测试所用的txtStep3 上传本地文档Step4 选择模型补充智谱的API Key如何获取 Step5 查看是否成功 三、创建应用Step1 新建应用Step2 配置AI助…

C#新语法

目录 顶级语句(C#9.0) using 全局using指令(C#10.0) using资源管理问题 using声明(C#8.0) using声明陷阱 错误写法 正确写法 文件范围的命名空间声明(C#10.0) 可空引用类型…

基于dlib/face recognition人脸识别推拉流实现

目录 一.环境搭建 二.推拉流代码 三.人脸检测推拉流 一.环境搭建 1.下载RTSP服务器MediaMTX与FFmpeg FFmpeg是一款功能强大的开源多媒体处理工具,而MediaMTX则是一个轻量级的流媒体服务器。两者结合,可以实现将本地视频或者实时摄像头画面推送到RTSP流,从而实现视频…

Couchbase UI: Analytics

Couchbase 的 Analytics 页面是用于执行分析查询的部分,允许用户对存储在 Couchbase 中的数据进行复杂的分析和聚合。Analytics 提供了 SQL-like 查询语言(N1QL for Analytics),使得用户能够轻松地执行数据分析任务。以下是关于 C…

梯度下降优化算法-Adam

Adam(Adaptive Moment Estimation)是一种结合了动量法(Momentum)和 RMSProp 的自适应学习率优化算法。它通过计算梯度的一阶矩(均值)和二阶矩(未中心化的方差)来调整每个参数的学习率…

论文笔记(六十三)Understanding Diffusion Models: A Unified Perspective(六)(完结)

Understanding Diffusion Models: A Unified Perspective(六)(完结) 文章概括指导(Guidance)分类器指导无分类器引导(Classifier-Free Guidance) 总结 文章概括 引用: …

【PySide6快速入门】信号与槽的使用

文章目录 前言什么是信号与槽信号与槽的功能最简单的信号与槽控件连接信号与信号的连接总结 前言 在 PySide6 中,信号与槽机制是核心概念之一,它是 Qt 库中事件通信的基础。通过信号与槽,开发者能够实现不同组件之间的解耦,从而使…

GOGOGO 枚举

含义:一种类似于类的一种结构 作用:是Java提供的一个数据类型,可以设置值是固定的 【当某一个数据类型受自身限制的时候,使用枚举】 语法格式: public enum 枚举名{…… }有哪些成员? A、对象 public …

AWTK 骨骼动画控件发布

Spine 是一款广泛使用的 2D 骨骼动画工具,专为游戏开发和动态图形设计设计。它通过基于骨骼的动画系统,帮助开发者创建流畅、高效的角色动画。本项目是基于 Spine 实现的 AWTK 骨骼动画控件。 代码:https://gitee.com/zlgopen/awtk-widget-s…