循环神经网络 - 简单循环网络

本文我们来学习和了解简单循环网络(Simple Recurrent Network,SRN), SRN是一个非常简单的循环神经网络,只有一个隐藏层的神经网络。

简单循环神经网络,也常称为 Elman 网络,是最基本的循环神经网络(RNN)架构。它通过在隐藏层中引入循环连接,使网络能够处理序列数据,并记忆之前的输入信息。

1. 基本构成

SRN 通常包含三个主要部分:

  • 输入层:接收当前时间步的输入 x(t)。

  • 隐藏层:这是 SRN 的核心,负责处理当前输入和之前时刻的记忆。隐藏层不仅接收当前输入,还接收来自上一时刻隐藏层状态 h(t−1) 的信息。

  • 输出层:根据隐藏层的状态生成当前的输出 y(t)。

这里需要特别注意下,简单循环神经网络(SRN)通常被描述为由以上三个主要部分构成,但并不是只有三层。但需要注意的是,隐藏层的循环连接使得它在时间维度上展开时,相当于多个层次的堆叠。也就是说,当我们对时间序列进行"展开"(Unrolling)时,每个时间步都有一个隐藏层实例,所以在时间展开的过程中实际上会有很多层共享同一组参数。

总结:

  • 从模型架构角度看,SRN 通常有输入层、隐藏层(循环层)和输出层这三部分。

  • 从时间展开角度看,隐藏层在每个时间步都被复制,从而形成了一个深层网络。因此,简单循环神经网络的基本结构可以看作是"三层",但它的隐藏层是通过循环连接在时间上不断重复的。

这种设计既保持了结构的简单性,又能够捕捉序列中的时间依赖性。

也即是说,虽然在 SRN 的设计中,我们只定义了一个隐藏层,但由于它在每个时间步都会接收当前输入和上一个时间步的隐藏状态,所以在实际计算时,我们将整个时间序列"展开"成一个类似深层网络的结构。具体来说:

  • 时间展开(Unrolling)

    当我们处理一个序列时,比如有 T 个时间步,循环神经网络的隐藏层在每个时间步都参与计算。但这些计算都是基于相同的参数。为了便于理解和反向传播(BPTT),我们将网络在时间上"展开",把每个时间步看作一个独立的层。这样,一个包含 T 个时间步的 RNN就像是一个深度为 T 的网络,每一层都对应同一个隐藏层在不同时间步的计算。

  • 共享参数

    虽然展开后网络看起来有 T 层,但所有这些"层"共享同一组权重。这意味着每个时间步都在用同样的方式处理数据,但由于输入和状态的不同,最终计算结果不同。

  • 深层网络的意义

    展开后的结构使得 RNN 能够捕捉长距离的依赖关系,就像一个深层网络可以通过多层抽象获得复杂特征一样,展开后的 RNN 通过多层时间递归捕捉序列的动态变化。

举个例子:假设有一个长度为 5 的时间序列,展开后 RNN 的隐藏层就相当于 5 层深的网络,每一层都接收前一层的隐藏状态,并结合当前输入更新状态。这种深层结构有助于梯度在时间上逐步传递,尽管也会带来梯度消失或爆炸的问题,但这正是后来 LSTM、GRU 等改进模型出现的原因。

由此可见,SRN 中的隐藏层具有循环连接,这使得网络具有"记忆"功能,即能够将过去的信息传递给未来的时间步。

2. 工作原理

在 SRN 中,隐藏层状态的更新通常通过下面的公式实现:

其中:

  • x(t) 为当前输入,

  • h(t−1) 为前一时刻的隐藏状态,

  • Wxh​ 为输入到隐藏层的权重矩阵,

  • Whh​ 为隐藏层的递归权重矩阵,

  • bh 为隐藏层的偏置,

  • f(⋅) 是非线性激活函数(例如 tanh 或 ReLU)。

输出层通常根据隐藏层状态计算输出:

其中 Why​ 和 by 分别是输出层的权重和偏置,g(⋅) 是适用于输出任务的激活函数(例如 softmax 用于分类)。

我们现在来理解一下上面标红的那句话:此外,SRN 中的隐藏层具有循环连接,这使得网络具有"记忆"功能,即能够将过去的信息传递给未来的时间步。

这句话的核心意思是:SRN 的隐藏层不仅处理当前的输入,还通过循环连接将前一时刻的"记忆"或状态传递到当前时刻,使得网络在处理当前信息时能够参考过去的信息。具体来说:

  • 循环连接:在 SRN 中,隐藏层的输出 h(t) 不仅依赖于当前输入 x(t),还依赖于上一时间步的隐藏状态 h(t−1)。

  • 记忆功能 :由于每个时间步都会传递上一时刻的隐藏状态,网络就能"记住"之前的信息。也就是说,当前的输出不仅反映当前输入的信息,还包含了历史信息。这对于处理序列数据(如语音、文本、时间序列)非常重要,因为当前的状态往往受之前状态的影响。

  • 类比说明 :可以把它比作人类的记忆。当你在阅读一篇文章时,你的理解不仅取决于当前阅读的句子,还受之前内容的影响。SRN 的隐藏层正是起到类似作用,将之前的"记忆"与当前的信息结合,做出更合理的判断。

因此,SRN 中的循环连接使得网络能够跨时间步传递信息,形成一种内部的记忆机制,从而更好地处理具有时序依赖性的任务。

