机器学习模式是以迭代的方式来降低损失,这种方法有点像"Hot and Cold"这种儿童游戏,在游戏中,隐藏的物品就是最佳模型,刚开始我们会胡乱猜测,比如w=0,然后系统告诉我们损失是多少,然后我们再重新猜测一个值,看看损失是多少,通常我们会越来越接近目标。问题是我们如何尽可能高效的找到最佳的模型。
迭代在机器学习中的应用非常普遍,这主要是因为他们可以很好的扩展到大型数据集。
模型将特征(一个或多个)作为输入,返回一个预测值作为输出。我们在这里考虑一个特征与一个输出结果的模型:
y = wx + b
我们应该为w和b设置哪些初始值呢?事实证明初始值并不重要(在该模型中),我们可以随机选择值,在这里我们选择一些无关紧要的值。
w=0, b=0
假设第一个特征值为10,我们这里预测到的结果为 0*(10) + 0 = 0。
计算损失会要求两个输入值(预测值和真实值),机器学习系统会检测这些值,并生成新的w和b.新的w,b又会生成新的预测值,从而生成新的loss值,如此迭代下去。
通常我们经过不断迭代,直到该算法发现了损失很低的模型或者总体损失不再变化或者变化缓慢为止。这时我们称模型已经收敛。
梯度下降法:
如果我们有时间和资源去计算w所有可能值的损失,对于我们一直研究的问题,损失-weights的图形始终是凸形的。
凸形的好处是只有一个最低点:即只有一个斜率为0的位置(不存在局部最优解问题),这个最小值就是损失函数收敛的位置。
当然我们可以计算数据集中每个w可能的损失函数来找到收敛方法,但是这种方法的效率太低,我们有一种更好的机制,这个机制在学习领域中非常热门,称为 梯度下降法。
梯度下降法首先为 w选择一个初始值,起点并不重要,很多算法直接把w设置成0或选择一个值。
然后,梯度下降法算法会计算损失曲线在起点处的梯度。简而言之,梯度是偏导数的矢量;它可以让您了解哪个方向距离目标“更近”或“更远”。请注意,损失相对于单个权重的梯度就等于导数。
梯度在整个机器学习中使用的非常的普遍,因此理解梯度有助于理解整个模型。
梯度始终指向损失函数增长最迅猛的方向(梯度的增长与损失函数的增长是同向的),因此,我们只要沿着负梯度的方向走(梯度下降的方向走),就可以尽快的降低损失。
为了确定损失曲线上的下一个点,梯度下降法会将梯度大小的一部分与起点相加。一个梯度步长将我们移动到损失曲线上的下一个点。然后,梯度下降法会重复此过程,逐渐接近最低点。
学习速率:
梯度是一个矢量(具有方向和大小),梯度下降算法用梯度乘以一个学习速率(有时也被称为步长)的标量,来确定下一个点的位置。
如果梯度大小为2.5,学习速率为0.01,则梯度下降算法会选择距离前一个点0.025的位置作为下一个点。
(通常学习速率设置不能超过1,如果你在输出的时候发现nan值的问题,很有可能是学习速率过高而导致的.)
同样如果学习速率选择过小,我们将会需要很长的时间来使得模型收敛。
“每个回归问题都存在一个金发姑娘学习速率。“金发姑娘”值与损失函数的平坦程度相关。如果您知道损失函数的梯度较小,则可以放心地试着采用更大的学习速率,以补偿较小的梯度并获得更大的步长。”
原文中的金发姑娘指最佳的学习速率。
随机梯度下降法:
在梯度下降法中,批量是指单次迭代中计算梯度的样本总数,目前为止,我们假定的批量都是整个数据集,然而数据集过于庞大而且具有海量特征的时候,单次迭代就需要花费海量的时间。
包含随机抽样样本的数据集可能存在冗余的数据。实际上,批量大小越大,冗余数据出现的可能性越高。一些冗余可能有助于消除杂乱的梯度,但超大批量所具备的预测价值往往并不比大型批量高。
如果我们通过更少的数据量得到正确的梯度,通过我们随机选择样本,我们可以通过小的多的数据集来估算出较大(数据集)的平均值。
随机梯度下降法(SGD)将这种思路发挥到了极致,它每次只迭代一个样本,如果进行足够的迭代,SGD也可以发挥作用(虽然过程显得非常杂乱)。
小批量SGD:
介于梯度下降法和随机梯度下降法之前,单次迭代样本通常为10-1000个随机选择的样本。小批量SGD可以减少SGD的杂乱,但仍然比全批量更高效。
梯度下降法也适用与包含多个特征的特征集。
此章为书中的介绍内容,关于优化算法不止以上几种,比如常见的Adam算法。梯度下降法有其局限性,尤其是在RNN网络中。关于学习速率,我们甚至可以设置动态的学习速率。在这里暂不作介绍。
谷歌写的教程中看似均是一些概念性问题,但是在实际使用中,这些概念往往可以让我们更加深刻的了解我们所构造的模型。
转载自原文链接, 如需删除请联系管理员。
原文链接:【学习笔记】降低损失,转载请注明来源!