[人工智能-深度学习-51]:循环神经网络 - RNN基本原理详解

2023-10-26

作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121387285


目录

第1章 详解前的铺垫

1.1 组合逻辑 VS 时序逻辑

1.2 循环神经网络 VS 递推神经网络

1.3 RNN的主要应用场景

第2章 循环神经网络RNN的结构 - 个人理解

2.1 “非时序”的组合单元的网络结构

2.2 RNN基本的结构:“时序”单元

2.3 “循环”的含义:网络结构对循环的支持

2.4 “循环”的含义:循环的实施

第3章 循环神经网络RNN的结构 - 官方定义解读

3.1 RNN的“时序”单元

3.2 RNN结构的展开

3.3 RNN的叠加

3.4 双向循环网络

第4章 RNN组网

4.1 RNN网络

4.2  RNN组网形态形态

第5章 循环神经网络的工作原理 

5.1 前向计算/预测: 隐藏层的数学公式(Elman网络)

5.2 循环神经网络的工作原理 - 反向计算:训练 =>BPTT算法

参考:


第1章 详解前的铺垫

1.1 组合逻辑 VS 时序逻辑

[人工智能-深度学习-47]:卷积神经网CNN+循环神经网络RNN与组合电路+时序电路的比较_文火冰糖(王文兵)的博客-CSDN博客https://blog.csdn.net/HiWangWenBing/article/details/121367263

1.2 循环神经网络 VS 递推神经网络

[人工智能-深度学习-48]:RNN是循环神经网络还是递归神经网络?_文火冰糖(王文兵)的博客-CSDN博客https://blog.csdn.net/HiWangWenBing/article/details/121379935

1.3 RNN的主要应用场景

https://blog.csdn.net/HiWangWenBing/article/details/121437994https://blog.csdn.net/HiWangWenBing/article/details/121437994

第2章 循环神经网络RNN的结构 - 个人理解

2.1 “非时序”的组合单元的网络结构

上图的案例是:“非时序”单元的网络结构,即“组合”逻辑的网络结构。

在上图案例中:

  • 输入层的输入特征的维度为:1 * 2
  • 输入层的W矩阵的维度为:    2 * 3
  • 隐藏层输出特征的维度为       1 * 3 = (1 * 2)X ( 2 * 3)
  • 输出层的W矩阵的维度为:    3 * 5
  • 输出层输出特征的维度为:   1 * 5  =(1 * 3)x ( 3 * 5)

2.2 RNN基本的结构:“时序”单元

(1)内部结构

相对于“组合”网络,“时序”网络多出来的逻辑包括:

  • 内部的隐藏状态S(与X一起,作为隐藏层神经元的输入),通常通过张量Tensor来保存。
  • 内部的隐藏状态的输入张量与隐藏层神经元之间的连接:W矩阵。
  • 内部的隐藏状态S的输入(前一时刻T0)
  • 内部的隐藏状态S的输出(当前时刻T1)

(2)等效结构

与组合电路不同的是,RNN网络(不包括输出层)包括了两个输入,两个输出,两个权重矩阵,一组神经元。

  • 输入:用于保存输入特征的张量/向量X:(X1,X2...Xn)=》同“组合”单元 ,假设形状为 1 * N =》同“组合”单元
  • 输入:上一次前向运算时的隐层输出S =》“时序”单元新增
  • 神经元:用于隐藏层处理/运算的神经元:  (H1, H2, ...Hm) =》同“组合”单元。
  • 输出:前向计算的输出, 假设其形状为 1 * M =》同“组合”单元
  • 输出:隐层的输出 =》 “时序”单元新增, 该输入,既作为输出层的输入,同时也作为RNN网络的输出。
  • W权重矩阵:X特征向量与隐藏层神经元构成的权重矩阵,有时候称为Wx矩阵,又时候称为U矩阵, 则U矩阵的形状为: N  * M. 
  • W权重矩阵:隐藏层内部状态向量或张量与隐藏层神经元构成的权重矩阵,有时候称为Wh矩阵, 有时候也简称为W矩阵, 则该矩阵的形状为 M * M!!! 见上图。

备注:

  • 上文中,“红色”标注的部分,都是“时序”单元新增加的内容。
  • 隐藏状态S的形状、RNN隐藏层的输出、隐藏层的特征数是一致的、相等的, 都为 1 * M

(3)RNN网络的两种类型

  • Elman network:是一个隐藏层的输出Hi经过时延后作为下一时刻这一层的输入的一部分,然后recurrent层的输出同时送到网络后续的层,比如最终的输入层。
  • Jordan network:直接把整个网络最终的输出Yi(i.e. 输出层的输出)经过时延后反馈回网络的输入层。

