我一直在思考为什么要在梯度下降的基本上下文中对每个特征进行归一化和缩放。
让我想知道的一件事是,我们为每个维度使用了一组预定义的学习率。现在我相信,如果我们不对它们进行归一化,由于特征尺度不同,我们需要保持较小的学习率,但这让我想到,我们不能有不同的学习率(适合每个特征维度尺度)吗?补偿不做标准化?
我一直在思考为什么要在梯度下降的基本上下文中对每个特征进行归一化和缩放。
让我想知道的一件事是,我们为每个维度使用了一组预定义的学习率。现在我相信,如果我们不对它们进行归一化,由于特征尺度不同,我们需要保持较小的学习率,但这让我想到,我们不能有不同的学习率(适合每个特征维度尺度)吗?补偿不做标准化?
您的问题的答案是肯定的,并且由于学术论文中引入了流行的方法,它已经实施。例如,亚当optimisaiton 方法是一种优化器,它假定将每个维度、特征与指定值相乘是无效的。它使用动量和几何平均的概念以及许多其他方法来采用您不应该在不同维度下以相同速度下山的想法。它说的是你可能处于每个维度都有不同坡度的位置,因此你不应该以相同的学习率走下坡路。在这种方法中,尽管您为优化器指定了相同的学习率,但由于使用了动量,它在实践中会针对不同的维度发生变化。至少据我所知,每个维度的不同学习率的想法是由 Pr 引入的。Hinton 与他的方法,即RMSProp。
欢迎加入群:)。
在回答你的问题之前,如果我解释一下为什么以及如何使用“学习率”会很好。 对于共享以下等式:
这里theta 是 weight而alpha 是 learning rate。
这个方程是梯度下降方程,用于优化权重。 在内部,优化器通常对每个权重(与不同特征相关的权重)分别执行类似类型的方程。
学习率值描述了它应该对之前的权重进行多少调整。值越高,收敛速度越快(但可能会跳过最佳值,这就是使用最佳值的原因)。
现在回到你的问题:“我们不能有不同的学习率(适合每个特征维度尺度)来补偿不做标准化吗?”
如果我从数学上考虑,在我看来,是的,我们可以根据特征值使用不同的学习率,我们肯定会尝试评估特征权重。
到目前为止,我了解 Tensorflow 和 Scikit,它们都使用单一的学习率,并且它对所有功能都是通用的。因此,如果您想使用不同的学习率(每个功能),您必须编写自己的优化器代码或使用其他一些库(不确定是哪一个)。
附加说明可能会有所帮助: 特征缩放绝对有助于在特征权重计算方面更快地收敛。但是如果我们不做特征缩放,在一些算法比如 KNN 的情况下,K-Means 特征值也可能会影响模型训练。
简短的回答 - 是的。Adam-bias-corrected 是一个很好的例子,具有所有好处。
长答案-Hinton & Adadelta 的 RMSProp(通过 Hessian 近似校正单位),这两种方法都与您要求的相同,即不适用于单一学习率,而是具有不同的学习率,而且它们也不需要选择全局学习率(原始 Adadelta 就是这种情况)。他们都以相似的方式工作,各有优缺点。Adgrad 是第一个针对不同参数引入自适应学习率的方法。
而 RMSprop 具有指数衰减平均值,它存储了过去平方梯度 vt 的衰减平均值。
下面的 mt 是过去梯度的平均值
这将我们带到了 Adam - 偏差校正方法。上面,由于 mt 和 vt 被初始化为零向量,因此它们偏向零,特别是在初始时间步长或衰减率小时,因此 Adam - bias -correct 它适用于以下校正值
希望有帮助。