张量流 LSTM 状态和权重的默认初始化?



我在Tensorflow中使用LSTM单元。

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

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

有没有一种简单的方法来手动设置初始值设定项?

注意:就tf.get_variable()而言,我从文档中可以找到该glorot_uniform_initializer

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

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

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

  1. 如果初始化的影响较小,则零状态初始化是一种很好的做法

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

  1. 每批中的零状态初始化可能导致过度拟合

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

  1. 我们还有其他选择吗?

一个简单的解决方案是使初始状态具有噪声(以减少第一个时间步长的损耗)。查看此处了解详细信息和其他想法

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

最新更新