天津储鑫盛钢材现货供应商 发表于 2025-4-2 21:45:32

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

本文我们来学习和相识简单循环网络(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 中,潜伏层状态的更新通常通过下面的公式实现:
https://i-blog.csdnimg.cn/direct/d63b4f89a2924ff98aa4e245c34fcf14.png
其中:


[*] x(t) 为当前输入,
[*] h(t−1) 为前一时刻的潜伏状态,
[*] Wxh​ 为输入到潜伏层的权重矩阵,
[*] Whh​ 为潜伏层的递归权重矩阵,
[*] bh 为潜伏层的偏置,
[*] f(⋅) 是非线性激活函数(例如 tanh 或 ReLU)。
输出层通常根据潜伏层状态计算输出:
https://i-blog.csdnimg.cn/direct/35b4f76a9c2b4642a39f0a4aa1abbc0d.png
其中 Why​ 和 by 分别是输出层的权重和偏置,g(⋅) 是实用于输出使命的激活函数(例如 softmax 用于分类)。
我们现在来理解一下上面标红的那句话:此外,SRN 中的潜伏层具有循环连接,这使得网络具有“记忆”功能,即可以或许将已往的信息通报给将来的时间步。
这句话的核心意思是:SRN 的潜伏层不但处理当前的输入,还通过循环连接将前一时刻的“记忆”或状态通报到当前时刻,使得网络在处理当前信息时可以或许参考已往的信息。具体来说:


[*] 循环连接:在 SRN 中,潜伏层的输出 h(t) 不但依赖于当前输入 x(t),还依赖于上一时间步的潜伏状态 h(t−1)。
[*] 记忆功能:由于每个时间步都会通报上一时刻的潜伏状态,网络就能“记着”之前的信息。也就是说,当前的输出不但反映当前输入的信息,还包含了汗青信息。这对于处理序列数据(如语音、文本、时间序列)非常重要,因为当前的状态通常受之前状态的影响。
[*] 类比说明:可以把它比作人类的记忆。当你在阅读一篇文章时,你的理解不但取决于当前阅读的句子,还受之前内容的影响。SRN 的潜伏层正是起到类似作用,将之前的“记忆”与当前的信息团结,做出更公道的判断。
因此,SRN 中的循环连接使得网络可以或许跨时间步通报信息,形成一种内部的记忆机制,从而更好地处理具偶然序依赖性的使命。
3. 直观理解



[*] 记忆机制:
SRN 的关键在于潜伏层的循环连接。可以将它想象为一个“记忆容器”,在每个时间步都会更新,但同时保存了一部分已往的信息。如许,当处理一个序列时,当前的猜测不但基于当前输入,还受之前输入的影响。
[*] 时间动态:
例如,在处理语音或文本序列时,SRN 可以或许捕捉上下文信息,理解前后文关系,从而更精确地举行猜测或分类。
[*] 简单结构:
SRN 的结构简单,只有一个循环潜伏层。虽然这种网络轻易练习,但也存在梯度消散的题目,导致对长序列的依赖捕捉较弱。这也是后来发展 LSTM、GRU 等更复杂循环模子的缘故因由。
4. 举例说明

假设我们用 SRN 来猜测一个简单的时间序列,例如猜测下一个数字。
序列示例:
假设输入序列为:,目标是猜测下一个数(例如 6)。
操纵步骤:

[*] 初始化:设定潜伏状态 h(0)=0(或随机初始化)。
[*] 时间步 t=1:
https://i-blog.csdnimg.cn/direct/235b8eb1afcc41079242a93bfe90f09c.png
[*] 时间步 t=2:
https://i-blog.csdnimg.cn/direct/80d4f2e662a04c7b906282ba0ea405e8.png
[*] 时间步 t=3:
https://i-blog.csdnimg.cn/direct/d9ac2f84762148fea071661b1fa18f95.png
[*] 时间步 t=4:
https://i-blog.csdnimg.cn/direct/aaf7b7771a044eb18008695311d87fa1.png
[*] 时间步 t=5:
https://i-blog.csdnimg.cn/direct/5d8627547ad845e9af160dc0acabffc7.png
[*] 输出猜测:https://i-blog.csdnimg.cn/direct/e93b4d8aa6bb4fea89328ba9931f566b.png
颠末适当的缩放或后续层的调解,可以将猜测值映射到目标数值(例如猜测 6)。实际中,模子会通过练习学习符合的参数,使猜测值精确。
[*] 为什么根据 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)。输出层的形式一般是:
https://i-blog.csdnimg.cn/direct/b2d0c159da504983870392c24efc04c1.png 其中 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)。
假如我们把每个时刻的状态都看作前馈神经网络的一层,循环神经网络可以看作在时间维度上权值共享的神经网络,下图给出了按时间睁开的循环神经网络:
https://i-blog.csdnimg.cn/direct/a565da1adc314564af7222844716c0d3.png

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 循环神经网络 - 简单循环网络