机器学习学习记录【持续更新】——降低损失
降低损失的方法-迭代
下图是机器学习过程中常见的迭代流程图
该图体现了机器学习过程中,通过迭代来减少损失的基本思路。大致思路如下:首先根据数据集中的训练集来得到一个预测模型,然后利用该模型来计算一个特征对应的输出,并且计算出损失。通过获得的损失,来更新预测模型的参数,再反复进行上述过程。直至最后计算出来的损失降低至了可接受的范围,此时这个预测模型就可以认为是一个有效模型。
降低损失的方法-梯度下降法
这种方法适合凸形问题。凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。
通过计算整个数据集中 每个可能值的损失函数来找到收敛点这种方法效率太低。我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法。
了解了梯度下降法,那么接下来就好介绍什么是学习速率了。正如之前所述,梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。但是,学习速率的设定是一个难以抉择的问题。因为速率设定太大了,可能步子迈大了,一步迈过了目标。但是设定太小了,就容易耗费太长的时间。所以这个值的设定是一个难题。
降低损失的方法-随机梯度下降法
在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。到目前为止,我们一直假定批量是指整个数据集。就 Google 的规模而言,数据集通常包含数十亿甚至数千亿个样本。此外,Google 数据集通常包含海量特征。因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。
如果我们可以通过更少的计算量得出正确的平均梯度,会怎么样?通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。 随机梯度下降法 (SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。
小批量随机梯度下降法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。