机器学习中参数更新规则背后的数学
在本文中,我们将讨论机器学习中参数更新规则背后的数学。
我们的目标是找到一种算法,该算法可在任何时间戳下告诉我们如何更改w的值,以使我们在新值下计算的损失小于在当前值下的损失。
无论从哪里开始,如果我们每一步都这样做,损失一定会减少,最终达到最小值。
泰勒级数告诉我们,如果我们有一个函数,并且知道某个点处的值(在以下情况下为x),则可以通过以下表达式给出在一个非常接近x的新点处的值
我们可以看到泰勒级数将新点(x +δx)上的函数值与当前点(x)上的函数值相关联
实际上,新点的值等于当前点的值加上一些附加项,所有这些项均取决于δx
现在,如果这个δx使得要添加到f(x)的值(在下图的括号中)实际上为负,那么我们可以确保新点的函数值小于在当前点的函数值。
因此,我们需要以这样的方式找到δx,使得上图中括号中的值为负。负数越大越好,因为损失将减少更多。
上图中蓝色是x的一阶导数。
上图中绿色是x的二阶导数。
上图中黄色是x的三阶导数。
如果我们有f(x)为x³,那么:
现在我们可以将机器学习中损失函数的泰勒级数写为:
想法是找到δw的值,使得下图中括号中的值为负,然后我们知道新的损失值将小于旧的损失值
因为损失也依赖于b,所以我们希望新的损失值也小于当前的损失值
如果我们改变w或b,预测的输出就会改变。
如果机器学习预测的输出发生变化,那么预测输出和真实输出之间的差值也会发生变化,如果发生变化,损失值也会发生变化。
向量的泰勒级数看起来像:
上图中括号中的值取决于参数值的变化。因此,我们需要找到变化向量(δθ或u),以使括号中的值变为负数,并且如果发生这种情况,我们将确保损失会减少。
现在我们可以去掉下面等式中括号中的一些项:
ETA是非常小的,在实践中,大约是0.0001或这个数量级,如果ETA较小,则ETA高次幂将是更小的,所以即使不知道下图中黄色部分的确切数值,我们可以确定整个项将非常小,与在等式中具有eta³和eta⁴的方程相似,这些项甚至会更小
因此,实际上,以后出现的所有项(在下图中的括号中)都将很小,我们可以忽略它们。
我们可以将方程写为近似值,如下所示:
上图中以黄色表示的值是损失相对于theta的一阶偏导数,计算偏导数的方法是,我们假设另一个变量充当常数,例如:如果损失取决于w和b,我们正在计算关于w的偏导数,那么我们可以将b视为常数。
如果我们的函数如下:
那么我们就可以计算关于'w'的偏导数为
当我们计算偏导数时,这将导致以下假设b为常数:
同样,关于b的偏导数为:
如果我们把上面两个关于w和b的偏导放到一个向量中,我们得到一个梯度:
我们将梯度表示为:
对于上述情况,我们可以写成:
这意味着它是函数f(θ)相对于θ的梯度,而θ实际上只是w和b的向量。
因此,回到我们的原始方程式,我们有:
左侧的值是新点的损失值,为实数,当前损失值也是实数,eta也是一个小实数,另外两个项是向量,我们采用它们的点积为我们提供了实数,所以等式两边都是实数。
我们可以将上面的等式重写为:
上图中的值是两个向量之间的点积。
我们希望以下值小于0,并且由于它是两个向量的点积,因此我们希望这两个向量之间的夹角大于90但小于等于180:
出现负号(-)的原因是我们必须沿着与梯度相反的方向前进。
计算偏导数:
我们拥有的一般方法是:
我们有5个数据点作为输入,我们选择Sigmoid函数
我们将损失值计算为:
我们可以将δw计算为:
把这个方程中的平方作为损失函数,我们用的是平方误差损失。
值总和的导数等于各个值的导数的和。
现在在导数的5项中,我们考虑一项然后计算它对w的偏导数
我们有:
为了方便起见,我们在上式中取1/2。
我们有f(x)作为' w'的函数,f(x)等于:
因此,使用链式法则,我们可以将关于“ w”的偏导数计算为:
现在上面方程中的y并不依赖于w,因此它相对于w的偏导数将为0,我们可以将上面的方程写为:
现在我们可以在上述方程式中插入f(x)的值,所以我们有:
我们可以将f(x)关于w的偏导数计算为:
我们的整体偏导数值如下:
这就是我们针对参数'w'计算损失函数的偏导数的方式。以相同的方式,我们可以计算出损失函数相对于参数'b'的偏导数。