首页 > 其他分享 >RNN(循环神经网络)

RNN(循环神经网络)

时间:2023-04-05 22:57:11浏览次数:50  
标签:mathbb mathbf RNN times 神经网络 循环 network

1.递归神经网络的历史版本

递归神经网络有两种类型:Jordan network和Elman network;现在常用的RNN(包括LSTM、GRU等)都是使用Elman network。

Elman network是在Jordan network的基础上进行了创新,并且简化了它的结构。

它们之间的区别:

  • Jordan network是将网络的输出层反馈回网络的输入层;
  • Elman network的每一个循环层都是互相独立的,因此网络结构的设计可以更加灵活;当Jordan network的输出层与循环层的维度不一致时还需要额外的调整;

因此当前的主流的循环神经网络都是基于Elman network。

2.RNN

2.1 RNN原理

循环神经网络(recurrent neural networks,RNNs)是具有隐状态的神经网络。

循环神经网络原理图:

设在时间步t有小批量输入\(\mathbf{X}_{t} \in \mathbb{R}^{n \times d}\),其中批量大小为n,输入维度为d。对于n个序列样本的小批量,\(\mathbf{X}_{t}\)的每一行对应于来自该序列的时间步\(t\)处的一个样本。

用\(\mathbf{H}_{t} \in \mathbb{R}^{n \times h}\)表示时间步t的隐藏变量。与多层感知机不同,这里保存了前一个时间步的隐藏变量\(\mathbf{H}_{t-1}\),并引入了一个新的权重参数\(\mathbf{W}_{h h} \in \mathbb{R}^{h \times h}\),用于描述如何在当前时间步中使用前一个时间步的隐藏变量。

当前时间步隐藏变量的计算公式:

\[\mathbf{H}_{t}=\phi\left(\mathbf{X}_{t} \mathbf{W}_{x h}+\mathbf{H}_{t-1} \mathbf{W}_{h h}+\mathbf{b}_{h}\right) \]

对于时间步t,输入层的输出为:

\[\mathbf{O}_{t}=\mathbf{H}_{t} \mathbf{W}_{h q}+\mathbf{b}_{q} \]

循环神经网络的参数包括隐藏层的权重\(\mathbf{W}_{x h} \in \mathbb{R}^{d \times h}\),\(\mathbf{W}_{h h} \in \mathbb{R}^{h \times h}\)和偏置\(\mathbf{b}_{h} \in \mathbb{R}^{1 \times h}\),以及输出层的权重\(\mathbf{W}_{h q} \in \mathbb{R}^{h \times q}\)和偏置\(\mathbf{b}_{q} \in \mathbb{R}^{1 \times q}\)。即使在不同的时间步,循环神经网络参数共享。因此,循环神经网络的参数开销不会随着时间步的增加而增加。

2.2 pytorch实现RNN

torch.nn.RNN(*args,**kwargs)

隐藏层输出公式为:

\[h_{t}=\tanh \left(x_{t} W_{i h}^{T}+b_{i h}+h_{t-1} W_{h h}^{T}+b_{h h}\right) \]

参数:

  • input_size – The number of expected features in the input x
  • hidden_size – The number of features in the hidden state h
  • num_layers – Number of recurrent layers. E.g., setting num_layers=2 would mean stacking two RNNs together to form a stacked RNN, with the second RNN taking in outputs of the first RNN and computing the final results. Default: 1
  • nonlinearity – The non-linearity to use. Can be either 'tanh' or 'relu'. Default: 'tanh'
  • bias – If False, then the layer does not use bias weights b_ih and b_hh. Default: True

参考链接:
[1] https://en.wikipedia.org/wiki/Recurrent_neural_network

标签:mathbb,mathbf,RNN,times,神经网络,循环,network
From: https://www.cnblogs.com/AccompanyingLight/p/17019800.html

