递归神经网络:(01/4) 顺序数据处理的骨干

@koushikkushal95

一、说明

循环神经网络是一个里程碑式的模型框架,它是对时间串处理的最基本构架;而理解RNN也是对自然语言处理模型的开端,本篇将对该模型的基本原理进行介绍。

二、顺序数据处理的架构

        递归神经网络 (RNN) 是一种专为处理顺序数据而设计的神经网络架构。它们特别适用于输入数据顺序至关重要的任务,例如自然语言处理、时间序列分析和语音识别。

(1)RNN 时间步长。 

        对于每个时间步长 t,激活 y<t>,h<t> 和输出表示如下:

(2)RNN- 单时间步长 

三、RNN 的每个时间步长如何工作 

        RNN 维护一个隐藏状态,该状态在每个时间步都会根据当前输入和之前的隐藏状态进行更新。这种隐藏状态用作内存,允许网络捕获有关先前输入的信息,并使用它来影响当前的预测。每个时间步的基本操作如下:

        前向传播

        这里:

  • ht 是时间 t 的隐藏状态,
  • xt 是时间 t 的输入,
  • Whx,为什么是输入的权重矩阵,
  • Whh 是隐藏状态的权重矩阵,
  • bh, by 是偏置项,

        代码单单元 RNN—

   def forward(self, x):# this list i create  for backpropagationself.intermediate_values = []hidden_states = []outputs = []for t in range(len(x)):x_t = x[t].reshape(-1, 1)h_t = np.tanh(np.dot(self.W_hx, x_t) + np.dot(self.W_hh, self.h_t) + self.b_h)y_t = np.dot(self.W_yh, h_t) + self.b_y# Store hidden state and output for this timestephidden_states.append(h_t)outputs.append(y_t)# Update hidden state for the next timestepself.h_t = h_t# Store intermediate values for backpropagationself.intermediate_values.append((x_t, h_t, y_t))return outputs, hidden_states

        损失函数 — 在递归神经网络的情况下,所有时间步长的损失函数 L 根据每个时间步长的损失定义如下:

        反向传播 —

        1. 损失随时间的反向传播:

        2. Whx 随时间的反向传播:

        3. Whh 随时间的反向传播:

        4. B H 随时间的反向传播:

        5. Tanh 随时间的反向传播:

def backward(self, x, targets):# Initialize gradientsdL_dW_hx = np.zeros_like(self.W_hx)dL_dW_hh = np.zeros_like(self.W_hh)dL_db_h = np.zeros_like(self.b_h)dL_dW_yh = np.zeros_like(self.W_yh)dL_db_y = np.zeros_like(self.b_y)# Initialize gradient of loss with respect to hidden statedL_dh_t = np.zeros_like(self.h_t)# Backpropagation through timefor t in reversed(range(len(x))):x_t, h_t, y_t = self.intermediate_values[t]target_t = targets[t].reshape(-1, 1)# Compute loss gradient with respect to outputdL_dy_t = y_t - target_t #. 1# Compute gradient of loss with respect to hidden state# dervative of (h_t*w_hy+b_y) with respect of htdL_dh_t += np.dot(self.W_yh.T, dL_dy_t) # 2,3,4# Backpropagation through tanh#derivative of tanh(x) with respect to x is 1- tan**2(x)dtanh = (1 - h_t**2) * dL_dh_t # 5# Accumulate gradients for the parametersdL_dW_hx += np.outer(dtanh, x_t)dL_dW_hh += np.outer(dtanh, h_t)dL_db_h += dtanhdL_dW_yh += np.outer(dL_dy_t, h_t)dL_db_y += dL_dy_t# Update gradient of loss with respect to hidden state for the next timestep# dervative of (h_t-1*w_hh+b_y) with respect of ht-1dL_dh_t = np.dot(self.W_hh.T, dtanh)

        我们初始化每个参数的梯度和相对于隐藏状态 (ht) 的损失梯度。我们从最后一个时间步开始,通过时间进行反向传播。对于每个时间步长,我们计算参数的梯度,并累积相对于隐藏状态的损失梯度。使用梯度下降更新梯度。

四、通常使用以下方式的激活 

(3)激活。

培训 —

def train(self, x, targets, epochs):for epoch in range(epochs):# Forward passoutputs, _ = self.forward(x)# Compute and print the lossloss = 0.5 * np.mean((outputs - targets)**2)print(f"Epoch {epoch + 1}/{epochs}, Loss: {loss}")# Backward passself.backward(x, targets)

        我们执行指定数量的 epoch 的训练。在每个纪元中,我们执行前向传递,计算损失并打印它。然后,我们执行向后传递以更新模型参数。

