Tensorflow LSTM 状态和权重的默认初始化?

Default Initialization for Tensorflow LSTM states and weights?

我在 Tensorflow 中使用 LSTM 单元。

lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units)

我想知道权重和状态是如何初始化的,或者更确切地说,Tensorflow 中 LSTM 单元(状态和权重)的默认初始化程序是什么?

有没有简单的方法来手动设置初始化程序?

注意:对于 tf.get_variable(),据我从 documentation.

中了解到,使用了 glorot_uniform_initializer

我认为您不能初始化单个单元格,但是当您使用 tf.nn.static_rnntf.nn.dynamic_rnn 执行 LSTM 时,您可以将 initial_state 参数设置为包含的张量LSTM 的初始值。

首先,LSTM 的权重(ANN 的常用参数集)之间存在差异,默认情况下它们也由 Glorot 或也称为 Xavier 初始化器初始化(如问题)。

另一个方面是单元状态和 LSTM 的初始循环输入状态。这些由通常表示为 initial_state.

的矩阵初始化

留给我们一个问题,如何初始化这个 initial_state:

  1. Zero State Initialization is good practice if the impact of initialization is low

初始化 RNN 状态的默认方法是使用零状态。这通常很有效,特别是对于 sequence-to-sequence 任务,如语言建模,其中受初始状态显着影响的输出比例很小。

  1. Zero State Initialization in each batch can lead to overfitting

每个批次的零初始化将导致以下结果: sequence-to-sequence 模型早期步骤的损失(即状态重置后立即发生的损失)将大于后期步骤的损失,因为有历史较少。因此,它们在学习过程中对梯度的贡献会相对较高。但是,如果所有状态重置都与 zero-state 相关联,则模型可以(并且将会)学习如何精确地对此进行补偿。随着状态重置与总观察值的比率增加,模型参数将越来越多地调整到该零状态,这可能会影响后续时间步长的性能。

  1. Do we have other options?

一个简单的解决方案是使初始状态有噪声(以减少第一个时间步的损失)。在这里寻找 details and other ideas