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)

相关推荐
珠海新立电子科技有限公司2 小时前
FPC柔性线路板与智能生活的融合
人工智能·生活·制造
IT古董3 小时前
【机器学习】机器学习中用到的高等数学知识-8. 图论 (Graph Theory)
人工智能·机器学习·图论
曼城周杰伦3 小时前
自然语言处理:第六十三章 阿里Qwen2 & 2.5系列
人工智能·阿里云·语言模型·自然语言处理·chatgpt·nlp·gpt-3
余炜yw3 小时前
【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感
人工智能·rnn·深度学习
莫叫石榴姐4 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
如若1234 小时前
利用 `OpenCV` 和 `Matplotlib` 库进行图像读取、颜色空间转换、掩膜创建、颜色替换
人工智能·opencv·matplotlib
YRr YRr4 小时前
深度学习:神经网络中的损失函数的使用
人工智能·深度学习·神经网络
ChaseDreamRunner4 小时前
迁移学习理论与应用
人工智能·机器学习·迁移学习
Guofu_Liao5 小时前
大语言模型---梯度的简单介绍;梯度的定义;梯度计算的方法
人工智能·语言模型·矩阵·llama
我爱学Python!5 小时前
大语言模型与图结构的融合: 推荐系统中的新兴范式
人工智能·语言模型·自然语言处理·langchain·llm·大语言模型·推荐系统