gpt4 book ai didi

tensorflow - 为什么 tf.contrib.layers.instance_norm 层包含 StopGradient 操作?

转载 作者:行者123 更新时间:2023-12-05 06:57:53 27 4
gpt4 key购买 nike

为什么tf.contrib.layers.instance_norm层包含StopGradient操作?即为什么需要它?

enter image description here

即使在更简单的层 tf.nn.moments 中似乎也有 StopGradient(它可以是 tf.contrib.layers.instance_norm).

x_m, x_v = tf.nn.moments(x, [1, 2], keep_dims=True)

enter image description here

我还在 tf.nn.moments 源代码中找到关于 StopGradient 的注释:

# The dynamic range of fp16 is too limited to support the collection of
# sufficient statistics. As a workaround we simply perform the operations
# on 32-bit floats before converting the mean and variance back to fp16
y = math_ops.cast(x, dtypes.float32) if x.dtype == dtypes.float16 else x
# Compute true mean while keeping the dims for proper broadcasting.
mean = math_ops.reduce_mean(y, axes, keepdims=True, name="mean")
# sample variance, not unbiased variance
# Note: stop_gradient does not change the gradient that gets
# backpropagated to the mean from the variance calculation,
# because that gradient is zero
variance = math_ops.reduce_mean(
math_ops.squared_difference(y, array_ops.stop_gradient(mean)),
axes,
keepdims=True,
name="variance")

所以这是一种优化,因为梯度始终为零?

最佳答案

尝试回答。

这个设计告诉我们,最小化第二个矩我们不希望通过第一个矩传播梯度。是否有意义?如果我们尝试最小化 E[x^2]-E[x]^2 我们将最小化 E[x^2] 同时最大化 E[x ]^2。第一项会减少每个元素的绝对值(将它们拖到中心)。第二项将通过梯度增加所有值,这不会最小化方差,但可能会对其他梯度路径产生负面影响。

因此,我们不会通过第一个矩传播第二个矩的梯度,因为这个梯度不会影响第二个矩,至少在使用普通 SGD 时是这样。

关于tensorflow - 为什么 tf.contrib.layers.instance_norm 层包含 StopGradient 操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64776769/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com