我很难理解图层归一化。假设我在张量流中训练了一个模型。当我检查图的变量时,得到以下信息:
{{1}}
如您所见,它是一个两层的全连接网络,每一层都进行了标准化。
因此,我知道将偏差添加到节点输入中。变量actor / LayerNorm / beta:0,actor / LayerNorm / gamma:0等是否以相同的方式工作?我能否仅将一层的偏差,β和伽玛值概括为一个“偏差”矢量?还是完全不同的机制?
提前谢谢!
答案 0 :(得分:3)
beta和gamma变量与偏差变量不同。代码是这样的:
y = tf.matmul(kernel, x) + bias
mean, variance = tf.nn.moments(y, [1], keep_dims=True)
normalized_y = (y - mean) / tf.sqrt(variance + 1e-5)
y_out = normalized_y * gamma + beta
首先,将内核与输入x
相乘,然后加上偏差项。然后,您可以计算向量y
中值的均值和方差。您可以通过减去平均值并除以总标准偏差来归一化y
。最后,您可以通过将每个维度乘以gamma并添加beta来调整y。
答案 1 :(得分:1)
我建议改为使用tensorflow官方仓库中贡献者提供的实现。 这是layer normalization implementation