为了训练模型,咱们须要一种可下降模型损失的好方法。迭代方法是一种普遍用于下降损失的方法,并且使用起来简单有效算法
了解如何使用迭代方法来训练模型。编程
全面了解梯度降低法和一些变体,包括:数组
尝试不一样的学习速率。机器学习
介绍了损失的概念。在本单元中,您将了解机器学习模型如何以迭代方式下降损失。ide
迭代学习可能会让您想到“Hot and Cold”这种寻找隐藏物品(如顶针)的儿童游戏。在咱们的游戏中,“隐藏的物品”就是最佳模型。刚开始,您会胡乱猜想(“w1 的值为 0。”),等待系统告诉您损失是多少。而后,您再尝试另外一种猜想(“w1 的值为 0.5。”),看看损失是多少。哎呀,此次更接近目标了。实际上,若是您以正确方式玩这个游戏,一般会愈来愈接近目标。这个游戏真正棘手的地方在于尽量高效地找到最佳模型。函数
下图显示了机器学习算法用于训练模型的迭代试错过程:学习
图 1. 用于训练模型的迭代方法。google
咱们将在整个机器学习速成课程中使用相同的迭代方法详细说明各类复杂状况,尤为是处于暴风雨中的蓝云区域。迭代策略在机器学习中的应用很是广泛,这主要是由于它们能够很好地扩展到大型数据集。code
“模型”部分将一个或多个特征做为输入,而后返回一个预测 (y’) 做为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型:blog
y′=b+w1x1
咱们应该为 b 和 w1 设置哪些初始值?对于线性回归问题,事实证实初始值并不重要。咱们能够随机选择值,不过咱们仍是选择采用如下这些可有可无的值:
假设第一个特征值是 10。将该特征值代入预测函数会获得如下结果:
y' = 0 + 0(10)
y' = 0
图中的“计算损失”部分是模型将要使用的损失函数。假设咱们使用平方损失函数。损失函数将采用两个输入值:
最后,咱们来看图的“计算参数更新”部分。机器学习系统就是在此部分检查损失函数的值,并为 b 和 w1 生成新值。如今,假设这个神秘的绿色框会产生新值,而后机器学习系统将根据全部标签从新评估全部特征,为损失函数生成一个新值,而该值又产生新的参数值。这种学习过程会持续迭代,直到该算法发现损失可能最低的模型参数。一般,您能够不断迭代,直到整体损失再也不变化或至少变化极其缓慢为止。这时候,咱们能够说该模型已收敛。
迭代方法图([图 1]包含一个标题为“计算参数更新”的华而不实的绿框。如今,咱们将用更实质的方法代替这种华而不实的算法。
假设咱们有时间和计算资源来计算 w1 的全部可能值的损失。对于咱们一直在研究的回归问题,所产生的损失与 w1 的图形始终是凸形。换言之,图形始终是碗状图,以下所示:
权重值 (wi)损失
图 2. 回归问题产生的损失与权重图为凸形。
凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。
经过计算整个数据集中 w1 每一个可能值的损失函数来找到收敛点这种方法效率过低。咱们来研究一种更好的机制,这种机制在机器学习领域很是热门,称为梯度降低法。
梯度降低法的第一个阶段是为 w1 选择一个起始值(起点)。起点并不重要;所以不少算法就直接将 w1 设为 0 或随机选择一个值。下图显示的是咱们选择了一个稍大于 0 的起点:
图 3. 梯度降低法的起点。
而后,梯度降低法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可让您了解哪一个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度(如图 3 所示)就等于导数。
▸
请注意,梯度是一个矢量,所以具备如下两个特征:
梯度始终指向损失函数中增加最为迅猛的方向。梯度降低法算法会沿着负梯度的方向走一步,以便尽快下降损失。
图 4. 梯度降低法依赖于负梯度。
为了肯定损失函数曲线上的下一个点,梯度降低法算法会将梯度大小的一部分与起点相加,以下图所示:
图 5. 一个梯度步长将咱们移动到损失曲线上的下一个点。
而后,梯度降低法会重复此过程,逐渐接近最低点。
##
正如以前所述,梯度矢量具备方向和大小。梯度降低法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以肯定下一个点的位置。例如,若是梯度大小为 2.5,学习速率为 0.01,则梯度降低法算法会选择距离前一个点 0.025 的位置做为下一个点。
超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费至关多的时间来调整学习速率。若是您选择的学习速率太小,就会花费太长的学习时间:
图 6. 学习速率太小。
相反,若是您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,就好像量子力学实验出现了严重错误同样:
图 7. 学习速率过大。
每一个回归问题都存在一个金发姑娘学习速率。“金发姑娘”值与损失函数的平坦程度相关。若是您知道损失函数的梯度较小,则能够放心地试着采用更大的学习速率,以补偿较小的梯度并得到更大的步长。
图 8. 学习速率偏偏好。
一维空间中的理想学习速率是 1f(x)″(f(x) 对 x 的二阶导数的倒数)。
二维或多维空间中的理想学习速率是海森矩阵(由二阶偏导数组成的矩阵)的倒数。
广义凸函数的状况则更为复杂。
在梯度降低法中,批量指的是用于在单次迭代中计算梯度的样本总数。到目前为止,咱们一直假定批量是指整个数据集。就 Google 的规模而言,数据集一般包含数十亿甚至数千亿个样本。此外,Google 数据集一般包含海量特征。所以,一个批量可能至关巨大。若是是超大批量,则单次迭代就可能要花费很长时间进行计算。
包含随机抽样样本的大型数据集可能包含冗余数据。实际上,批量大小越大,出现冗余的可能性就越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具有的预测价值每每并不比大型批量高。
若是咱们能够经过更少的计算量得出正确的平均梯度,会怎么样?经过从咱们的数据集中随机选择样本,咱们能够经过小得多的数据集估算(尽管过程很是杂乱)出较大的平均值。 随机梯度降低法(SGD) 将这种想法运用到极致,它每次迭代只使用一个样本(批量大小为 1)。若是进行足够的迭代,SGD 也能够发挥做用,但过程会很是杂乱。“随机”这一术语表示构成各个批量的一个样本都是随机选择的。
小批量随机梯度降低法(小批量 SGD)是介于全批量迭代与 SGD 之间的折衷方案。小批量一般包含 10-1000 个随机选择的样本。小批量 SGD 能够减小 SGD 中的杂乱样本数量,但仍然比全批量更高效。
为了简化说明,咱们只针对单个特征重点介绍了梯度降低法。请放心,梯度降低法也适用于包含多个特征的特征集。