在大多数监督性机器学习问题中,我们需要定义一个模型并基于训练数据集预估其参数。计算这些参数的广泛且容易使用的一个技术是通过梯度下降来最小化模型的误差。梯度下降通过在每个步骤最小化成本函数来在许多迭代中估计模型的权重。
以下是算法:
Repeat until convergence {
Wj = Wj - λ θF(Wj)/θWj
}
其中Wj是我们的一个参数(或者一个带有参数的向量),F是我们的代价函数(估计我们模型的误差),θF(Wj)/θWj是它对Wj的一阶导数,λ是学习率。
如果我们的F是单调的,那么这个方法将在多次迭代之后给出我们对使成本函数最小化的Wj权重的估计。注意,如果导数不是单调的,我们可能被困在本地的最小值。在这种情况下,一个简单的方法来检测这是通过重复不同的初始Wj值的过程,并比较新的估计参数的成本函数的值。
梯度下降并不总是计算权重的最佳方法,但它是一种相对快速简单的方法。如果您想了解更多关于梯度下降的信息,请查看吴恩达的斯坦福大学机器学习课程的笔记。
为了使梯度下降起作用,我们必须将λ(学习率)设置为适当的值。这个参数决定了我们朝着最佳权重移动的速度有多快。如果λ非常大,我们将跳过最优解。如果它太小,我们将需要大量的迭代来收敛到最佳值。所以使用合适的λ是至关重要的。
根据将要选择的成本函数F,我们可能会遇到不同的问题。当选择平方和误差作为我们的成本函数时,随着训练集的增大,θF(Wj)/θWj的值越来越大。因此λ必须适应明显较小的值。
解决这个问题的一种方法是用1 / N来划分λ,其中N是训练数据的大小。所以算法的更新步骤可以改写为:
Wj = Wj - (λ/N)*θF(Wj)/θWj
你可以从Wilson等人的论文“ 梯度下降学习的批量训练的一般低效率 ”中获得更多信息。
最后,解决这个问题的另一种方法是选择一个不受我们使用的训练样本数量影响的成本函数,如均方误差。
另一个好的方法是在每次迭代中调整λ的值。这背后的想法是,离最佳值越远,向最佳值移动的速度越快,因此λ的值应该更大。越接近解决方案,其值越小。不幸的是,由于你不知道实际的最佳值,你也不知道你在每一步中离他们有多近。
为了解决这个问题,可以通过在每次迭代结束时使用模型的估计参数来检查误差函数的值。如果自上次迭代以来错误率降低了,可以尝试将学习率提高5%。如果错误率实际上增加了(意味着跳过了最佳点),你应该将Wj的值重置为先前迭代的值,并将学习率降低50%。这种技术被称为Bold Driver。
在许多机器学习的问题中,对输入向量进行归一化是相当普遍的做法。在一些技术中,归一化是必需的因为它们在内部使用距离或特征方差,因此没有归一化结果将受到具有最大方差或尺度的特征的严重影响。标准化您的输入也可以帮助您的数值优化方法(如渐变下降)更快更准确地收敛。
即使有多种方法来标准化变量,[0,1]标准化(也称为最小 - 最大)和z-score标准化是其中使用最广泛的两种。下面是你如何计算他们两个:
XminmaxNorm = (X - min(X))/(max(X)-min(X));
XzscoreNorm = (X - mean(X))/std(X);
希望这对你有用!
你喜欢这篇文章吗?请花一点时间在Twitter上分享。