Skip to content

Average 'moving mean' and 'moving variance' of batch_normal op #9458

Closed
@wanghaoshuang

Description

@wanghaoshuang

OCR CTC相关实验中,在开启model average选项的情况下,fluid比paddle V1训练收敛更快更好 , 原因是fluid对batch normal op中的moving meanmoving variance做了average, 而paddle V1没有对这两个parameter做average。

为了验证上述猜想,做了一组对比实验,实验证明对moving meanmoving variance的average可以使训练收敛更加快速平滑,结果如下图所示:
image

ModelAverage是根据 optimizer.minimize()返回的params_grads来决定对哪些parameters做average的,而且在average过程中,会用到params_grads中的grads来临时暂存parameter value. 对于batch normal的parameter有以下两个问题:

  1. 在这个PR Shrink batch_norm_grad's inputs #9299 中, 通过为batch noraml op 定义特殊的Maker, 使得在backward阶段没有为moving meanmoving variance create grad variables.
  2. moving meanmoving variance 均被设置了stop_gradient=True, 所以他们也不会出现在params_grads中。

为了解决上述两个问题,我们需要:

  1. 把batch normal op的moving meanmoving variance添加到params_grads中,并为其create grad variables.

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions