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_rnn
或 tf.nn.dynamic_rnn
执行 LSTM 时,您可以将 initial_state
参数设置为包含的张量LSTM 的初始值。
首先,LSTM 的权重(ANN 的常用参数集)之间存在差异,默认情况下它们也由 Glorot 或也称为 Xavier 初始化器初始化(如问题)。
另一个方面是单元状态和 LSTM 的初始循环输入状态。这些由通常表示为 initial_state
.
的矩阵初始化
留给我们一个问题,如何初始化这个 initial_state
:
- Zero State Initialization is good practice if the impact of initialization is low
初始化 RNN 状态的默认方法是使用零状态。这通常很有效,特别是对于 sequence-to-sequence 任务,如语言建模,其中受初始状态显着影响的输出比例很小。
- Zero State Initialization in each batch can lead to overfitting
每个批次的零初始化将导致以下结果: sequence-to-sequence 模型早期步骤的损失(即状态重置后立即发生的损失)将大于后期步骤的损失,因为有历史较少。因此,它们在学习过程中对梯度的贡献会相对较高。但是,如果所有状态重置都与 zero-state 相关联,则模型可以(并且将会)学习如何精确地对此进行补偿。随着状态重置与总观察值的比率增加,模型参数将越来越多地调整到该零状态,这可能会影响后续时间步长的性能。
- Do we have other options?
一个简单的解决方案是使初始状态有噪声(以减少第一个时间步的损失)。在这里寻找 details and other ideas
我在 Tensorflow 中使用 LSTM 单元。
lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units)
我想知道权重和状态是如何初始化的,或者更确切地说,Tensorflow 中 LSTM 单元(状态和权重)的默认初始化程序是什么?
有没有简单的方法来手动设置初始化程序?
注意:对于 tf.get_variable()
,据我从 documentation.
我认为您不能初始化单个单元格,但是当您使用 tf.nn.static_rnn
或 tf.nn.dynamic_rnn
执行 LSTM 时,您可以将 initial_state
参数设置为包含的张量LSTM 的初始值。
首先,LSTM 的权重(ANN 的常用参数集)之间存在差异,默认情况下它们也由 Glorot 或也称为 Xavier 初始化器初始化(如问题)。
另一个方面是单元状态和 LSTM 的初始循环输入状态。这些由通常表示为 initial_state
.
留给我们一个问题,如何初始化这个 initial_state
:
- Zero State Initialization is good practice if the impact of initialization is low
初始化 RNN 状态的默认方法是使用零状态。这通常很有效,特别是对于 sequence-to-sequence 任务,如语言建模,其中受初始状态显着影响的输出比例很小。
- Zero State Initialization in each batch can lead to overfitting
每个批次的零初始化将导致以下结果: sequence-to-sequence 模型早期步骤的损失(即状态重置后立即发生的损失)将大于后期步骤的损失,因为有历史较少。因此,它们在学习过程中对梯度的贡献会相对较高。但是,如果所有状态重置都与 zero-state 相关联,则模型可以(并且将会)学习如何精确地对此进行补偿。随着状态重置与总观察值的比率增加,模型参数将越来越多地调整到该零状态,这可能会影响后续时间步长的性能。
- Do we have other options?
一个简单的解决方案是使初始状态有噪声(以减少第一个时间步的损失)。在这里寻找 details and other ideas