为什么LayerNormBasicLSTMCell比LSTMCell慢得多且准确度低?

时间:2017-07-17 17:17:57

标签: tensorflow normalization lstm

我最近发现LayerNormBasicLSTMCell是LSTM的一个版本,它实现了Layer Normalization和dropout。因此,我使用LSTMCell替换了我的原始代码和LayerNormBasicLSTMCell。这种变化不仅将测试精度从~96%降低到~92%,而且需要更长的时间(~33小时)进行训练(原始训练时间约为6小时)。所有参数都相同:历元数(10),堆叠层数(3),隐藏矢量大小数(250),丢失保持概率(0.5),......硬件也相同。

我的问题是:我在这里做错了什么?

我的原始模型(使用LSTMCell):

...
dropcells = []
for iiLyr in range(3):
    cell_iiLyr = tf.contrib.rnn.LayerNormBasicLSTMCell(
        num_units=250,
        forget_bias=1.0,
        activation=tf.tanh,
        layer_norm=True,
        norm_gain=1.0,
        norm_shift=0.0,
        dropout_keep_prob=0.5
        )
    dropcells.append(cell_iiLyr)
...

我的新模型(使用LayerNormBasicLSTMCell):

{{1}}

3 个答案:

答案 0 :(得分:4)

或许应为dropout_keep_prob分配占位符而不是常量值。尝试在培训时分配0.5,在推理时分配1.0。只是一个猜测。

答案 1 :(得分:2)

关于培训时间:我发现了这篇博文:http://olavnymoen.com/2016/07/07/rnn-batch-normalization。见最后一张图。批量标准化的lstm比香草lstm慢3倍以上。作者认为原因是批量统计计算。

关于准确性:我不知道。

答案 2 :(得分:1)

批量标准化和图层规范化不仅仅是通过小批量标准化输入分布,它们还添加了新的可学习变量beta和gamma。这是每个输入的每个维度的标量,因此四个输入乘以输入维度的两倍。

我认为这是导致经济放缓的大量新的可训练变量。

顺便说一下,如果你关闭layer_norm,它会大幅加速,这样就可以支持假设这是问题的层规范化。