google机器学习框架tensorflow学习笔记(三)

降低损失:迭代法

迭代学习其实就是一种反馈的结果,有点类似于猜数游戏,首先你随便猜一个数,对方告诉你大了还是小了,接着你根据对方提供的信息进行调整,继续往正确的方向猜测,如此往复,你通常会越来越接近要猜的数。 这个游戏真正棘手的地方在于尽可能高效地找到最佳模型。
下图显示了机器学习算法用于训练模型的迭代试错过程:
迭代策略在机器学习中的应用非常普遍,这主要是因为它们可以很好地扩展到大型数据集。
“模型”部分将一个或多个特征作为输入,然后返回一个预测 (y') 作为输出。

图中的“计算损失”部分是模型将要使用的损失函数。

最后,我们来看图的“计算参数更新”部分。机器学习系统就是在此部分检查损失函数的值。现在,假设这个神秘的绿色框会产生新值,然后机器学习系统将根据所有标签重新评估所有特征,为损失函数生成一个新值,而该值又产生新的参数值。这种学习过程会持续迭代,直到该算法发现损失可能最低的模型参数。通常,您可以不断迭代,直到总体损失不再变化或至少变化极其缓慢为止。这时候,我们可以说该模型已收敛
要点:在训练机器学习模型时,首先对权重和偏差进行初始猜测,然后反复调整这些猜测,直到获得损失可能最低的权重和偏差为止。

降低损失:梯度下降法

假设我们有时间和计算资源来计算w1 的所有可能值的损失。对于我们一直在研究的回归问题,所产生的损失与w1 的图形始终是凸形。如下所示:
凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。
通过计算整个数据集中w1每个可能值的损失函数来找到收敛点这种方法效率太低。我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法
梯度下降法的第一个阶段是为w1选择一个起始值(起点)。起点并不重要;因此很多算法就直接将w1设为 0 或随机选择一个值。
然后,梯度下降法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可以让您了解哪个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度(如图)就等于导数。
为了确定损失函数曲线上的下一个点,梯度下降法算法会将梯度大小的一部分与起点相加,如下图所示:
然后,梯度下降法会重复此过程,逐渐接近最低点。

降低损失:学习速率

正如之前所述,梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为 学习速率 (有时也称为 步长 )的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。
超参数 是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。如果您选择的学习速率过小,就会花费太长的学习时间,相反,如果您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,就好像量子力学实验出现了严重错误一样。


降低损失:随机梯度下降法


在梯度下降法中, 批量 指的是用于在单次迭代中计算梯度的样本总数。到目前为止,我们一直假定批量是指整个数据集。 因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。

包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。

通过从我们的数据集中随机选择样本,我们可以通过小得多的数据集估算(尽管过程非常杂乱)出较大的平均值。  随机梯度下降法  ( SGD ) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。如果进行足够的迭代,SGD 也可以发挥作用,但过程会非常杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。

小批量随机梯度下降法 小批量 SGD )是介于全批量迭代与 SGD 之间的折衷方案。小批量通常包含 10-1000 个随机选择的样本。小批量 SGD 可以减少 SGD 中的杂乱样本数量,但仍然比全批量更高效。

猜你喜欢

转载自blog.csdn.net/qq_41196472/article/details/79567787
今日推荐