在 Tensorflow 的ResNet实现中,我发现他们使用方差缩放初始化器,我还发现 xavier 初始化器很受欢迎。我在这方面没有太多经验,实践中哪个更好?
方差缩放初始化器和 xavier 初始化器有什么区别?
机器算法验证
机器学习
神经网络
深度学习
卷积神经网络
张量流
2022-02-10 06:41:31
2个回答
历史的角度
Xavier 初始化,最初由 Xavier Glorot 和 Yoshua Bengio 在“理解训练深度前馈神经网络的难度”中提出,是一种权重初始化技术,它试图使层输出的方差等于其输入的方差. 这个想法在实践中非常有用。自然,这个初始化依赖于层激活函数。在他们的论文中,Glorot 和 Bengio 考虑了逻辑 sigmoid激活函数,这是当时的默认选择。
后来,Sigmoid 激活被 ReLu 超越,因为它可以解决梯度消失/爆炸问题。因此,出现了一种新的初始化技术,它将相同的想法(平衡激活的方差)应用于这个新的激活函数。它是由 Kaiming He 在“Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification”中提出的,现在通常称为He 初始化。
在tensorflow中,He初始化是在variance_scaling_initializer()
function中实现的(其实就是一个更通用的初始化器,但是默认执行He初始化),而Xavier初始化器是逻辑上的xavier_initializer()
。
概括
综上所述,机器学习从业者的主要区别如下:
- 他的初始化对于具有ReLu激活的层效果更好。
- Xavier 初始化对于具有sigmoid激活的层效果更好。
方差缩放只是 Xavier 的概括:http: //tflearn.org/initializations/。它们都按照梯度的比例在所有层中应该相似的原则进行操作。Xavier 使用起来可能更安全,因为它经受住了时间的实验测试;尝试为方差缩放选择您自己的参数可能会抑制训练或导致您的网络根本无法获得收益。
其它你可能感兴趣的问题