美文网首页
第3节降低损失:迭代方法|机器学习速成课程

第3节降低损失:迭代方法|机器学习速成课程

作者: 努力奋斗的durian | 来源:发表于2018-07-24 11:00 被阅读141次

    文章转载Google,最近更新:2018-07-24

    Google上线了一个“机器学习速成课程”,英文简称MLCC。这个课程节奏紧凑、内容实用。课程基本可以全程中文(包括视频),免费,并且有相关的练习.

    如果可以翻墙的小伙伴,可以看看,链接如下:机器学习速成课程

    1.降低损失:迭代方法

    预计用时:10 分钟

    上一单元介绍了损失的概念。在本单元中,您将了解机器学习模型如何以迭代方式降低损失。

    迭代学习可能会让您想到“Hot and Cold”这种寻找隐藏物品(如顶针)的儿童游戏。在我们的游戏中,“隐藏的物品”就是最佳模型。刚开始,您会胡乱猜测("w1"的值为0),等待系统告诉您损失是多少。然后,您再尝试另一种猜测("w1"的值为0.5),看看损失是多少。哎呀,这次更接近目标了。实际上,如果您以正确方式玩这个游戏,通常会越来越接近目标。这个游戏真正棘手的地方在于尽可能高效地找到最佳模型。

    下图显示了机器学习算法用于训练模型的迭代试错过程:


    图 1. 用于训练模型的迭代方法。

    我们将在整个机器学习速成课程中使用相同的迭代方法详细说明各种复杂情况,尤其是处于暴风雨中的蓝云区域。迭代策略在机器学习中的应用非常普遍,这主要是因为它们可以很好地扩展到大型数据集。

    “模型”部分将一个或多个特征作为输入,然后返回一个预测 (y') 作为输出。为了进行简化,不妨考虑一种采用一个特征并返回一个预测的模型:


    我们应该为 b 和 w1 设置哪些初始值?对于线性回归问题,事实证明初始值并不重要。我们可以随机选择值,不过我们还是选择采用以下这些无关紧要的值:

    • b=0
    • w1=0

    假设第一个特征值是 10。将该特征值代入预测函数会得到以下结果:

    y' = 0 + 0(10)
    y' = 0

    图中的“计算损失”部分是模型将要使用的损失函数。假设我们使用平方损失函数。损失函数将采用两个输入值:

    • y':模型对特征 x 的预测
    • y:特征 x 对应的正确标签。

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

    学习要点:
    在训练机器学习模型时,首先对权重和偏差进行初始猜测,然后反复调整这些猜测,直到获得损失可能最低的权重和偏差为止。

    关键字词

    • 收敛
      通俗来说,收敛通常是指在训练期间达到的一种状态,即经过一定次数的迭代之后,训练损失和验证损失在每次迭代中的变化都非常小或根本没有变化。也就是说,如果采用当前数据进行额外的训练将无法改进模型,模型即达到收敛状态。在深度学习中,损失值有时会在最终下降之前的多次迭代中保持不变或几乎保持不变,暂时形成收敛的假象。
    • 训练
      数据集的子集,用于训练模型。与验证集测试集相对。

    • 损失
      一种衡量指标,用于衡量模型的预测偏离其标签的程度。或者更悲观地说是衡量模型有多差。要确定此值,模型必须定义损失函数。例如,线性回归模型通常将均方误差用于损失函数,而逻辑回归模型则使用对数损失函数

    2.降低损失 (Reducing Loss):梯度下降法

    预计用时:10 分钟

    迭代方法图(图 1)包含一个标题为“计算参数更新”的华而不实的绿框。现在,我们将用更实质的方法代替这种华而不实的算法。

    图 1

    假设我们有时间和计算资源来计算w1的所有可能值的损失。对于我们一直在研究的回归问题,所产生的损失与 w1的图形始终是凸形。换言之,图形始终是碗状图,如下所示:

    图 2
    图 2. 回归问题产生的损失与权重图为凸形。

    凸形问题只有一个最低点;即只存在一个斜率正好为 0 的位置。这个最小值就是损失函数收敛之处。

    通过计算整个数据集中 w1 每个可能值的损失函数来找到收敛点这种方法效率太低。我们来研究一种更好的机制,这种机制在机器学习领域非常热门,称为梯度下降法。

    梯度下降法的第一个阶段是为 w1 选择一个起始值(起点)。起点并不重要;因此很多算法就直接将 w1 设为 0 或随机选择一个值。下图显示的是我们选择了一个稍大于 0 的起点:

    图 3

    图 3. 梯度下降法的起点。

    然后,梯度下降法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可以让您了解哪个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度(如图 3 所示)就等于导数。
    请注意,梯度是一个矢量,因此具有以下两个特征:

    • 方向
    • 大小

    梯度始终指向损失函数中增长最为迅猛的方向。梯度下降法算法会沿着负梯度的方向走一步,以便尽快降低损失。

    图 4

    图 4. 梯度下降法依赖于负梯度。

    为了确定损失函数曲线上的下一个点,梯度下降法算法会将梯度大小的一部分与起点相加,如下图所示:


    图 5

    图 5. 一个梯度步长将我们移动到损失曲线上的下一个点。
    然后,梯度下降法会重复此过程,逐渐接近最低点。

    关键字词

    • 梯度下降法 (gradient descent)
      一种通过计算并且减小梯度将损失降至最低的技术,它以训练数据为条件,来计算损失相对于模型参数的梯度。通俗来说,梯度下降法以迭代方式调整参数,逐渐找到权重和偏差的最佳组合,从而将损失降至最低。

    • 步长 (step size)
      学习速率的同义词。

    3.降低损失 (Reducing Loss):学习速率

    正如之前所述,梯度矢量具有方向和大小。梯度下降法算法用梯度乘以一个称为学习速率(有时也称为步长)的标量,以确定下一个点的位置。例如,如果梯度大小为 2.5,学习速率为 0.01,则梯度下降法算法会选择距离前一个点 0.025 的位置作为下一个点。

    超参数是编程人员在机器学习算法中用于调整的旋钮。大多数机器学习编程人员会花费相当多的时间来调整学习速率。如果您选择的学习速率过小,就会花费太长的学习时间:


    图 6

    图 6. 学习速率过小。
    相反,如果您指定的学习速率过大,下一个点将永远在 U 形曲线的底部随意弹跳,就好像量子力学实验出现了严重错误一样:

    图 7
    图 7. 学习速率过大。

    每个回归问题都存在一个金发姑娘学习速率。“金发姑娘”值与损失函数的平坦程度相关。如果您知道损失函数的梯度较小,则可以放心地试着采用更大的学习速率,以补偿较小的梯度并获得更大的步长。

    图 8
    图 8. 学习速率恰恰好。

    关键字词

    • 超参数 (hyperparameter)

    在模型训练的连续过程中,您调节的“旋钮”。例如,学习速率就是一种超参数。

    参数相对。

    • 学习速率 (learning rate)

    在训练模型时用于梯度下降的一个变量。在每次迭代期间,梯度下降法都会将学习速率与梯度相乘。得出的乘积称为梯度步长

    学习速率是一个重要的超参数

    4.优化学习速率

    尝试不同的学习速率,看看不同的学习速率对到达损失曲线最低点所需的步数有何影响。请尝试进行图表下方的练习。

    练习 1

    在滑块上设置 0.1 的学习速率。不断按下“STEP”(步)按钮,直到梯度下降法算法到达损失曲线的最低点。一共走了多少步?

    答案:梯度下降法到达曲线的最低点需要 81 步。


    练习 2

    您可以使用更高的学习速率更快地到达最低点吗?将学习速率设为 1,然后不断按“STEP”(步)按钮,直到梯度下降法到达最低点。这次走了多少步?
    答案:梯度下降法到达曲线的最低点需要 6 步。


    练习 3

    如果采用更大的学习速率会怎么样?重置该图,将学习速率设为 4,然后尝试到达损失曲线的最低点。这次发生了什么情况?
    答案:梯度下降法从未到达最低点。结果是,步长逐渐增加。每一步都在曲线上来回跳跃,沿着曲线向上爬,而不是降到底部。


    可选挑战

    您能否为该曲线找到金发姑娘般刚刚好的学习速率,让梯度下降法以最少的步数到达最低点?最少需要多少步才能到达最低点?
    答案:该数据的“金发姑娘般刚刚好”的学习速率为 1.6,1 步就能到达最低点。

    注意:
    在实践中,成功的模型训练并不意味着要找到“完美”(或接近完美)的学习速率。我们的目标是找到一个足够高的学习速率,该速率要能够使梯度下降过程高效收敛,但又不会高到使该过程永远无法收敛。

    5.随机梯度下降法

    在梯度下降法中,批量指的是用于在单次迭代中计算梯度的样本总数。到目前为止,我们一直假定批量是指整个数据集。就 Google 的规模而言,数据集通常包含数十亿甚至数千亿个样本。此外,Google 数据集通常包含海量特征。因此,一个批量可能相当巨大。如果是超大批量,则单次迭代就可能要花费很长时间进行计算。

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

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

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

    为了简化说明,我们只针对单个特征重点介绍了梯度下降法。请放心,梯度下降法也适用于包含多个特征的特征集。

    关键字词

    • 小批次 (mini-batch)

    从训练或推断过程的一次迭代中一起运行的整批样本内随机选择的一小部分。小批次的规模通常介于 10 到 1000 之间。与基于完整的训练数据计算损失相比,基于小批次数据计算损失要高效得多。

    • 小批次随机梯度下降法 (SGD, mini-batch stochastic gradient descent)

    一种采用小批次样本的梯度下降法。也就是说,小批次 SGD 会根据一小部分训练数据来估算梯度。Vanilla SGD 使用的小批次的规模为 1。

    6.Playground 练习

    每个 Playground 练习都会生成一个数据集。此数据集的标签具有两个可能值。您可以将这两个可能值设想成垃圾邮件与非垃圾邮件,或者设想成健康的树与生病的树。大部分练习的目标是调整各种超参数,以构建可成功划分(分开或区分)一个标签值和另一个标签值的模型。请注意,大部分数据集都包含一定数量的杂乱样本,导致无法成功划分每个样本。


    案例
    每个 Playground 练习都会显示模型当前状态的直观图示。例如,以下就是一个模型的直观图示:

    请注意以下关于模型直观图示的说明:

    • 每个蓝点表示一类数据的一个样本(例如,一棵健康的树)。
    • 每个橙点表示另一类数据的一个样本(例如,一棵生病的树)。
    • 背景颜色表示该模型对于应该在何处找到相应颜色样本的预测。某个蓝点周围显示蓝色背景表示该模型正确地预测了该样本。相反,某个蓝点周围显示橙色背景则表示该模型错误地预测了该样本。
    • 背景的蓝色和橙色部分色调会有深浅之分。例如,直观图示的左侧是纯蓝色,但在直观图示的中心颜色则逐渐淡化为白色。您可以将颜色强度视为表明该模型对其猜测结果的自信程度。因此,纯蓝色表示该模型对其猜测结果非常自信,而浅蓝色则表示该模型的自信程度稍低。(图中所示的模型直观图示在预测方面的表现非常糟糕。)

    可以通过直观图示来判断模型的进展。(“非常棒 - 大多数蓝点都有蓝色背景”或者“糟糕!蓝点有橙色背景。”)除了颜色之外,Playground 还会以数字形式显示模型的当前损失。(“糟糕!损失正在上升,而不是下降。”)


    此练习的界面提供了 3 个按钮:


    在这第一个 Playground 练习中,您将通过执行以下两个任务来尝试不同的学习速率。

    任务 1:
    注意 Playgroud 右上角的学习速率菜单。指定学习速率为 3,这个值非常高。通过点击“步”按钮 10 或 20 次,观察这种较高的学习速率会如何影响您的模型。在早期的每次迭代之后,请注意模型的直观图示如何急剧变化。模型似乎已收敛后,您甚至可能看到出现不稳定的情况。另请注意从 x1 和 x2 到模型直观图示之间的线。这些线的权重表示模型中相应特征的权重。也就是说,线越粗,权重越高。

    • 步为10次,学习速率为 3


    • 步为20次,学习速率为 3


    任务 2:

    执行以下操作:
    1.按重置按钮。
    2.降低学习速率。
    3.多次按“步”按钮。
    较低的学习速率对收敛有何影响?了解模型收敛所需的步数,并了解模型收敛的顺滑平稳程度。尝试较低的学习速率。能否发现因过慢而无用的学习速率?(您将在练习的正下方找到相关讨论。)

    • 学习速速为1


    • 学习速速为0.3


    • 学习速速为0.1


    由于 Playground 练习具有非确定性,我们无法始终提供与您的数据集完全一致的答案。即便如此,对于我们来说,0.1 的学习速率仍可有效收敛。学习速率越小,收敛所花费的时间越多;也就是说,较小的学习速率会因过慢而没有用处。

    7.批量大小练习

    查看以下选项。基于大型数据集执行梯度下降法时,以下哪个批量大小可能比较高效?
    A、小批量或甚至包含一个样本的批量 (SGD)。
    B、全批量。
    正确答案是A

    解析:

    • A、小批量或甚至包含一个样本的批量 (SGD)。
      令人惊讶的是,在小批量或甚至包含一个样本的批量上执行梯度下降法通常比全批量更高效。毕竟,计算一个样本的梯度要比计算数百万个样本的梯度成本低的多。为确保获得良好的代表性样本,该算法在每次迭代时都会抽取另一个随机小批量数据(或包含一个样本的批量数据)。
      B、全批量。
    • 对全批量计算梯度这一做法的效率并不高。也就是说,与非常大的全批量相比,对较小的批量计算梯度通常高效得多(并且准确度无异)。

    相关文章

      网友评论

          本文标题:第3节降低损失:迭代方法|机器学习速成课程

          本文链接:https://www.haomeiwen.com/subject/dlfemftx.html