代价函数

代价函数(cost function,loss function)作用是确定函数中的最优参数,使得拟合数据点的误差达到最小,即拟合效果最好。

 

深度学习 代价函数 代价函数有什么用_代价函数

 

当参数和

取不同数值时,假设函

 的取值也会相应的改变,以至于损失函数的数值也会发生相应的变化。而我们的目的时让假设函数的拟合效果达到最好,即损失函数䣌数值越小越好。因此我们可以以,

和 

为坐标轴来建立图像,如下图所示:

 

深度学习 代价函数 代价函数有什么用_最小值_02

 

显然,在该图像的底部,即是代价函数取得最小值的点。即假设函数

 的拟合效果达到最好。

但是我们该如何找到该点,其中梯度下降法便是找到该点的方法之一。

梯度下降

 

算法基本思想:

开始时随机选择一个参数的组合 

 ,计算代价函数,然后寻找下一个能让代价函数值下降最多的参数组合,持续这么迭代直到求出一个局部最小值(local minimum)。

但是因为没有尝试完所有的参数组合,所以不能确定得到的局部最小值是否便是全局最小值(global minimum),选择不同的初始参数组合,可能会找到不同的局部最小值。

 

 

在实际算法中,常用批量梯度下降算法(Batch Gradient Descent)来同时更新多个参数 

 :

深度学习 代价函数 代价函数有什么用_最小值_03

解释下这个更新公式:

  •  是待更新的参数 (  ,  )
  •  是学习率(learning rate),决定了代价函数在下降方向每次更新的步长
  •  是代价函数对(  ,  )的偏导数
  • 因为是求偏导,所以(  ,  )必须同步更新

可以用一句话总结这个公式:在批量梯度下降中,每一次同时让所有参数减去学习率 

 乘以代价函数的偏导数。

梯度下降的线性回归

我们用梯度下降算法来求平方误差代价函数的最小值,两个部分的公式如下:

深度学习 代价函数 代价函数有什么用_梯度下降_04

当你理解了梯度下降算法的公式后,便可以看出求解的关键点就在于求出代价函数关于参数 

 的偏导数:

深度学习 代价函数 代价函数有什么用_梯度下降_05

当我们在程序中求出了所有参数的偏导数后,接着就可以按照算法的逻辑来同步更新参数 

 ,再一步步迭代下去直到找到最优解。

要注意一点,因为这里代价函数求出的偏导,在计算时需要使用到所有的训练集,因为它含有求和公式,需要累加所有训练数据的误差,所以这里的梯度下降算法也称为批量梯度下降,其中批量的意思就是每次梯度下降时都会用到所有的训练样本。