在RNN / lstm RNN中使用批量标准化是否正常?

时间:2017-08-03 19:50:55

标签: machine-learning deep-learning

我是深度学习的初学者。我知道在常规神经网络中,人们在激活之前使用批量规范,这将减少对良好权重初始化的依赖。我想知道当我使用它时它是否会对RNN / lstm RNN做同样的事情。有没有人有这方面的经验?谢谢。

5 个答案:

答案 0 :(得分:2)

不,您不能在递归神经网络上使用批量标准化,因为统计是按批次计算的,这不考虑网络的重复部分。权重在RNN中共享,每个“循环回路”的激活响应可能具有完全不同的统计属性。

其他类似于批量标准化的技术已经开发出来,例如Layer Normalization

答案 1 :(得分:2)

虽然我发现2017年的this paper显示了一种在输入到隐藏中使用批量规范化的方法,并且隐藏到隐藏的变换训练更快并且在某些问题上更好地概括,但它并不常用。

另外,请查看Stack Exchange Cross Validated以获取更多面向机器学习的问答A.

答案 2 :(得分:2)

应用于RNN的批处理归一化与应用于CNN的批处理归一化:您可以通过以下方式计算统计信息:在应用BN之后,该层的循环/卷积属性仍然保持不变。

对于CNN,这意味着不仅要在微型批次上而且还要在两个空间维度上计算相关统计信息;换句话说,将归一化应用于通道维。

对于RNN,这意味着在小批量和时间/步长维度上计算相关统计信息,因此仅对向量深度进行归一化。这也意味着您只能对转换后的输入进行批量归一化(因此在垂直方向上,例如BN(W_x * x)。很抱歉,无法弄清楚如何添加LaTeX ...),因为水平(跨时间)连接是时间依赖,不应只是简单地求平均值。

答案 3 :(得分:0)

在进行BN的任何非经常性网络中(无论是否使用convnet),每一层都可以调整传入比例和均值,因此每一层的传入分布都不会持续变化(这就是BN论文的作者声称是国阵的优势。

对RNN的递归输出执行此操作的问题在于,现在在所有时间步之间共享用于传入分布的参数(这些时间步实际上是反向传播时间或BPTT中的层)。因此,分布最终在BPTT的时间层上固定。这可能没有意义,因为数据的结构可能会在整个时间序列中变化(以非随机方式)。例如,如果时间序列是一个句子,则某些单词更有可能出现在开头或结尾。因此,固定分布可能会降低BN的有效性。

答案 4 :(得分:0)

答案是是和否。

为什么要这样做,根据论文layer normalization,该节明确指出了BN在RNN中的使用。

为什么不呢?必须存储并计算每个时间步长的输出分布,以进行BN。想象一下,您填充序列输入,以便所有示例都具有相同的长度,因此,如果预测用例比所有训练用例都长,那么在某些时候,您将没有SGD训练过程中总结的输出分布的均值/标准差。 >

同时,至少在Keras中,我相信BN层仅考虑垂直方向的归一化,即序列输出。未标准化水平方向,即hidden_​​status,cell_status。如果我错了,请纠正我。

在多层RNN中,您可以考虑使用层归一化技巧。

相关问题