RNN:循环神经网络

RNN 循环神经网络简介

RNN,即循环神经网络(Recurrent Neural Network),是一种适合于序列数据的深度学习模型。RNN的核心特点是它能够处理序列中的前后依赖关系,即当前的输出会作为下一个时间步的输入。这种特性使得RNN在处理时间序列数据、自然语言处理等领域有着广泛的应用。

RNN的基本结构包括输入层、隐藏层和输出层。隐藏层的神经元会将前一时间步的输出作为当前时间步的输入,形成一种循环结构。RNN有几种变体,例如长短期记忆网络(LSTM)和门控循环单元(GRU),它们都是为了解决RNN在训练过程中可能出现的梯度消失或梯度爆炸问题。

网络结构的不同之处

  • 简单的神经网络如下图所示:

通常情况下,深度神经网络都是水平方向延伸的,隐层数量很多,但是没有考虑单个隐层在时间上(时序上)的变化; * 而RNN则不同,它关注隐藏每个神经元在时间维度上的不断成长与进步,示意图如下图所示

假如我们使用\(W_s\)来表示层级间的权重矩阵,RNN会假定不同层之间的权重矩阵共享同一个\(W_s\),可以有效减小训练轮数

对于输出\(S\)则有:

神经元隐藏层输出矩阵形式:\(S = f(W_{in}X + b)\)

RNN输出矩阵形式:\(S_t = f(W_{in}X + W_sS_{t-1} + b)\)

RNN使得前后输出具有时序关系,即获得了记忆

论文中的抽象结构是如何来的

抽象结构 1

在看资料时,我们能看到RNN的一种抽象结构(如下图右边所示),下面我们来看一下抽象结构如何生成的:

  • 上左图中红色输入代表上有图中的X,蓝色圈隐层代表上右图的S,绿色圈输出层代表上右图的o,把不同时间层级间对权重矩阵的更新化成一个大圈表示,就得到右边的简易示意图。

抽象结构 2

在大量论文、博客中还能观察到另一种RNN结构,如下图所示:

下面我们来看一下这种抽象结构如何生成的:

RNN 的不足之处

RNN自身的特性使得它天生就是一个记账小能手,它和传统的神经网络一样,也使用误差反向传播加梯度下降来更新权重,只不过在计算隐藏输出时,要引入之前不同时刻的数据,而缺陷在于记忆不够“久远”,通常超过十步就记不住了,而为了解决这个问题,人们提出了长短期记忆网络(LSTM

不同输入输出格式的 RNN

由于时序上的层级结构,使得RNN在输入输出关系上有不同的类型,解决不同的问题。见下图:

  • one to many: 输入可以是一幅图片,但输出可以是一段话或music,看图说话

  • many to one: 输入可以是一段话或music,但输出可以是一幅图片

  • n to n: 输入一段话,生成一段代码

  • n to m:


RNN:循环神经网络
https://fu-jingqi.github.io/2024/08/01/RNN:循环神经网络/
作者
coderfjq
发布于
2024年8月1日
许可协议