news 2026/4/17 23:22:23

【Python机器学习】3.3. 循环神经网络(RNN)理论(进阶)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python机器学习】3.3. 循环神经网络(RNN)理论(进阶)

喜欢的话别忘了点赞、收藏加关注哦(关注即可查看全文),对接下来的教程有兴趣的可以关注专栏。谢谢喵!(=・ω・=)

本文紧承 3.2. 循环神经网络(RNN)理论(基础) ,没看过的建议先看上文。

3.3.1. 基础的RNN结构

图示

我们先来看最基础的RNN结构:

在MLP的基础上把前面序列的部分信息作处理之后给下一个序列。

有的时候你也会看到这样的符号:

这是对应基础的RNN结构,可以用来表示RNN模型,相比于MLP多了一个表示自循环的箭头。

输入&输出

  • 输入:x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,,xi
  • 输出:y1,y2,y3,…,yiy^1, y^2, y^3, \dots, y^iy1,y2,y3,,yi

特点在于输入输出的序列是一样的,输入有iii个输出就有iii个。这就是多输入对应多输出、维度相同的RNN结构。

主要应用

特定信息识别,比如说判断句子中的哪些单词是人名。

3.3.2. 多输入单输出的RNN架构

图示

输入&输出

  • 输入:x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,,xi
  • 输出:y1y^1y1

主要应用

情感识别:假如我有"I feel happy and positive."这句话,计算机需要判定这句话表达的是正面情绪还是负面情绪。

3.3.3. 单输入多输出的RNN架构

图示

输入&输出

  • 输入:x1x^1x1
  • 输出:y1,y2,y3,…,yiy^1, y^2, y^3, \dots, y^iy1,y2,y3,,yi

它一般作为序列数据生成器

主要应用

  • 文章生成:给个标题生成一段话。
  • 音乐生成:选定曲风/情感之类的参数来输出音乐。

3.3.4. 多输入多输出的RNN架构

图示

它与基础RNN架构有什么不同吗?不同之处在于输入数据的数量与输出数据可以不保持一致。

输入&输出

  • 输入:x1,x2,x3,…,xix^1, x^2, x^3, \dots, x^ix1,x2,x3,,xi
  • 输出:y1,y2,y3,…,yjy^1, y^2, y^3, \dots, y^jy1,y2,y3,,yj

主要应用

其主要应用是语言翻译(虽然现在Transformer已经基本取代了RNN),比如说我有下面这句话:
“What is artificial intelligence?”(4个单词,不算标点)

计算机把它翻译为中文:
“什么是人工智能?”(7个单词,不算标点)

这里的输入输出单词数不一致。

3.3.5. 普通RNN结构缺陷

普通RNN都存在结构缺陷。前部序列信息在传递到后部的同时,信息权重下降,导致重要信息丢失。

我们来看一个简单的例子(使用过去式填空):

  1. “The student, who got A+ in the exam, ___ excellent.”
  2. “The students, who got A+ in the exam, ___ excellent.”

第一个题(关键字:“student”)很明显是填was,第二个题(关键字:“students”)很明显是填were

但是循环神经网络会在每一次传递中损失信息,最后“student”和“students”的差别就不会被体现。

针对这个问题,我们需要提高前部特定信息的决策权重。

3.3.6. 长短期记忆网络(LSTM)简介

图示

特点

增加了记忆细胞cic^ici,可以传递前部远处部位信息。比如说上文的“student”和“students”的单复数差别就能被记忆细胞记住。

简化理解:相比aia^iai,记忆细胞cic^ici重点记录前部序列重要信息,且在传递过程中信息丢失少。

3.3.7. 深入理解LSTM

1. 输入与输出

  • 输入:该 LSTM 单元的输入包括:

  • 当前时刻的输入xix^ixi

  • 上一时刻的隐藏状态ai−1a^{i-1}ai1

  • 上一时刻的细胞状态ci−1c^{i-1}ci1(红色标注)

  • 输出:

    • 当前时刻的隐藏状态aia^iai
    • 当前时刻的细胞状态cic^ici(红色标注)
    • 经过激活函数后的输出yiy^iyi

2. 关键计算单元
LSTM 的关键组件是遗忘门、输入门、输出门,以及一个新的细胞状态计算方式:

(1) 遗忘门(Forget Gate)

  • 作用:决定哪些信息应该从过去的细胞状态ci−1c^{i-1}ci1中遗忘。
  • 计算方式:
    fi=σ(Wf[ai−1,xi]+bf) f^i = \sigma(W_f [a^{i-1}, x^i] + b_f)fi=σ(Wf[ai1,xi]+bf)
    • 其中:σ\sigmaσ是 Sigmoid 激活函数
    • WfW_fWf是权重矩阵,bfb_fbf是偏置项
    • 计算出的fif^ifi介于0和1之间,表示遗忘的比例

