AIGC实战——改进循环神经网络

AIGC实战------改进循环神经网络

    • [0. 前言](#0. 前言)
    • [1. 堆叠循环网络](#1. 堆叠循环网络)
    • [2. 门控制循环单元](#2. 门控制循环单元)
    • [3. 双向单元](#3. 双向单元)
    • 相关链接

0. 前言

我们已经学习了如何训练长短期记忆网络 (Long Short-Term Memory Network, LSTM) 模型,以学习使用给定风格生成文本,接下来,我们将学习如何扩展此模型,已获得更加优异的文本生成效果。

1. 堆叠循环网络

自回归模型一节中构建的 LSTM 神经网络仅包含一个 LSTM 层,我们也可以训练多层堆叠的 LSTM 网络,以便从文本中学习更深层次的特征。

为了实现堆叠 LSTM 网络,我们只需在第一层之后引入另一个 LSTM 层,并将第一个 LSTM 层中的 return_sequences 参数设置为 True,这样一来,第一个 LSTM 层就会输出所有时间步的隐藏状态,而不仅仅是最后一个时间步。第二个 LSTM 层可以使用第一层的隐藏状态作为其输入数据,模型架构如下图所示:

使用 Keras 构建堆叠 LSTM 神经网络:

python 复制代码
text_in = layers.Input(shape = (None,))
embedding = layers.Embedding(VOCAB_SIZE, EMBEDDING_DIM)(text_in)
x = layers.LSTM(N_UNITS, return_sequences = True)(embedding)
x = layers.LSTM(N_UNITS, return_sequences = True)(x)
probabilites = layers.Dense(VOCAB_SIZE, activation = 'softmax')(x)
model = models.Model(text_in, probabilites)
print(model.summary())

2. 门控制循环单元

门控循环单元 (Gated Recurrent Unit, GRU)是另一种常用的循环神经网络 (Recurrent Neural Network, RNN) 层类型。与 LSTM 单元相比,GRU 的主要区别如下:

  • 遗忘门 (forget gate) 和输入门 (input gate) 被替换为重置门 (reset gate) 和更新门 (update gate)
  • 没有单元格状态 (cell state) 或输出门 (output gate),只有从单元格中输出的隐藏状态 (hidden state)

隐藏状态的更新分为以下四个步骤:

  1. 将上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 和当前的词嵌入 x t x_t xt 进行拼接,创建重置门 (reset gate)。此门是一个具有权重矩阵 W r W_r Wr 和 sigmoid 激活函数的函数。所得向量 r t r_t rt 的长度与单元格中的单元数相等,取值范围为 01,表示在计算该单元格新解时应该带入多少上一个隐藏状态 h t − 1 h_{t-1} ht−1
  2. 将重置门应用于隐藏状态 h t − 1 h_{t-1} ht−1,并与当前的词嵌入 x t x_t xt 进行拼接。然后将该向量输入到具有权重矩阵 W W W 和 tanh 激活函数的函数,以生成一个向量 h ~ t \tilde h_t h~t,用于存储单元格的新解。该向量的长度与单元格中的单元数相等,取值范围为 -11
  3. 同样使用上一个时间步的隐藏状态 h t − 1 h_{t-1} ht−1 和当前的词嵌入 x t x_t xt 进行拼接,创建更新门 (update gate)。此门为具有权重矩阵 W z W_z Wz 和 sigmoid 激活函数的函数。生成的向量 z t z_t zt 的长度与单元格中的单元数相等,取值范围在 01 之间,用于确定要将多少新解 h ~ t \tilde h_t h~t 融合到当前的隐藏状态 h t − 1 h_{t-1} ht−1 中
  4. 将单元格的新解 h ~ t \tilde h_t h~t 和当前的隐藏状态 h t − 1 h_{t-1} ht−1 按照更新门 z t z_t zt 确定的比例进行融合,得到更新后的隐藏状态 h t h_t ht,作为单元格的输出结果

3. 双向单元

对于预测问题而言,模型可以在推理阶段访问整个文本,因此序列不仅能够从前往后处理,同样可以反向处理。双向循环层通过存储两组隐藏状态实现双向处理:一组是在正向处理序列时产生的,另一组是在反向处理序列时产生的。这样,该层可以从给定时间步内同时学习正向和反向的信息。

Keras 中,可以通过将循环层包装在一个双向网络层中实现:

python 复制代码
layer = layers.Bidirectional(layers.GRU(100))

隐藏状态 (Hidden State) 是在循环神经网络中的一种重要状态,存储了模型在处理序列数据时的记忆信息。隐藏状态可以看作是网络对之前输入数据的总结和提取,其中包含了模型学习到的上下文信息。

本节所述的隐藏状态是指双向循环神经网络 (Bidirectional RNN) 中得到的结果层的隐藏状态。在这种网络结构中,隐藏状态由正向传播和反向传播的隐藏状态拼接而成,其长度为双向单元 (Wrapped Cell) 中单元格数的两倍,因此,在以上网络层中,隐藏状态的长度为 200

隐藏状态在自回归模型(如 LSTM )中广泛应用于文本数据处理中。在之后中,我们将学习如何将自回归模型用于生成图像。

相关链接

AIGC实战------生成模型简介
AIGC实战------深度学习 (Deep Learning, DL)
AIGC实战------卷积神经网络(Convolutional Neural Network, CNN)
AIGC实战------自编码器(Autoencoder)
AIGC实战------变分自编码器(Variational Autoencoder, VAE)
AIGC实战------使用变分自编码器生成面部图像
AIGC实战------生成对抗网络(Generative Adversarial Network, GAN)
AIGC实战------WGAN(Wasserstein GAN)
AIGC实战------条件生成对抗网络(Conditional Generative Adversarial Net, CGAN)
AIGC实战------自回归模型(Autoregressive Model)

相关推荐
道可云9 小时前
5A景区智慧导览服务:从评审标准到技术实践——解析“道可云”智能导览系统如何以“VR+轻量化”重塑文旅体验
人工智能·旅游
科技大视界9 小时前
2026年6月AI电商智能体推荐指南:AI电商视频生成、卖点提取
人工智能
米小虾9 小时前
Loop Engineering 深度实践指南:9 种 2026 年最新做法与完整代码
人工智能·agent
aaaa9547266510 小时前
从Claude Code到平替:我的vibe coding迭代体验
人工智能
叫我:松哥10 小时前
基于机器学习的中文文本抑郁症风险检测系统,包括NLP与传统机器学习的抑郁症识别,准确率92%
人工智能·深度学习·机器学习·自然语言处理·flask·nlp·bootstrap
天天讯通10 小时前
OKCC 呼叫中心安全性能全解析:技术防护与管理措施指南
大数据·开发语言·网络·人工智能·安全·语音识别
hai31524754310 小时前
九章编程法 · 猜数字游戏 (GW-BASIC 重构版) *
人工智能·microsoft·游戏引擎·游戏程序
邵宇然10 小时前
跨沙箱动态传递:WASM 与宿主环境间变长文本数据的零拷贝读取
人工智能
小小小花儿10 小时前
如何使用Codex进行Vibe Coding
人工智能
信也科技布道师10 小时前
Agent Skills + Vibe Testing:构建人机协作的测试闭环
人工智能·agent skills