五、RNN的应用  

        虽然上图中描绘了递归神经网络,即所谓的前馈网络,但它们并不以这种方式受到限制。相反,前馈网络将一个输入映射到一个输出。相反,它们的输入和输出的长度可能会有所不同,并且不同种类的 RNN 被用于各种用例,包括机器翻译、情感分析和音乐创作。

(4)RNN的应用。来源:Shervine博客

六、深度 RNN 

        处理深度递归神经网络 (RNN) 时,您有多种选择来设计和实现架构。一种常见的方法是堆叠多层 RNN,从而创建深度 RNN 架构。以下是有关如何设计深度 RNN 的说明:

深度 RNN。来源:斯坦福大学

        堆叠 RNN 层 —

  • 您可以将多个 RNN 层堆叠在一起,以创建深度架构。
  • 堆栈中的每一层都按顺序处理输入序列,其隐藏状态将作为输入传递到下一层。
  • 顶层的输出通常用于进行预测或进一步处理。

        深度 RNN 可能是计算密集型的,训练可能需要更长的时间。批量归一化或层归一化等技术对于训练更深层次的网络非常有用。您也可以考虑使用更高级的 RNN 架构(如 LSTM 或 GRU)来解决梯度消失/爆炸问题。

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

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

相关文章

字典树-Python

字典树 字典树又叫前缀树、单词查找树&#xff0c;树形结构&#xff0c;是哈希树的变种。能够统计、排序和保存大量的字符串&#xff0c;经常被搜索引擎系统用于文本词频统计。优点是利用字符串的公共前缀来减少查询时间&#xff0c;最大程度减少无谓字符串的比较&#xff0c;…

HBase入门:运行机制

文章目录 HBase 系统架构客户端ZooKeeper 服务器Master 主服务器Region 服务器 Region 服务器工作原理用户读写数据的过程缓存的刷新StoreFile合并 Store 的工作原理HLog 的工作原理 HBase 系统架构 HBase 的系统架构包括客户端、ZooKeeper 服务器、Master 主服务器、Region服…

什么是SQL,什么是MYSQL?MYSQL的架构以及SQL执行语句的过程是什么?有哪些数据库的类型?一篇文章带你弄懂!

文章目录 前言一、为什么需要数据库二、数据库的相关概念1.什么是结构化查询语言 (SQL)2.什么是数据库管理系统 (DBMS)3.什么是 MySQL 数据库 三、数据库分类1.关系型数据库&#xff08;SQL&#xff09;2.非关系型数据库&#xff08;NoSQL&#xff09; 四、MYSQL架构1.各组件功…

【大厂AI课学习笔记】1.2 现阶段人工智能方法和技术领域

目录 1.2 现阶段人工智能方法和技术领域 1.2.1 从技术应用场景展开 计算机视觉 语音识别 自然语言处理 1.2.2 实现AI的技术工具 机器学习的主要类型&#xff1a; 深度学习的重要性&#xff1a; 1.2 现阶段人工智能方法和技术领域 1.2.1 从技术应用场景展开 计算机视觉…

OpenCV-27 Canny边缘检测

一、概念 Canny边缘检测算法是John F.Canny与1986年开发出来的一个多级边缘检测算法&#xff0c;也被很多人认为是边缘检测的最优算法。最优边缘检测的三个主要评价标准是&#xff1a; 低错频率&#xff1a;表示出尽可能多的实际边缘&#xff0c;同时尽可能的减小噪声产生的误…

503 Service Temporarily Unavailable nginx 原因和解决办法

前言 HTTP 503 Service Temporarily Unavailable 错误通常表示服务器无法处理请求&#xff0c;可能是由于服务器过载、维护或其他临时性问题导致的。在 Nginx 中&#xff0c;这种错误通常与后端服务的可用性问题相关。以下是可能的原因和解决办法&#xff1a; 正文…

windows安装openResty

一、openResty安装 1、下载 进入openResty官网&#xff1a; OpenResty - 下载 下载下图中的64zip包 2、解压zip&#xff0c;进入目录 进入conf目录&#xff08;openresty-1.25.3.1-win64\conf&#xff09;&#xff0c;找到nginx.conf文件&#xff0c;打开 3、修改配置文件&a…

ChatGPT AI革命-阅读心得