(2) 输入门(Update Gate)

  • 作用:决定哪些新的信息应该被加入到细胞状态中。

  • 计算方式:
    gi=tanh⁡(Wg[ai−1,xi]+bg) g^i = \tanh(W_g [a^{i-1}, x^i] + b_g)gi=tanh(Wg[ai1,xi]+bg)

    • 其中gig^igi代表新信息(候选细胞状态),使用 tanh 进行归一化。
  • 同时,另一个门控机制决定了信息加入的比例:
    ii=σ(Wi[ai−1,xi]+bi) i^i = \sigma(W_i [a^{i-1}, x^i] + b_i)ii=σ(Wi[ai1,xi]+bi)

    • iii^iii也是 Sigmoid 计算出的值,表示该信息对新细胞状态的影响程度。

细胞状态更新:
ci=fi⋅ci−1+ii⋅gi c^i = f^i \cdot c^{i-1} + i^i \cdot g^ici=fici1+iigi

(3) 输出门(Output Gate)

  • 作用:决定当前隐藏状态(即 a^i)的值。
  • 计算方式:
    oi=σ(Wo[ai−1,xi]+bo) o^i = \sigma(W_o [a^{i-1}, x^i] + b_o)oi=σ(Wo[ai1,xi]+bo)
    • 其中oio^ioi控制了输出的程度。

计算最终的隐藏状态:
ai=oi⋅tanh⁡(ci) a^i = o^i \cdot \tanh(c^i)ai=oitanh(ci)

3. 关键连线说明

  • 红色的cic^icici−1c^{i-1}ci1表示 LSTM 细胞状态的传递
  • aia^iaiai−1a^{i-1}ai1是隐藏状态的传递,供下一时刻使用
  • 输入xix^ixi通过多个门控制其信息流
  • 激活函数(如 tanh)在细胞状态和输出门中起到了归一化作用

3.3.8. 深层循环网络(DRNN)

解决更复杂的序列任务,可以把单层RNN叠起来或者在输出前和普通MLP结构结合使用:

1. 左图:单层RNN

  • 这是最基本的RNN结构,输入依赖于时间步(time step),并且隐藏层通过时间传播信息
  • 黑色节点表示隐藏状态,箭头表示信息流动的方向
  • 由于仅有单层隐藏层,该结构在建模复杂序列时存在局限性

2. 中图:多层RNN

  • 这一结构在时间维度上保持RNN特性,同时在深度方向上叠加了多个隐藏层
  • 低层的隐藏状态不仅连接到下一个时间步,还作为输入传递到上层隐藏状态,使模型可以在不同层次学习不同级别的表示(低层学习局部模式,高层学习长期依赖)
  • 这使得模型更具表达能力,能够提取更复杂的特征

3. 右图:全连接的深度RNN

  • 该结构进一步增强了网络的建模能力,每一层的隐藏状态都与下一层进行连接,并且在时间步之间进行传播
  • 这种结构能够更好地捕捉长期依赖关系,同时利用深度结构提升特征学习能力

DRNN的关键特性

  • 深度结构:相比单层RNN,DRNN具有多个隐藏层,使得模型在不同层级上学习不同的特征表示,提升表达能力
  • 更强的时序建模能力:深层结构可以更好地学习长期依赖关系,减少梯度消失问题
  • 信息流的层次化传播:信息在不同时间步和不同层之间进行传播,提高模型的预测能力
    我们会在之后的实战环节进行更深入的了解
版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/17 23:21:15

Python 数据结构与语法速查笔记

文章总览:YuanDaiMa2048博客文章总览 🔗 查看完整专栏(LeetCode基础算法专栏) 专栏文章 点击阅读:Python 数据结构与语法速查笔记 点击阅读:哈希表基础原理与题目说明 点击阅读:双指针基础原…

作者头像 李华
网站建设 2026/4/17 23:18:28

从理论到实践:ResNet50在图像分类任务中的部署与优化

1. ResNet50为什么成为图像分类的首选模型 第一次接触ResNet50是在一个工业质检项目上。当时产线上需要快速识别零件表面的划痕和凹陷,我们试过各种传统算法效果都不理想,直到用上这个带着"残差连接"的深度网络,准确率直接从78%飙升…

作者头像 李华
网站建设 2026/4/17 23:17:40

无人机视角屋顶识别分割数据集labelme格式1650张1类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件)图片数量(jpg文件个数):1650标注数量(json文件个数):1650标注类别数:1标注类别名称:["roof"]每个类别标注的框数:roof …

作者头像 李华
网站建设 2026/4/17 23:03:09

10.这个代码和实物是否配套?

1.这个代码和实物是否配套?答:代码和实物是配套的,如果你会烧录程序,可以把程序烧录到单片机验证功能如果你要二次开发,记得保存一下最初的版本,因为如果自己把程序改的不能用了至少可以用原来的程序烧录回…

作者头像 李华