GlorotNormal,也称为Xavier Normal initializer,是一种在深度学习中用于权重初始化的方法。它的核心思想是从以0为中心的截断正态分布中抽取样本来初始化权重,其中标准差stddev被设置为sqrt(2 / (fan_in + fan_out))。这里的fan_in指的是权重张量中的输入单元数,而fan_out指的是权重张量中的输出单元数。

VarianceScaling类中,mode参数可以设置为"fan_in""fan_out""fan_avg"。当mode设置为"fan_avg"时,计算标准差的方式是取输入单元数和输出单元数的平均值,即n = (fan_in + fan_out) / 2。这样,stddev的计算公式变为sqrt(scale / n),其中scale是缩放因子,nfan_infan_out的平均值。

因此,当使用GlorotNormal(或Xavier Normal)初始化器并设置mode"fan_avg"时,权重的初始化会考虑到输入和输出单元数的平均值,以期在深层网络的前向和反向传播过程中保持激活值和梯度的方差稳定,从而避免梯度消失或爆炸问题。这种初始化方法特别适用于激活函数的导数在整个空间上的平均值接近1的情况,比如sigmoid或tanh激活函数。