【问题标题】:Wrong Backprop updates in BatchnormBatchnorm 中的错误反向传播更新
【发布时间】:2023-03-20 14:54:02
【问题描述】:

我有这些 Backprop 更新,请让我知道 dx 部分哪里出错了。在计算图中,我使用 X、sample_mean 和 sample_var。感谢您的帮助

(x, norm, sample_mean, sample_var, gamma, eps) = cache
dbeta = np.sum(dout, axis = 0)
dgamma = np.sum(dout * norm, axis = 0)
dxminus = dout * gamma / np.sqrt(sample_var + eps)
dmean = - np.sum(dxminus, axis = 0)
dxmean = np.full(x.shape, 1.0/x.shape[0]) * dmean
dvar = np.sum(dout * gamma * (x - sample_mean), axis = 0)
dxvar = dvar * (-1 / x.shape[0]) * np.power(x, -1.5) * (x - sample_mean)
dx = dxminus + dxmean + dxvar

BatchNorm Computational Graph I used for deriving

【问题讨论】:

    标签: machine-learning neural-network backpropagation batch-normalization


    【解决方案1】:

    您的dx 公式看起来不正确,因为x 节点将接收来自其他两个节点的反向消息(一个是总和,另一个是平均值),看起来您正在计算只有一个组件:

    所以它应该看起来像这样:

    dx1 = dxmu1 + dxmu2
    dmu = -1 * np.sum(dxmu1+dxmu2, axis=0)
    dx2 = 1. /N * np.ones((N,D)) * dmu
    dx = dx1 + dx2
    

    图片来自this wonderful post。你也可以在那里找到完整的代码。

    【讨论】:

    • 我已经更新并添加了计算图。请让我知道错误在哪里。感谢以上回答和帮助。
    猜你喜欢
    • 2020-09-02
    • 1970-01-01
    • 2021-06-30
    • 2018-08-03
    • 2023-04-05
    • 2017-12-10
    • 2015-06-11
    • 1970-01-01
    • 2016-04-14
    相关资源
    最近更新 更多