循环神经网络 RNN 入门学习笔记
一、RNN 整体简介
1. 什么是 RNN
循环神经网络(RNN)是专门处理序列数据的神经网络。
普通神经网络只能处理独立数据,R 拥有记忆能力,能记住前面时刻的信息,适合前后有依赖的数据。
2. 序列数据举例
文字、句子、语音、股市数据、天气数据,都是前后有关系的序列。
3 常见应用场景
- 自然语言处理:文本生成、机器翻译、情感分析
- 语音识别、音乐生成
- 时间序列:股票预测、气温预测
二、词嵌入 Embedding(NLP 必备)
1. 为什么需要词嵌入
文字不能直接输入网络,必须转成数字向量,词嵌入就是把每个词变成固定长度稠密向量。
2. 词嵌入工作流程
- 对文本分词
- 建立词表,每个词分配唯一编号
- 通过编号查表,生成词向量
- 词向量作为 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 整体流程
- 加载歌词数据集(5819 行)
- jieba 分词、构建词表与词索引映射
- 自定义 Dataset 构造序列输入和标签
- 搭建网络:Embedding + RNN + 全连接层
- 训练:交叉熵损失 + Adam 优化器
- 保存模型、加载模型做歌词生成
3 模型结构
- 词嵌入层:词 → 128 维向量
- RNN 层:128 维输入,128 隐藏层
- 全连接:映射到词表分类
4 训练效果
训练 10 轮损失持续下降,输入起始词如「分手」,可自动生成连贯风格歌词。
六、学习总结
- RNN 专门处理序列数据,依靠隐藏状态保存记忆;
- 词嵌入 Embedding 是 NLP 第一步,把文字转为机器可计算向量;
- RNN 通过时间步循环共享参数,利用上下文关系做预测;
- 掌握 RNN 后可以实现文本生成、时序预测等经典任务;
- 实战完整复现歌词生成,从数据处理→建模→训练→预测全流程。

浙公网安备 33010602011771号