在上一片文章什么是梯度下降(上)?AI技术快速扫盲我们主要能清了什么是梯度,简单来说,梯度就是多元函数的多个偏导数构成的一个向量,它反应了不同变量对函数变化率的影响。
一个函数梯度中的偏导数为正,代表随着这个变量值的增加,函数值也会增加;偏导数为负,代表随着这个变量值的增加,函数值会减少。
对于如这样简单的函数,我们可以直接画出函数的图像,通过图像就能找到让函数值最大或最下的和的取值。但是对于复杂的函数,例如可能有成百上千个变量,很难去画出它的图像。在这样的情况下,我们就需要找到一种方法来求出函数的最大或者最小值。这被称之为函数的优化问题。
AI技术中有一个函数叫做损失函数,它代表的是模型的预测值与实际值的偏差,显然如果偏差越小,那么模型在训练数据中的预测能力越强。所以我们需要对损失函数做函数优化,找到它的最小值。
在AI模型中,会有以十亿为记的参数,这些参数就是前面提到的变量。模型的损失函数非常复杂,无法通过画出图像的方式来找到让损失函数值最小的参数。那么应该如何来对损失函数进行优化呢?
答案自然是前面提到过的梯度下降。
前面已经说过,梯度中的偏导数反映了各变量对函数变化的影响。那么只要我们让各参数按照让函数值变小的方向来变化,我们就能得到更小的损失函数的值。
具体来说,我们可以先随机给所有的变量赋一个初始值。然后计算每一个变量的偏导数,根据偏导数的结果来更新初始值。
例如如果函数其中一个变量为,对它求偏导的结果为正,代表继续增加值会让函数值变大。于是我们就让初始值减去一个量,然后得到一个新的变量值。将新值代入到损失函数上,会得到一个更小的函数值,就达到了我们的目的。如果的偏导数为负,代表增加的值会导致函数值减小,那么我们就可以让初始值加上一个量,然后得到一个新的变量值。
如果将上面的想法用公式表达出来就是:
以上公式中代表前面提到的初始值,就是偏导数。减号就是在更新初始值。当偏导数为正的时候,初始值会减去一个正数,变得更小了。当偏导数为负的时候,初始值减去一个负数就是在加上一个正数,变得更大了。
那么其中的又是什么呢?它只是一个认为设定的参数,被称为学习率。它可以调节更新的幅度。
对初始值进行一次更新后,我们再将新的值代入到上面的公式中,进行一次新的更新。如此反复,就可以不断获得一个更小的函数值。当某一步更新后,函数值反而变得更大了,那说明上一步可能就是想找的参数值。
在实际中,问题会更复杂。因为函数优化还存在局部最优点和全局最优点。想象一个有很多波谷的正弦函数,这些波谷的最低点有高有低。
如果我们在更新参数的时候来到了其中一个谷底,我们会发现继续更新参数会让函数值变大,所以认为上一次在谷底的参数就是最优了。但是完全有可能存在另一个更低的波谷。前者就是局部最优,后者是全局最优。
显然,我们是想要找到全局最优的。可以通过模拟退火等算法来提高找到全局最优解的概率。
总结一下,梯度下降是一种更新参数以此降低损失函数值的方法。重点在于,梯度中的偏导数反映了参数对损失函数值变化影响,只要按照让损失函数值变小的方向来更新参数就可以得到更好的参数。
欢迎点赞关注分享,我们明天见!