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
)
隐藏状态的更新分为以下四个步骤:
- 将上一个时间步的隐藏状态 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 的长度与单元格中的单元数相等,取值范围为0
到1
,表示在计算该单元格新解时应该带入多少上一个隐藏状态 h t − 1 h_{t-1} ht−1 - 将重置门应用于隐藏状态 h t − 1 h_{t-1} ht−1,并与当前的词嵌入 x t x_t xt 进行拼接。然后将该向量输入到具有权重矩阵 W W W 和
tanh
激活函数的函数,以生成一个向量 h ~ t \tilde h_t h~t,用于存储单元格的新解。该向量的长度与单元格中的单元数相等,取值范围为-1
到1
- 同样使用上一个时间步的隐藏状态 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 的长度与单元格中的单元数相等,取值范围在0
到1
之间,用于确定要将多少新解 h ~ t \tilde h_t h~t 融合到当前的隐藏状态 h t − 1 h_{t-1} ht−1 中 - 将单元格的新解 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)