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)

相关推荐
甲维斯3 分钟前
你们要测的啊!GPT5.6版3D台球
人工智能
海盗12343 分钟前
微软技术周报 · 2026-08-11~2026-08-18
人工智能·microsoft·.net
Ricardo-Yang8 分钟前
无人机单目深度估计测试:ZipDepth 与 AerialMetric
人工智能·算法·机器学习·计算机视觉·无人机
Henry-SAP9 分钟前
具身智能新突破:开源生态与IPO热潮
人工智能·云原生·sap·erp
其实防守也摸鱼12 分钟前
红队技能总结导图:从入门到精通的完整知识体系
开发语言·人工智能·学习·安全·web安全
饼干哥哥28 分钟前
重生之我是导演:爆改成「牛来版」黑客帝国?附3D预演台保姆级教程!
人工智能·后端·深度学习
Bruce_Liuxiaowei43 分钟前
自动化渗透测试——用AI构建自动化渗透测试流程
运维·人工智能·自动化
AI导出鸭1 小时前
怎么让Claude做表格?AI导出鸭苹果版将Claude输出的Markdown表格或结构化列表智能解析为二维数据,一键导出Excel/Word标准表格。
人工智能·chatgpt·word·excel·ai导出鸭
ACP广源盛139246256731 小时前
Qwen3.8‑2.4T 开源落地@ACP#国产 MoE 大模型私有化部署中 MST 多屏转换芯片 GSV2231 硬件价值与应用场景
大数据·数据库·人工智能·嵌入式硬件
夏雪coding1 小时前
openpyxl 对账实战:金额浮点、前导零丢失、20 位单号科学计数法
人工智能·后端