之前在学习RNN的时候,总是零零散散的搜一些东西。这次想要将关于RNN的知识总结起来,包括各种RNN网络的结构、输入输出以及pytorch代码实现。
文章目录
单向RNN网络简介
我们首先介绍单向RNN网络的结构,如下图所示。时间步 i i i 的输入为: x i x_i xi和 s i − 1 s_{i-1} si−1,输出是 y i y_i yi和 s i s_i si。这里我们统一使用 s s s 代表隐藏层状态表示, y y y 则表示模型输出值。那么,单个神经元的运算为: ( y t , s t ) = f t ( x t , s t − 1 ) (y_t, s_t) = f_t(x_t, s_{t-1}) (yt,st)=ft(xt,st−1)。其中, f t f_t ft 表示的该层的第 t t t 个神经元中的运算。
在上面介绍的基础上,接下来,会介绍三种RNN网络,分别是Vanilla RNN(即简单RNN),GRU,LSTM。对于这三种网络,我会从单个神经元、单层以及多层的方面展开介绍。因为Vanilla RNN和GRU的结构上是一样的,只是内部计算不同,所以这里将这两个放在一起介绍
Vanilla RNN / GRU 的结构
首先给出简单RNN/ GRU的单层和多层的网络结构,这里从单个神经元进行分析。网络结构图如下:
简介中我们用