3. 直观理解

  • 记忆机制

    SRN 的关键在于隐藏层的循环连接。可以将它想象为一个"记忆容器",在每个时间步都会更新,但同时保留了一部分过去的信息。这样,当处理一个序列时,当前的预测不仅基于当前输入,还受之前输入的影响。

  • 时间动态

    例如,在处理语音或文本序列时,SRN 能够捕捉上下文信息,理解前后文关系,从而更准确地进行预测或分类。

  • 简单结构

    SRN 的结构简单,只有一个循环隐藏层。虽然这种网络容易训练,但也存在梯度消失的问题,导致对长序列的依赖捕捉较弱。这也是后来发展 LSTM、GRU 等更复杂循环模型的原因。

4. 举例说明

假设我们用 SRN 来预测一个简单的时间序列,例如预测下一个数字。

序列示例

假设输入序列为:[1,2,3,4,5],目标是预测下一个数(例如 6)。

操作步骤

  1. 初始化:设定隐藏状态 h(0)=0(或随机初始化)。

  2. 时间步 t=1

  3. 时间步 t=2

  4. 时间步 t=3

  5. 时间步 t=4

  6. 时间步 t=5

  7. 输出预测

    经过适当的缩放或后续层的调整,可以将预测值映射到目标数值(例如预测 6)。实际中,模型会通过训练学习合适的参数,使预测值准确。

  8. 为什么根据 y(5)=h(5)≈0.989,可以推测出下一个值是6呢?

我们假设输出 y(t) 与隐藏状态 h(t) 直接相等(即采用线性映射),所以 y(5)=h(5)≈0.989。然而,在实际应用中,预测目标(例如预测下一个值为6)通常与模型内部的数值尺度不同,这就需要额外的输出层来对隐藏状态进行"缩放"或"映射"。具体解释如下:

  • 数值尺度不匹配

    在我们的示例中,为了简单起见,我们直接用 h(t) 作为输出,但在真实任务中,输入数据、隐状态和目标值往往处于不同的数值范围。例如,输入序列可能已经经过归一化,而目标值可能处于实际数值范围内。模型需要学习一个从隐藏状态到目标输出的映射函数,这通常通过一个全连接层(线性变换)来实现。

  • 输出层映射

    实际上,一个完整的 RNN 模型通常会在隐藏层之后添加一个输出层,用来将隐藏状态 h(t) 经过线性变换映射到预测值 y(t)。输出层的形式一般是:

    其中 Why​ 和 by​ 是输出层的权重和偏置。在训练过程中,这个层会自动调整,使得模型输出接近真实目标。例如,如果真实目标值是6,而隐藏状态大约是0.989,输出层会学习一个大约为6.06的缩放因子(以及相应的偏置调整),从而使得 y(t)≈6。

  • 训练过程的作用

    在训练过程中,通过最小化损失函数(比如均方误差),模型会同时调整 RNN 的参数和输出层的参数。这样,虽然隐藏状态 h(5)可能在0到1左右,但输出层会学到如何将这个数值映射到正确的预测范围。

  • 结论:

    • 示例中 y(5)=h(5)≈0.989 只是一个简化假设,用于演示 SRN 隐状态的更新过程。

    • 实际上,为了预测出目标数值(例如6),需要一个额外的输出层对隐藏状态进行缩放和偏置调整。

    • 这种映射过程是在训练过程中自动学习得到的,确保最终预测值和实际目标在相同的尺度上。

因此,从 0.989 直接推断下一个值是6,是通过训练中学到的输出层映射来实现的,而不是简单的数值相等。

这个简单例子说明了 SRN 如何通过不断更新隐藏状态来"记住"序列中的信息,并利用这些信息进行预测。

5. 总结

  • 结构:SRN 包含输入、循环隐藏和输出层,其中隐藏层通过递归连接捕捉时间序列中的依赖关系。

  • 工作原理:每个时间步,隐藏状态 h(t) 同时受当前输入 x(t) 和前一时刻隐藏状态 h(t−1) 的影响,使得网络能够综合历史信息进行预测。

  • 优势与局限:SRN 结构简单,易于实现,但在处理长序列时可能出现梯度消失问题,因此实际应用中往往需要更复杂的 RNN 变体(如 LSTM 或 GRU)。

如果我们把每个时刻的状态都看作前馈神经网络的一层,循环神经网络可以看作在时间维度上权值共享的神经网络,下图给出了按时间展开的循环神经网络:

相关推荐
非ban必选几秒前
spring-ai-alibaba第四章阿里dashscope集成百度翻译tool
java·人工智能·spring
是店小二呀6 分钟前
AI前沿:资本狂潮下的技术暗战:巨头博弈、开源革命与生态重构
人工智能·重构·开源
snowfoootball38 分钟前
基于 Ollama DeepSeek、Dify RAG 和 Fay 框架的高考咨询 AI 交互系统项目方案
前端·人工智能·后端·python·深度学习·高考
云和数据.ChenGuang1 小时前
机器学习之回归算法
人工智能·机器学习·回归
代码骑士1 小时前
聚类(Clustering)基础知识2
机器学习·数据挖掘·聚类
odoo中国1 小时前
深度学习 Deep Learning 第15章 表示学习
人工智能·深度学习·学习·表示学习
橙色小博1 小时前
长短期记忆神经网络(LSTM)基础学习与实例:预测序列的未来
人工智能·python·深度学习·神经网络·lstm
深蓝学院1 小时前
闭环SOTA!北航DiffAD:基于扩散模型实现端到端自动驾驶「多任务闭环统一」
人工智能·机器学习·自动驾驶
jimmyleeee1 小时前
人工智能基础知识笔记七:随机变量的几种分布
人工智能·笔记·概率论
仙人掌_lz1 小时前
机器学习ML极简指南
人工智能·python·算法·机器学习·面试·强化学习