Average 'moving mean' and 'moving variance' of batch_normal op
Created by: wanghaoshuang
在OCR CTC相关实验中,在开启model average选项的情况下,fluid比paddle V1训练收敛更快更好 , 原因是fluid对batch normal op中的moving mean
和moving variance
做了average, 而paddle V1没有对这两个parameter做average。
为了验证上述猜想,做了一组对比实验,实验证明对moving mean
和moving variance
的average可以使训练收敛更加快速平滑,结果如下图所示:
ModelAverage是根据 optimizer.minimize()返回的params_grads来决定对哪些parameters做average的,而且在average过程中,会用到params_grads中的grads来临时暂存parameter value. 对于batch normal的parameter有以下两个问题:
- 在这个PR #9299 中, 通过为batch noraml op 定义特殊的Maker, 使得在backward阶段没有为
moving mean
和moving variance
create grad variables. -
moving mean
和moving variance
均被设置了stop_gradient=True, 所以他们也不会出现在params_grads中。
为了解决上述两个问题,我们需要:
- 把batch normal op的
moving mean
和moving variance
添加到params_grads中,并为其create grad variables.