【发布时间】:2018-10-03 04:16:58
【问题描述】:
我正在使用 tensorflow 的 DNNRegressor。想知道标准化(应用对数或逆变换等)我的数值预测变量是否有助于提高模型性能,如果是,基本逻辑是什么? 附言MSE 被用于训练损失。
【问题讨论】:
标签: python tensorflow machine-learning deep-learning regression
我正在使用 tensorflow 的 DNNRegressor。想知道标准化(应用对数或逆变换等)我的数值预测变量是否有助于提高模型性能,如果是,基本逻辑是什么? 附言MSE 被用于训练损失。
【问题讨论】:
标签: python tensorflow machine-learning deep-learning regression
有多种归一化方法,例如,您可以使用批量归一化层,它使用高斯分布对层的输出进行归一化。
就预测而言,它没有区别。神经网络可以很容易地对抗你的归一化,因为它只是缩放权重并改变偏差。最大的问题在于训练。通常输入是标准化的,以保持较低的值并有助于避免称为exploding gradient 的问题。这是由于使用 sigmoid 激活函数的传统反向传播导致 sigmoid 导数饱和。
this post 的答案很好地解释了为什么它很重要。
【讨论】:
确实如此。 DNNRegressor 是一个神经网络,你使用梯度下降来优化它(可能是一些高级的东西,比如 Adam,但最终它仍然是 SGD)。你必须标准化你的特征以获得更好的梯度。更好,我的意思是或多或少相等,不是特别大也不是特别小。通过规范化,我的意思是:
关于如何使 SGD 更好地工作,有很多很棒的资源,但我建议看看 Hinton's lecture 和 this cool review of gradient descent algorithms。
【讨论】: