当前位置: 首页 > news >正文

【自然语言处理(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)

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

在这里插入图片描述

在这里插入图片描述

相关文章:

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

文章目录 介绍深度循环神经网络(DRNN)原理和实现结构特点工作原理符号含义公式含义 应用领域优势与挑战DRNN 代码实现 个人主页:道友老李 欢迎加入社区:道友老李的学习社区 介绍 **自然语言处理(Natural Language Pr…...

Linux 命令之技巧(Tips for Linux Commands)

Linux 命令之技巧 简介 Linux ‌是一种免费使用和自由传播的类Unix操作系统,其内核由林纳斯本纳第克特托瓦兹(Linus Benedict Torvalds)于1991年10月5日首次发布。Linux继承了Unix以网络为核心的设计思想,是一个性能稳定的多用户…...

【文星索引】搜索引擎项目测试报告

目录 一、项目背景二、 项目功能2.1 数据收集与索引2.2 API搜索功能2.3 用户体验与界面设计2.4 性能优化与维护 三、测试报告3.1 功能测试3.2 界面测试3.3 性能测试3.4 兼容性测试3.5 自动化测试 四、测试总结4.1 功能测试方面4.2 性能测试方面4.3 用户界面测试方面 一、项目背…...

低代码系统-产品架构案例介绍、轻流(九)

轻流低代码产品定位为零代码产品,试图通过搭建来降低企业成本,提升业务上线效率。 依旧是从下至上,从左至右的顺序 名词概述运维层底层系统运维层,例如上线、部署等基础服务体系内置的系统能力,发消息、组织和权限是必…...

二叉树(补充)

二叉树 1.二叉树的基本特性2.堆2.1.堆的基本概念2.2.堆的实现2.2.1.基本结构2.2.2.堆的初始化 2.2.3.堆的销毁2.2.4.堆的插入2.2.5.取出堆顶的数据2.2.6.堆的删除2.2.7.堆的判空2.2.8.堆的数据个数2.2.9.交换2.2.10.打印堆数据2.2.11.堆的创建2.2.12.堆排序 1.二叉树的基本特性…...

(DM)达梦数据库基本操作(持续更新)

1、连接达梦数据库 ./disql 用户明/"密码"IP端口或者域名 2、进入某个模式(数据库,因达梦数据库没有库的概念,只有模式,可以将模式等同于库) set schema 库名; 3、查表结构; SELECT COLUMN_NAM…...

CRM 微服务

文章目录 项目地址一、项目地址 教程作者:教程地址:代码仓库地址:所用到的框架和插件:dbt airflow一、 用户与认证服务 主要功能: 用户注册、登录、注销。 认证(OAuth、JWT 等)。 权限和角色管理(RBAC/ABAC)。 单点登录(SSO)。 技术亮点: 集成第三方身份认证(如 …...

AI软件外包需要注意什么 外包开发AI软件的关键因素是什么 如何选择AI外包开发语言

1. 定义目标与需求 首先,要明确你希望AI智能体做什么。是自动化任务、数据分析、自然语言处理,还是其他功能?明确目标可以帮助你选择合适的技术和方法。 2. 选择开发平台与工具 开发AI智能体的软件时,你需要选择适合的编程语言、…...

DBSyncer开源数据同步中间件

一、简介 DBSyncer(英[dbsɪŋkɜː(r)],美[dbsɪŋkɜː(r) 简称dbs)是一款开源的数据同步中间件,提供MySQL、Oracle、SqlServer、PostgreSQL、Elasticsearch(ES)、Kafka、File、SQL等同步场景。支持上传插件自定义同步转换业务,提供监控全量…...

< OS 有关 > 阿里云 几个小时前 使用密钥替换 SSH 密码认证后, 发现主机正在被“攻击” 分析与应对

信息来源: 文件:/var/log/auth.log 因为在 sshd_config 配置文件中,已经定义 LogLevel INFO 部分内容: 2025-01-27T18:18:55.68272708:00 jpn sshd[15891]: Received disconnect from 45.194.37.171 port 58954:11: Bye Bye […...

react-bn-面试

1.主要内容 工作台待办 实现思路: 1,待办list由后端返回,固定需要的字段有id(查详细)、type(本条待办的类型),还可能需要时间,状态等 2,一个集中处理待办中转路由页,所有待办都跳转到这个页面…...

1. Java-MarkDown文件创建-工具类

Java-MarkDown文件创建-工具类 1. 思路 根据markdown语法,拼装markdown文本内容 2. 工具类 import java.util.Arrays; import java.util.List;/*** Markdown生成工具类* Author: 20004855* Date: 2021/1/15 16:00*/ public class MarkdownGenerator {private Str…...

全连接神经网络(前馈神经网络)

一、全连接神经网络介绍 在多层神经网络中, 第 N 层的每个神经元都分别与第 N-1 层的神经元相互连接。 1、神经元 这个神经元接收的输入信号为向量 , 向量为输入向量的组合权重, 为偏置项, 是一个标量。 神经元的作用是对输入向…...

【llm对话系统】什么是 LLM?大语言模型新手入门指南

什么是 LLM?大语言模型新手入门指南 大家好!欢迎来到 LLM 的奇妙世界!如果你对人工智能 (AI) 的最新进展,特别是那些能像人类一样阅读、写作甚至进行对话的 AI 感兴趣,那么你来对地方了。这篇文章将带你认识 LLM 的基…...

【Linux】互斥锁、基于阻塞队列、环形队列的生产消费模型、单例线程池

⭐️个人主页:小羊 ⭐️所属专栏:Linux 很荣幸您能阅读我的文章,诚请评论指点,欢迎欢迎 ~ 目录 1、互斥锁2、生产消费模型2.1 阻塞队列2.2 环形队列 3、单例线程池4、线程安全和重入问题 1、互斥锁 临界资源:多线程…...

【学术会议征稿】第五届能源、电力与先进热力系统学术会议(EPATS 2025)

能源、电力与先进热力系统设计是指结合物理理论、工程技术和计算机模拟,对能源转换、利用和传输过程进行设计的学科领域。它涵盖了从能源的生产到最终的利用整个流程,旨在提高能源利用效率,减少能源消耗和环境污染。 重要信息 官网&#xf…...

ES6 类语法:JavaScript 的现代化面向对象编程

Hi,我是布兰妮甜 !ECMAScript 2015,通常被称为 ES6 或 ES2015,是 JavaScript 语言的一次重大更新。它引入了许多新特性,其中最引人注目的就是类(class)语法。尽管 JavaScript 一直以来都支持基于…...

Sprintboot原理

配置优先级 Springboot中支持的三种配置文件: application.propertiesapplication.ymlapplication.yaml java系统属性:-Dxxxxxx 命令行参数:-xxxxxx 优先级:命令行参数>java系统属性>application.properties>applicat…...

OpenHarmony 5.0.2 Release来了!

版本概述 OpenHarmony 5.0.2 Release版本对标准系统的能力进行持续完善,以快速迭代的方式推出API 14,相比5.0.1 Release版本,重点做出了如下特性新增或增强: 进一步增强ArkUI、图形图像的能力,提供更多组件的高级属性…...

Qt 控件与布局管理

1. Qt 控件的父子继承关系 在 Qt 中,继承自 QWidget 的类,通常会在构造函数中接收一个 parent 参数。 这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时,它会自动成为该父控…...

使用小尺寸的图像进行逐像素语义分割训练,出现样本不均衡训练效果问题

在使用小尺寸图像进行逐像素语义分割训练时,确实可能出现样本不均衡问题,且这种问题可能比大尺寸图像更显著。 1. 小尺寸图像如何加剧样本不均衡? (1) 局部裁剪导致类别分布偏差 问题:遥感图像中某些类别(如道路、建…...

0.91英寸OLED显示屏一种具有小尺寸、高分辨率、低功耗特性的显示器件

0.91英寸OLED显示屏是一种具有小尺寸、高分辨率、低功耗特性的显示器件。以下是对0.91英寸OLED显示屏的详细介绍: 一、基本参数 尺寸:0.91英寸分辨率:通常为128x32像素,意味着显示屏上有128列和32行的像素点,总共409…...

读书笔记--分布式服务架构对比及优势

本篇是在上一篇的基础上,主要对共享服务平台建设所依赖的分布式服务架构进行学习,主要记录和思考如下,供大家学习参考。随着企业各业务数字化转型工作的推进,之前在传统的单一系统(或单体应用)模式中&#…...

HTML5 新的 Input 类型详解

HTML5 引入了许多新的输入类型,极大地增强了表单的功能和用户体验。这些新的输入类型不仅提供了更好的输入控制,还支持内置的验证功能,减少了开发者手动编写验证逻辑的工作量。本文将全面介绍 HTML5 中新增的输入类型,并结合代码示…...

ESP32-CAM实验集(WebServer)

WebServer 效果图 已连接 web端 platformio.ini ; PlatformIO Project Configuration File ; ; Build options: build flags, source filter ; Upload options: custom upload port, speed and extra flags ; Library options: dependencies, extra library stor…...

Case逢无意难休——深度解析JAVA中case穿透问题

Case逢无意难休——深度解析JAVA中case穿透问题~ 不作溢美之词,不作浮夸文章,此文与功名进取毫不相关也!与大家共勉!! 更多文章:个人主页 系列文章:JAVA专栏 欢迎各位大佬来访哦~互三必回&#…...

Golang笔记——常用库context和runtime

大家好,这里是Good Note,关注 公主号:Goodnote,专栏文章私信限时Free。本文详细介绍Golang的常用库context和runtime,包括库的基本概念和基本函数的使用等。 文章目录 contextcontext 包的基本概念主要类型和函数1. **…...

2000-2020年各省第二产业增加值占GDP比重数据

2000-2020年各省第二产业增加值占GDP比重数据 1、时间:2000-2020年 2、来源:国家统计局、统计年鉴 3、指标:行政区划代码、地区名称、年份、第二产业增加值占GDP比重 4、范围:31省 5、指标解释:第二产业增加值占GDP比重…...

unity商店插件A* Pathfinding Project如何判断一个点是否在导航网格上?

需要使用NavGraph.IsPointOnNavmesh(Vector3 point) 如果点位于导航网的可步行部分,则为真。 如果一个点在可步行导航网表面之上或之下,在任何距离,如果它不在更近的不可步行节点之上 / 之下,则认为它在导航网上。 使用方法 Ast…...

Day24-【13003】短文,数据结构与算法开篇,什么是数据元素?数据结构有哪些类型?什么是抽象类型?

文章目录 13003数据结构与算法全书框架考试题型的分值分布如何? 本次内容概述绪论第一节概览什么是数据、数据元素,数据项,数据项的值?什么是数据结构?分哪两种集合形式(逻辑和存储)&#xff1f…...