相关文章

  • 第十五篇、事件 - 事件对象、事件类型、事件循环
    bycaixin深圳事件对象DOM中发生事件时,所有的相关信息都会被收集并存储在一个名为event的对象中这个对象包含了一些基本的信息,比如导致事件的元素,发生的事件类型,以及可能与特定事件相关的任何其他数据,所有的浏览器都支持这个对象,尽管支持的方式不同DOM在触发某个事件的时......
  • python 复制幻灯片并替换相应文字作为新的幻灯片_循环替换
    #encoding=utf8#-*-coding:utf-8-*-#pipinstallpython-pptx-ihttps://pypi.tuna.tsinghua.edu.cn/simple#pipinstallpython-docx-ihttps://pypi.tuna.tsinghua.edu.cn/simple#pipinstallpandas-ihttps://pypi.tuna.tsinghua.edu.cn/simplefrompptximp......
  • 基于pytorch搭建VGGNet神经网络用于花类识别
    文章目录基于pytorch搭建VGGNet神经网络用于花类识别写在前面VGGNet网络模型搭建训练结果展示小结 基于pytorch搭建VGGNet神经网络用于花类识别写在前面  上一篇写过基于pytorch搭建AlexNet神经网络用于花类识别项目实战,建议阅读此篇前先弄明白上篇所述之事......
  • 基于pytorch搭建ResNet神经网络用于花类识别
    文章目录基于pytorch搭建ResNet神经网络用于花类识别写在前面ResNet网络模型搭建✨✨✨训练结果展示小结基于pytorch搭建ResNet神经网络用于花类识别写在前面【当然这是要在你对这部分网络结构的理论有充分的了解之后】另一方面,我觉得这部分真的得你自己切切实实的钻研,自己一步步的......
  • 使用benchmark比较循环嵌套与strassen求解矩阵乘法的性能
    #include<benchmark/benchmark.h>#include<iostream>#include<random>#include<vector>usingnamespacestd;staticconstintn=200;staticconstint_lrange=0;staticconstint_rrange=10;staticconstint_iter=1;us......
  • (第六篇)__iter__、__next__及for循环执行原理(可迭代对象、迭代器、生成器)
    摘要:只要有__iter__,那么这个对象就是可迭代对象,若对象有__iter__和__next__两种方法,则这个对象为迭代器对象。一、概念什么是迭代?迭代就是重复,但是每一次重复都与上一次有关联,这就是迭代。"""这不是迭代,这是简单的重复"""whileTrue:print(1)"""这是迭代。每一......
  • HDOJ1799 循环多少次?
    循环多少次?TimeLimit:3000/1000MS(Java/Others)    MemoryLimit:65536/32768K(Java/Others)TotalSubmission(s):5459    AcceptedSubmission(s):2122ProblemDescription  我们知道,在编程中,我们时常需要考虑到时间复杂度,特别是对于循环的部分。例如,......
  • continue 中断本次循环 进入循环的下一次
    '''continuebreak公司有1万元有20个员工来领工资每人领取1千元随机数绩效1到10如果低于5不发工资下一位如果领取完了结束发工资'''#工资总和是1万元每个人1千#20个人的绩效importrandomhe=10000whilehe>0:jixiao=random.randint(1,10)prin......
  • 异步编程之事件循环机制
    JavaScript是一门单线程语言,我们可以通过异步编程的方式来实现实现类似于多线程语言的并发操作。本文着重讲解通过事件循环机制来实现多个异步操作的有序执行、并发执行;通过事件队列实现同级多个并发操作的先后执行顺序,通过微任务和宏任务的概念来讲解不同阶段任务执行的先后顺序,......
  • lambda中的forEach如何跳出循环
    lambda中的forEach如何跳出循环    前提   在Java8中的forEach()中,"break"或"continue"是不被允许使用的,而return的意思也不是原来return代表的含义了。forEach(),说到底是一个方法,而不是循环体,结束一个方法的执行自然是用return。    1. 在Java8中直接......