当前位置: 首页 > 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 参数。 这个参数用于指定当前空间的父控件,从而建立控件间的父子关系。 当一个控件被设置为另一控件的子控件时,它会自动成为该父控…...

Android Wi-Fi 连接失败日志分析

1. Android wifi 关键日志总结 (1) Wi-Fi 断开 (CTRL-EVENT-DISCONNECTED reason3) 日志相关部分: 06-05 10:48:40.987 943 943 I wpa_supplicant: wlan0: CTRL-EVENT-DISCONNECTED bssid44:9b:c1:57:a8:90 reason3 locally_generated1解析: CTR…...

从WWDC看苹果产品发展的规律

WWDC 是苹果公司一年一度面向全球开发者的盛会,其主题演讲展现了苹果在产品设计、技术路线、用户体验和生态系统构建上的核心理念与演进脉络。我们借助 ChatGPT Deep Research 工具,对过去十年 WWDC 主题演讲内容进行了系统化分析,形成了这份…...

在鸿蒙HarmonyOS 5中实现抖音风格的点赞功能

下面我将详细介绍如何使用HarmonyOS SDK在HarmonyOS 5中实现类似抖音的点赞功能,包括动画效果、数据同步和交互优化。 1. 基础点赞功能实现 1.1 创建数据模型 // VideoModel.ets export class VideoModel {id: string "";title: string ""…...

Unit 1 深度强化学习简介

Deep RL Course ——Unit 1 Introduction 从理论和实践层面深入学习深度强化学习。学会使用知名的深度强化学习库,例如 Stable Baselines3、RL Baselines3 Zoo、Sample Factory 和 CleanRL。在独特的环境中训练智能体,比如 SnowballFight、Huggy the Do…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域,向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能,能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作,并通过具体…...

C# 求圆面积的程序(Program to find area of a circle)

给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...

Springboot社区养老保险系统小程序

一、前言 随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,社区养老保险系统小程序被用户普遍使用,为方…...

SiFli 52把Imagie图片,Font字体资源放在指定位置,编译成指定img.bin和font.bin的问题

分区配置 (ptab.json) img 属性介绍: img 属性指定分区存放的 image 名称,指定的 image 名称必须是当前工程生成的 binary 。 如果 binary 有多个文件,则以 proj_name:binary_name 格式指定文件名, proj_name 为工程 名&…...

面向无人机海岸带生态系统监测的语义分割基准数据集

描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...

JavaScript基础-API 和 Web API

在学习JavaScript的过程中,理解API(应用程序接口)和Web API的概念及其应用是非常重要的。这些工具极大地扩展了JavaScript的功能,使得开发者能够创建出功能丰富、交互性强的Web应用程序。本文将深入探讨JavaScript中的API与Web AP…...