递归神经网络:(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.各组件功…

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…

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;谁让我们生在这个卷中卷的国度&#…

指数计算(填空)

解题思路&#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;很多主播和品牌商都通过直播电商业…

Bug: git stash恢复误drop的提交

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

01.领域驱动设计:微服务设计为什么要选择DDD学习总结

目录 1、前言 2、软件架构模式的演进 3、微服务设计和拆分的困境 4、为什么 DDD适合微服务 5、DDD与微服务的关系 6、总结 1、前言 我们知道&#xff0c;微服务设计过程中往往会面临边界如何划定的问题&#xff0c;不同的人会根据自己对微服务的理 解而拆分出不同的微服…

vue2 事件总线

原图下载&#xff1a;https://download.csdn.net/download/weixin_47401101/88788636

面向Java开发者的ChatGPT提示词工程(11)扩写

什么是扩写&#xff1f; 扩写是指将较短的文本交给GPT生成更长的文本。比如&#xff1a;根据一组基本指令&#xff0c;写出一封完整的电子邮件&#xff1b;或者根据一系列主题&#xff0c;创作出一篇包含这些主题的文章。 这样的技术&#xff0c;有着广阔的应用场景&#xff…

【蒸馏】目标检测蒸馏的不完全整理和个人笔记

其实仔细想想模型蒸馏的监督信号无非来自原先损失函数&#xff08;分类&#xff0c;bbox&#xff09;或者是相关组件&#xff08;backbone&#xff0c;FPN&#xff09;&#xff0c;在这里我不太想用传统的logit蒸馏和feature map蒸馏来表示上面两种蒸馏方式&#xff0c; 主要是…

深入浅出 diffusion(4):pytorch 实现简单 diffusion

1. 训练和采样流程 2. 无条件实现 import torch, time, os import numpy as np import torch.nn as nn import torch.optim as optim from torchvision.datasets import MNIST from torchvision import transforms from torch.utils.data import DataLoader from torchvision.…