为什么批量标准化中的梯度检查不起作用?

时间:2018-04-28 19:08:28

标签: python neural-network gradient-descent batch-normalization

我有一个神经网络的自我实现,具有学习速率,动量,L1 / L2正则化和批量归一化。当我执行梯度检查时,所有渐变都是正确的,除非我使用批量标准化

我编写了一个python代码来测试批量规范化的梯度检查: https://gist.github.com/arnaldog12/9ba321cfdb18b6955a83403df1a7f514

对于上面的代码,我尝试删除所有不必要的代码,如动量,丢失和L1 / L2正则化。如果您只是在numpy的某个python环境中复制并粘贴上面的代码,它就会起作用。

我相信错误是在我传递给 batchnorm_backward 函数的渐变中,以及我稍后计算的渐变。目前,我一直在调试代码,但我一直无法找到错误。

有人已经对批量规范化进行了梯度检查吗? 如果是这样,我做错了什么?

1 个答案:

答案 0 :(得分:0)

经过一段时间后,我意识到,为了检查批量规范的梯度,您必须计算成本,就像模型处于训练模式一样。如果检查梯度就像模型处于测试模式一样,批量规范将使用运行均值和方差而不是批次均值和批次方差,并且梯度检查将失败。