11

我目前正在 tensorflow 中构建一个 CNN,并且我正在使用 He 正常权重初始化来初始化我的权重矩阵。但是,我不确定我应该如何初始化我的偏差值。我在每个卷积层之间使用 ReLU 作为我的激活函数。是否有初始化偏差值的标准方法?

# Define approximate xavier weight initialization (with RelU correction described by He)
def xavier_over_two(shape):
    std = np.sqrt(shape[0] * shape[1] * shape[2])
    return tf.random_normal(shape, stddev=std)

def bias_init(shape):
    return #???
4

2 回答 2

12

初始化偏差。将偏差初始化为零是可能且常见的,因为不对称破坏是由权重中的小随机数提供的。对于 ReLU 非线性,有些人喜欢对所有偏差使用小的常数值,例如 0.01,因为这可以确保所有 ReLU 单元在开始时触发,从而获得并传播一些梯度。但是,尚不清楚这是否提供了一致的改进(事实上,一些结果似乎表明这表现得更差),并且更常见的是简单地使用 0 偏差初始化。

来源:http ://cs231n.github.io/neural-networks-2/

于 2017-07-03T12:13:04.683 回答
5

请注意最后一层偏差的具体情况。正如 Andrej Karpathy 在他的《训练神经网络的秘诀》中所解释的:

初始化好。正确初始化最终层权重。例如,如果您要回归一些平均值为 50 的值,则将最终偏差初始化为 50。如果您有一个比例为 1:10 正:负的不平衡数据集,请在您的 logits 上设置偏差,以便您的网络预测概率初始化时为 0.1。正确设置这些将加速收敛并消除“曲棍球棒”损失曲线,在前几次迭代中,您的网络基本上只是在学习偏差。

于 2020-06-24T12:24:41.677 回答