现在一般说的RNN(包括LSTM、GRU等等)都是用Elman network

2.3 “循环”的含义:网络结构对循环的支持

循环神经网络的核心是“循环”!讲清楚“循环”含义实现,才能真正的理解循环神经网络。

T时刻的隐藏层的输出,作为T + 1时刻的隐藏状态S的输入,就构成了上图中的蓝色的“循环线”。

2.4 “循环”的含义:循环的实施

蓝色的循环线,到底如何实现呢?

RNN神经网络自身来实现“循环”

还是由RNN网络外部的使用者来实现“循环”呢?

其实RNN网络本身并没有对此作出限制,这两种形式或方式都有:

(1)压缩/单体结构:RNN网络的使用者实现串联

(2)展开/串联结构: RNN网络自身实现串联

2.5 RNN的压缩结构:由外部的RNN网络的使用者来实现“循环”

(1)网络的基本结构

(2)时间序列输入的实现流程

在这种模式下,RNN的使用者,负责读取T时刻的隐层状态的输出,并在T+1时刻,把T时刻的状态值作为隐层状态S, 与T+1时刻的X一起,作为隐藏层神经元的输入, 如下所示:

伪代码实现方法:

  •  hide_state的初始化

hide_state = {0}

  • T+0时刻对Xt+0进行预测:

output, hide_state = rnn.forward (Xt + 0, hide_state)

  • T+1时刻对Xt+1进行预测:

output, hide_state = rnn.forward (Xt + 1, hide_state)

  • T+2时刻对Xt+2进行预测:

output, hide_state = rnn.forward (Xt +2, hide_state)

(3)优点

  • RNN网络的结构简单
  • RNN网络本身消耗的内存小,RNN网络不需要保存整个序列历史状态的张量,只需要保存当前的历史状态hide_state。如果需要记录序列的历史状态或输出结果,则需要RNN的使用者保存。

(4)缺点

  • RNN网络不能并行的处理序列输入,一次只能处理一个序列中的一个单元(如单词),如“I love china”这个序列,RNN网络一次只能处理一个单词,无法并行的处理整句话(多个单词组成的序列)。

2.6 RNN展开结构:由RNN网络自身来实现序列内的“循环”

(1)网络的基本结构

  • 在这种模式下,RNN网络自身会记住长度为m的序列的中间状态(通过张量Tensor变量实现)
  • 在这种模式下,RNN网络是由m个"时序"单元横向串联而成。m越大,RNN网络能够并行处理的序列的长度越长, 即等于m。

 (2)时间序列输入的实现流程

当RNN网络的使用者, 其待处理的序列数据的长度Seq_len > RNN能够并行处理的序列数据的长度m时,RNN网络的使用者,负责待处理原始序列数据的分割,分割成长度为m的序列,并由它负责把长度为m的不同序列串联起来。

  •  hide_state的初始化

hide_state = {0}

  • T+0时刻, 对长度为m的序列进行预测:

output, hide_state = rnn.forward ([Xt+0, Xt+1, ...., Xt+m-1], hide_state)

  • T+1时刻, 对长度为m的序列进行预测:

output, hide_state = rnn.forward ([Xt+m+0, Xt+m+1, ...., Xt+2m-1], hide_state)

  • T+2时刻, 对长度为m的序列进行预测:

output, hide_state = rnn.forward ([Xt+2m+0, Xt+2m+1, ...., Xt+3m-1], hide_state)

备注:

  • 长度为m序列的内部单元之间的串联由RNN网络自身负责完成。
  • 长度为m序列的外部序列之间的串联由RNN的使用者负责完成。

(3)优点

  • RNN网络,可以一次性处理由多个“单元”组成的输入序列,序列的长度取决于“时序”单元的个数,如一次性可以处理m个单词次组成的句子。

(4)缺点

  • RNN网络需要张量保存每个“时序”单元的隐层的状态输出,要消耗用RNN网络的内存大小。

(5)特点

  • 每个“时序”单元,针对不同的输入Xi,采用相同的特征提取算法。
  • 每个“时序”单元的输入数据X的权重矩阵是共享的。
  • 每个“时序”单元的隐层状态S的权重矩阵是共享的。

2.7 RNN的堆叠结构:

RNN堆叠是在原有隐层的基础之上,堆叠更多的隐层(不包括输入和输出层),包括其隐层状态保持器。

第3章 循环神经网络RNN的结构 - 官方定义解读

3.1 RNN的“时序”单元

  • Xt:为t时刻的样本的输入
  • A: 为RNN特有的时序单元
  • Ht:为t时刻,RNN时序单元的输出,即隐藏层的输出
  • 循环:为t时刻的隐层的特征输出,成为t+1时刻,隐层的特征输入,与t+1时刻的样本Xt+1同时作为RNN时序单元的输入。

