使用全批次梯度下降、堆叠 100 层并使用 alpha 0.0001 会导致误差稳步下降。
但是,在我实施 Batch Norm 之后,同样的情况会导致波动。我的实现已经过几个人的验证,所以现在我想知道 - 为什么批处理规范会添加这种随机性效应?
事实上,在随机性变得非常明显且难以控制之前,我不再能够堆叠 100+ 层,只能堆叠大约 10 层。
更有趣的是——它似乎随着学习率的降低而变得更糟!0.4 很好,0.0001 导致更新更小(如预期)但相对波动更大(让我感到惊讶)。
为什么会这样?
编辑:刚刚尝试了100 层(每层 63 个神经元)。它非常嘈杂,但我能够或多或少地稳定地减少错误。如果我将学习率设置为10 (“十”,哈哈!),随机性会降低,如果设置为0.5 ,它只会变得更嘈杂,这非常奇怪
当然,这个学习率是如此之高,以至于错误偶尔会突然达到一个很高的值,但似乎适用于 100 层......
注意 - 我使用的是全批梯度下降,有 50 个元素
编辑:
使用 100 个 LSTM 单元,像柱子一样堆叠在一起。
时间步数为 50。特征大小为 50(lstm 状态的维度为 50),因为我的句子有 50 个不同的字符,每个字符每个时期只遇到一次。
在 50 个时间步之后执行反向传播 使用普通梯度下降,所有花哨的东西,如加速动量或 L2 范数,dropout 都被禁用。
我确信没有错误,但是如果有人能说出为什么 Batch Norm 具有这种随机属性,如果这对人们来说很常见的话。