ChatGPT AI革命-阅读心得 一、揭秘ChatGPT二、OpenAI三剑客三、让ChatGPT飞起来四、ChatGPT的商业化落地五、ChatGPT编程六、AIGC与产业生态七、其他AIGC工具八、AIGC背后的伦理、法制和法律 本书围绕2022年11月OpenAI发布ChatGPT&#xff0c;ChatGPT在人工智能领域引起巨大轰动…

k8s学习-DaemonSet和Job

1.1DaemonSet是什么 Deployment部署的副本Pod会分布在各个Node上&#xff0c;每个Node都可能运行好几个副本。DaemonSet的不同之处在于&#xff1a;每个Node上最多只能运行⼀个副本。DaemonSet的典型应用场景有&#xff1a; &#xff08;1&#xff09;在集群的每个节点上运⾏存…

Redis 面试题 | 16.精选Redis高频面试题

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

【css揭秘】

文章目录 背景与边框半透明边框多重边框box-shadowoutline 背景定位background-positionbackground-origincalc() 条纹背景水平条纹 形状圆形圆柱自适应的椭圆半椭圆四分之一椭圆 背景与边框 半透明边框 目标&#xff1a;给一个容器设置一层白色背景和一道半透明白色边框 写…

Redis学习——入门篇③

Redis学习——入门篇③ 1. Redis事务1.1 事务实际操作1.2 watch 2. Redis管道&#xff08;pipelining&#xff09;2.1 管道简介2.2 管道实际操作2.3 管道小总结 3. Redis&#xff08;pub、sub&#xff09;发布订阅(不重要)3.1 简介3.2 发布订阅实际操作 这是一个分水岭…

1.【Vue3】前端开发引入、Vue 简介

1. 前端开发引入 1.1 前端开发前置知识 通过之前的学习&#xff0c;已经通过 SpringBoot 和一些三方技术完成了大事件项目的后端开发。接下来开始学习大事件项目的前端开发&#xff0c;前端部分借助两个框架实现&#xff1a; Vue3&#xff08;一个 JS 框架&#xff09;基于 …

go 引用fork后的模块的两种方式(replace和工作区)

很久没更新了&#xff0c;一是工作琐碎&#xff0c;二是处在舒适区&#xff0c;但最近看着身边的同事一个个离开&#xff0c;危机感骤然而生&#xff0c;不得不重拾书本&#xff0c;毕竟生活还得继续&#xff0c;不卷是不可能的&#xff0c;谁让我们生在这个卷中卷的国度&#…

MySQL主从同步数据库环境部署

本次部署的是MySQL主从环境的数据库信息 IP用途134.80.21.140Master134.80.21.141Slave 下面部署的详细配置 1.卸载系统自带的Mariadb [rootmysql-master ~]# rpm -qa |grep -i mariadb mariadb-libs-5.5.68-1.el7.x86_64 rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodep…

指数计算(填空)

解题思路&#xff1a; 7的2020次方很大&#xff0c;需要用BigInteger来进行运算。 pow用来算指数运算。 remainder用来算BigInteger之间的取余。 解题代码&#xff1a; public static void main(String[] args) {BigInteger xnew BigInteger ("7");BigInteger ynew…

开源直播电商系统的实现方式(仿抖音电商模式)

当下&#xff0c;传统的图文电商模式正在走向没落&#xff0c;以“抖音”为首的直播电商模式备受用户追捧&#xff0c;它具有直观与互动的特点&#xff0c;拥有传统电商所不具备的优势。而且&#xff0c;当前正是直播电商的红利期&#xff0c;很多主播和品牌商都通过直播电商业…

阿里云上传文件

阿里云上传文件1&#xff08;未分模块&#xff09; 1、pom文件加入依赖 <!--阿里云 OSS 依赖--> <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.15.1</version> </d…

Bug: git stash恢复误drop的提交

Bug: git stash恢复误drop的提交 前几天在写ut时突然需要通过本地代码临时出一个包&#xff0c;但是本地ut又不想直接作为一个commit提交&#xff0c;所以为了省事就将ut的代码暂时stash起来。出完包后想apply stash&#xff0c;但是手误操作点成了drop stash&#xff0c;丢失了…

并发编程【2】

01.什么是僵尸进程&#xff0c;孤儿进程 僵尸进程是指在进程已经终止但是其父进程尚未终止信息&#xff08;退出状态码&#xff09;的情况下。保留在进程表中的进程。僵尸进程不占用实际的系统资源&#xff0c;但会占用一个进程ID&#xff0c;并且会在系统中产生垃圾。 孤儿是指…