3.2 RNN结构的展开

  • X0, X1.....Xt:为t=0,1,2,...时刻的序列输入
  • h0, h1......ht:  为t=0,1,2,...时刻的隐层输出
  • A: RNN的单个时序单元,他们一次串联起来。
  • 隐层的输入:送给第一个时序单元
  • 隐层的输出:最后一个时序单元

3.3 RNN的叠加

3.4 双向循环网络

 双向循环网络是两套隐层,一套为前向层,另一套是后向层,他们有独立的W矩阵和状态张量。

第4章 RNN组网

4.1 RNN网络

RNN与CNN类似,都是特征提取的功能,本身并不能独立组网(神经网络),还需要输入层,实现样本数据的输入。还需要输出层,完成根据特征进行分类或其他功能的输出。

4.2  RNN组网形态形态

不同的组网形态,有不同的应用场景。

第5章 循环神经网络的工作原理 

5.1 前向计算/预测: 隐藏层的数学公式(Elman网络)

  • 激活函数:隐藏层的激活函数通常是tanh,也可以是其他函数。
  • 输入样本的W矩阵:w_{ih} * x_{t} + b_{ih}
  • 隐层状态的W矩阵:w_{hh} * x_{t} + b_{hh}

5.2 循环神经网络的工作原理 - 反向计算:训练 =>BPTT算法

有了RNN前向传播算法的基础,就容易推导出RNN反向传播算法的流程了。

RNN反向传播算法的思路和DNN(组合逻辑网络)是一样的,即通过梯度下降法一轮轮的迭代,得到合适的RNN模型参数U,W,V,b,c 。

由于我们是基于时间反向传播,所以RNN的反向传播有时也叫做BPTT(back-propagation through time)。当然这里的BPTT和DNN也有很大的不同点,即这里所有的U,W,V,b,c在序列的各个位置是共享的,反向传播时我们更新的是相同的参数。

 为了简化描述,这里的损失函数我们为对数损失函数,输出的激活函数为softmax函数,隐藏层的激活函数为tanh函数。

对于RNN,由于我们在序列的每个位置都有损失函数,因此最终的损失LL 为:

 其中V,c, 的梯度计算是比较简单的:

 但是W,U,b 的梯度计算就比较的复杂了。从RNN的模型可以看出,在反向传播时,在在某一序列位置t的梯度损失由当前位置的输出对应的梯度损失和序列索引位置t+1t+1 时的梯度损失两部分共同决定。对于W 在某一序列位置t的梯度损失需要反向传播一步步的计算。我们定义序列索引tt 位置的隐藏状态的梯度为:

 这样我们可以像DNN一样从δ(t+1) 递推δ(t) 

 对于δ(τ) ,由于它的后面没有其他的序列索引了,因此有:

有了δ(t) ,计算W,U,b 就容易了,这里给出W,U,b 的梯度计算表达式: 


参考:

(超详细!!)Pytorch循环神经网络(RNN)快速入门与实战_热爱技术,热爱生活!-CSDN博客_rnn循环神经网络

循环神经网络RNN打开手册 - 知乎 (zhihu.com)

循环神经网络RNN_腾讯视频 (qq.com)

复旦大学机器学习公开课:77-循环神经网络的训练和示例,教育,资格考试,好看视频


作者主页(文火冰糖的硅基工坊):文火冰糖(王文兵)的博客_文火冰糖的硅基工坊_CSDN博客

本文网址:https://blog.csdn.net/HiWangWenBing/article/details/121387285

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

[人工智能-深度学习-51]:循环神经网络 - RNN基本原理详解 的相关文章

