从零开始机器学习-6 如何降低损失

本文由 沈庆阳 所有,转载请与作者取得联系!

前言

在上一节中,我们介绍了和机器学习有关的一些概念。其中,通过损失来评价模型预测的准确程度。那么对于训练过程中,我们应该采取什么样的方法来减少损失呢?
我们都玩过猜价格的游戏:给定一个商品的价格,出题人明确商品的价格是多少,开始你也许会胡乱猜一个数字,出题人会告诉你相差多少(高很多,高一点,低一点…),那么你会根据出题人的反馈再次猜一个数字。上述的价格,可以是机器学习中的w1,当猜w1为0时,给出损失loss,根据损失再次猜w1的另一个值,比如0.2。如果一直这样猜下去的话,总有猜中的时候。但是,如何以最快的方法确定w1的值是值得商榷的。

降低损失的方法

迭代的方法

训练模型的迭代过程
上图展示了训练模型的迭代过程,首先迭代将模型的单个或多个特征来作为输入,然后通过模型来输出一个预测值y’作为输出,再通过输入标签与预测的值得出损失,再根据损失来更新模型中的参数。
假设,只有一个特征作为输入,则上述模型以机器学习形式表示如下:
y’ = b + w1x1
通常,b和w1的初始值的取值是无所谓的,所以假设b和w1为0,若输入值(特征)为1的话,则y’=0。此时,我们需要通过y(特征x对应的正确的标签)和y’(预测值)进行对比,得出损失。我们的机器学习程序,通过得到的损失相应的更新参数,产生新的b和w1的值,从而通过模型得到新的预测y’,并为损失函数提供新的输入。如此往复,直到整体损失不再改变,或是改变地很慢的时候,此时该模型已收敛。

梯度下降法

在高等数学中,我们学习过梯度。
梯度:本意是一个向量(矢量),表示某一函数在该点处的方向导数沿着该方向取得最大值,即函数在该点处沿着该方向(此梯度的方向)变化最快,变化率最大(为该梯度的模)。
在一元函数中,梯度即导数,而在二元以上函数中,梯度即偏导数。此处不深究计算方法。
在上一小节中讲到的迭代的方法并没有详细说明计算参数是如何更新的。那么该小节讲到的梯度下降法则是更为具体的方法。
损失曲线图
假设,实际损失与权重的图如上图所示(实际上我们是不知道该图是什么样子的)。对于损失与权重的图,其始终是凹的,即存在最低点使损失最小(也就是该点的斜率为0)。
暴力一点的方法,就是计算整个数据集中的w1的每个可能的值来得到最低的损失。对于回归问题来说,这种方法往往太过暴力而导致效率低下。在机器学习领域中有着一种更为聪明的方法——梯度下降法。
在梯度下降法中,首先需要找到一个起点w1的值。对于起点值得选取并不重要,在一些机器学习的训练程序中,起点值通常选择为0,或是任意一个值。这个起点值就是梯度下降法的起点。
梯度是偏导数相对于所有自变量的矢量,梯度下降法在起点选择好之后,会计算损失曲线在起点处的梯度。由于梯度的定义为:某一函数在该点处的方向导数沿着该方向取得最大值。即沿着梯度的方向,损失是增长的。因此我们需要取负梯度的方向。所以我们的下一步会沿着负梯度的方向,将梯度大小的一部分与起点相加取得下一个点。并重复该过程,直到取得最低点或模型趋于收敛。
通过负梯度确定下一步的方向

学习速率

学习速率又称Learn Rate,在有些机器学习程序中也称为Step Size即步长。
在梯度下降法中,我们确定下一步的位置首先依赖于负梯度的方向(确定方向),其次则是依赖步长来确定大小。
假设在梯度下降法中,起点的w1取0.5,起点的梯度大小通过计算为1,若学习速率为0.1,则梯度下降算法会取距离起点沿着负梯度方向相距1*0.1大小的点,即下一步的w1取0.6。
学习速率作为一个超参数,影响着训练的速度。如果学习速率过大,则会造成模型永远不会收敛;若学习速率过小,则会造成模型训练花费大量的时间。因此,在机器学习的过程中,工程师往往会花费大量的时间来选择合适的学习速率。
过大的学习速率造成来回震荡
通常在确定学习速率的时候,如果一个损失曲线的梯度一直都比较小,那么则可以相应加大学习速率;反之,减少学习速率。

随机梯度下降法(SGD)

在介绍随机梯度下降法之前,我们先说一下什么是批量(Batch)。
在机器学习领域中,批量(Batch)指的是在单次的迭代中用于计算梯度的样本的总数,批量可大可小。在前几个小节中,我们默认地认为批量是整个数据集。对于小规模的样本来说,这样做没什么不妥。但是当数据集规模十分巨大的时候,如上亿个样本(比如垃圾邮件的样本),面对如此超大批量的样本,进行一次迭代将会消耗大量的时间。
此外,对于大批量的样本,存在冗余样本的可能性越高。这些冗余样本是重复的样本。相比较,超大规模的批量比大规模批量出现冗余的可能性要高。
随机梯度下降法通过更少地计算来得到平均梯度。在随机梯度下降法中,批量的大小为1,即每次取1个样本来计算平均梯度,这个样本的选取是随机的。也就是随机梯度下降法中的随机指的是样本的选取。在这种方法下,当迭代的次数足够多的时候,平均梯度的值也就越准确。但是这样来计算平均梯度却显得极为杂乱。
通常,我们使用的是小批量随机梯度下降法。小批量随机梯度下降法是全批量和SGD的中间方案。小批量通常是10到100个随机选择的样本。相比随机梯度下降法,小批量随机梯度下降法可以减少杂乱样本的数量,同时也比全批量更为高效。

练习

1、在一个平均梯度较小的损失曲线情况下,学习速率应该怎样选取?
A.学习速率应越低越好
B.学习速率应相应变大
2、在进行超大型数据集的训练过程中,使用哪种方法效率更高?
A.小批量SGD或SGD
B.全批量SGD

觉得写的不错的朋友可以点一个 喜欢♥ ~
谢谢你的支持!

猜你喜欢

转载自blog.csdn.net/sqy941013/article/details/80528251