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

mrk*_*mrk 0 python initializer lstm tensorflow recurrent-neural-network

我在 Tensorflow 中使用 LSTM 单元。

lstm_cell = tf.contrib.rnn.BasicLSTMCell(lstm_units)
Run Code Online (Sandbox Code Playgroud)

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

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

注意:tf.get_variable()据我从文档中了解到,使用了 glorot_uniform_initializer 。

mrk*_*mrk 7

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

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

留给我们的问题是,如何初始化它initial_state

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

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

  1. 每批零状态初始化会导致过拟合

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

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

一个简单的解决方案是使初始状态嘈杂(以减少第一个时间步的损失)。在这里查看详细信息和其他想法