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)

相关推荐
编码小哥1 小时前
OpenCV Haar级联分类器:人脸检测入门
人工智能·计算机视觉·目标跟踪
程序员:钧念2 小时前
深度学习与强化学习的区别
人工智能·python·深度学习·算法·transformer·rag
数据与后端架构提升之路2 小时前
TeleTron 源码揭秘:如何用适配器模式“无缝魔改” Megatron-Core?
人工智能·python·适配器模式
Chef_Chen3 小时前
数据科学每日总结--Day44--机器学习
人工智能·机器学习
这张生成的图像能检测吗3 小时前
(论文速读)FR-IQA:面向广义图像质量评价:放松完美参考质量假设
人工智能·计算机视觉·图像增强·图像质量评估指标
KG_LLM图谱增强大模型3 小时前
本体论与知识图谱:揭示语义技术的核心差异
人工智能·知识图谱·本体论
JicasdC123asd4 小时前
黄瓜植株目标检测:YOLOv8结合Fasternet与BiFPN的高效改进方案
人工智能·yolo·目标检测
爱吃泡芙的小白白4 小时前
深入解析:2024年AI大模型核心算法与应用全景
人工智能·算法·大模型算法
小程故事多_805 小时前
攻克RAG系统最后一公里 图文混排PDF解析的挑战与实战方案
人工智能·架构·pdf·aigc
琅琊榜首20205 小时前
AI+编程双驱动:高质量短剧创作全流程指南
人工智能