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

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

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

0. 前言

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

1. 堆叠循环网络

在自回归模型一节中构建的 LSTM 神经网络仅包含一个 LSTM 层,我们也可以训练多层堆叠的 LSTM 网络,以便从文本中学习更深层次的特征。
为了实现堆叠 LSTM 网络,我们只需在第一层之后引入另一个 LSTM 层,并将第一个 LSTM 层中的 return_sequences 参数设置为 True,这样一来,第一个 LSTM 层就会输出所有时间步的隐藏状态,而不仅仅是最后一个时间步。第二个 LSTM 层可以使用第一层的隐藏状态作为其输入数据,模型架构如下图所示:

AIGC实战——改进循环神经网络_第1张图片

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

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

3. 双向单元

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

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)

你可能感兴趣的:(AIGC,rnn,人工智能)