随机推荐

  • Python+Selenium-5-driver.page_source获取页面源码

    driver page source selenium的page source方法可以获取到页面源码 跟爬虫有点相似 获取到页面资源 提取出我们需要的信息 案例 以煎蛋网为例 获取首页的全部title 获取页面源码 使用re正则提取需要的t
  • SpringBoot自定义工厂类读取yml配置文件&&SpringBoot轻松读取properties文件

    PropertySource指定文件地址 ConfigurationProperties指定前缀 第一次 SpringBoot 读取配置文件 demo如下 designers yml文件 designer owner openids 8hV
  • IDEA导入lib目录下的jar包

    https blog csdn net u010286027 article details 85248719 ops request misc request id biz id 102 utm term idea E6 96 B0 E5
  • LeetCode【114】二叉树展开为链表

    题目 给定一个二叉树 原地将它展开为链表 例如 给定二叉树 将其展开为 最终转化完 pre节点只有right 没有left TreeNode pre null public void flatten TreeNode root if roo
  • 【Mariadb高可用MHA】

    目录 一 概述 1 概念 2 组成 3 特点 4 工作原理 二 案例介绍 1 192 168 42 3 2 192 168 42 4 3 192 168 42 5 4 192 168 42 6 三 实际构建MHA 1 ssh免密登录 1 1
  • openshift搭建Istio

    本文档覆盖了官方文档的Setup的所有章节 一 安装Istio 本次安装的Istio版本为1 7 0 环境为openshift 4 3 注 不建议使用openshift 1 11 即kubernetes 3 11 安装istio 可能会出现
  • HBase简介(很好的梳理资料)

    http jiajun iteye com blog 899632 一 简介 history started by chad walters and jim 2006 11 G release paper on BigTable 2007
  • 腾讯云如何修改域名DNS服务器

    当你在腾讯云购买域名后 如果 DNS 服务器不正确 要把域名 DNS 修改为提示的 DNS 地址 解析后才生效 下面老魏说下操作步骤 一 通过以下步骤查看 DNS 服务器是否正确 登录腾讯云控制台 选择 云产品 gt 域名与网站 gt 云解
  • 短视频seo矩阵系统源码开发与部署全解析

    在这个数字化快速发展的时代 短视频已经成为人们获取娱乐 学习 商业信息的主要途径之一 对于企业来说 利用短视频矩阵进行高效且精准的营销推广 无疑是一个重要的战略方向 本文将详细介绍如何进行短视频矩阵源码的开发与部署 一 开发篇 短视频矩阵源
  • linux 常用语句 grep、awk、sed

    复习资料 一 find grep 管道符 1 find 路径 name 文件名 查找文件 2 grep sex true 文本包含sex true 的行显示出来 3 grep sex true grep o age 18 对grep sex
  • 【Kettle】将【MySQL表按字段同步、更新】【脚本运行】

    前提数据 转换 1 表输入设置 2 插入 更新设置 作业 模块设置 SQL设置 手动输入脚本内容 每次运行都会运行此脚本
  • 十、工业相机与SCARA机械臂的坐标系标定

    注 感谢固高长江研究院徐工程师的技术讲解 以及matlab程序 机器人系统程序的提供 在工业现场当中 相机拍摄到的图像有一个相机坐标系 而机器人自身也有一个机器人自身的坐标系 两者互相独立 当我们通过相机进行对物体进行拍摄 通过模式识别得到
  • pygame 学习记录

    话不多说上代码 import pygame import sys pygame init size width height 900 700 speed 2 1 bg 255 255 255 RGB screen pygame displa
  • 文件上传的各种绕过方式

    1 前端绕过 更改前端的过滤方法进行绕过 1 通过浏览器插件来删除检查后援js代码 然后上传webshell 2 上传文件时把后缀名改成png格式 上传时在通过抓包工具把后缀名改回来 3 更改Content Tybe为image jpeg
  • C#连接sqlServer数据库详解

    C 是如何跟SQL Server进行连接的 在C NET程序设计中 离不开ADO NET ADO NET是 NET连接数据库的重要组件 使用其可以很方便地访问数据库 ADO NET还可以访问Oracle数据库 Access数据库 SQL S
  • Echarts dataZoom x轴横坐标缩放

    https echarts apache org zh option html dataZoom Echarts dataZoom x轴横坐标缩放 把 dataZoom 房子 option下的第一级 和 xAxis yAxis series
  • SpringBoot 启动成功监听

    CommandLineRunner 接口 启动成功后的回调 接口代码 package org springframework boot FunctionalInterface public interface CommandLineRunn
  • MySQL优化(二):MySQL 索引深入解读

    目录 一 索引是什么 1 索引定义 2 索引类型 3 索引的创建 4 索引的删除 二 索引存储模型 2 1 二分查找 2 2 二叉查找树 2 3 平衡二叉树 2 4 多路平衡查找树 B Tree 2 5 加强版多路平衡查找树 B Tree
  • 【统计模拟及其R实现】分层抽样法 / 条件期望法 习题答案(超详细)

    课本 统计模拟及其R实现 肖枝红 朱强 武汉大学出版社 参考资料 方差缩减技术 条件期望法 目录 1 分层抽样法 2 条件期望法 1 分层抽样法 题目1 如何通过分层抽样法得到
  • [人工智能-深度学习-51]:循环神经网络 - RNN基本原理详解

    作者主页 文火冰糖的硅基工坊 文火冰糖 王文兵 的博客 文火冰糖的硅基工坊 CSDN博客 本文网址 https blog csdn net HiWangWenBing article details 121387285 目录 第1章 详解前