循环神经网络 RNN 入门学习笔记

一、RNN 整体简介

1. 什么是 RNN

循环神经网络(RNN)是专门处理序列数据的神经网络。

普通神经网络只能处理独立数据,R 拥有记忆能力,能记住前面时刻的信息,适合前后有依赖的数据。

2. 序列数据举例

文字、句子、语音、股市数据、天气数据,都是前后有关系的序列。

3 常见应用场景

  • 自然语言处理:文本生成、机器翻译、情感分析
  • 语音识别、音乐生成
  • 时间序列:股票预测、气温预测

二、词嵌入 Embedding(NLP 必备)

1. 为什么需要词嵌入

文字不能直接输入网络,必须转成数字向量,词嵌入就是把每个词变成固定长度稠密向量。

2. 词嵌入工作流程

  1. 对文本分词
  2. 建立词表,每个词分配唯一编号
  3. 通过编号查表,生成词向量
  4. 词向量作为 RNN 输入

3 PyTorch 词嵌入 API

nn.Embedding(num_embeddings, embedding_dim)
  • num_embeddings:词表总字数
  • embedding_dim:每个词的向量维度

4 作用总结

把文字 → 低维向量,让机器能读懂语义,是所有 NLP 模型的输入第一层。


三、RNN 核心原理

1 RNN 结构特点

RNN 只有一个神经元,在不同时间步重复使用,像循环一样传递信息。

2 隐藏状态 h(最重要)

隐藏状态 h 就是 RNN 的记忆

  • 保存历史文本信息
  • 把上一步信息传给下一步
  • 让上下文产生关联

3 运算逻辑

每一步输入:当前输入 \(x_t\) + 上一步隐藏状态 \(h_{t-1}\)
输出:当前隐藏状态 \(h_t\) + 预测输出 \(y_t\)

4 文本生成逻辑

输入第一个字 → 经过 RNN 计算 → 预测下一个字 → 再把新字作为输入,循环生成句子。


四、PyTorch RNN 使用

1 RNN 初始化

nn.RNN(input_size, hidden_size, num_layers)
  • input_size:词向量维度
  • hidden_size:隐藏层维度
  • num_layers:RNN 层数

2 维度规范

  • 输入 x:[序列长度, batch数, 词向量维度]
  • 初始隐藏 h0:[层数, batch数, 隐藏维度]
  • 输出 output:同输入形状
  • hn:最后时刻隐藏状态

五、实战:周杰伦歌词生成项目

1 项目任务

用 RNN 训练周杰伦歌词,输入开头词语,自动生成后续歌词

2 整体流程

  1. 加载歌词数据集(5819 行)
  2. jieba 分词、构建词表与词索引映射
  3. 自定义 Dataset 构造序列输入和标签
  4. 搭建网络:Embedding + RNN + 全连接层
  5. 训练:交叉熵损失 + Adam 优化器
  6. 保存模型、加载模型做歌词生成

3 模型结构

  • 词嵌入层:词 → 128 维向量
  • RNN 层:128 维输入,128 隐藏层
  • 全连接:映射到词表分类

4 训练效果

训练 10 轮损失持续下降,输入起始词如「分手」,可自动生成连贯风格歌词。


六、学习总结

  1. RNN 专门处理序列数据,依靠隐藏状态保存记忆;
  2. 词嵌入 Embedding 是 NLP 第一步,把文字转为机器可计算向量;
  3. RNN 通过时间步循环共享参数,利用上下文关系做预测;
  4. 掌握 RNN 后可以实现文本生成、时序预测等经典任务;
  5. 实战完整复现歌词生成,从数据处理→建模→训练→预测全流程。
posted @ 2026-05-23 08:32  Petula  阅读(18)  评论(0)    收藏  举报