本节是上一节的延续,主要介绍一下损失函数的概率解释,以及梯度下降和牛顿法两种可以用于极值求解的优化算法。
1. 损失函数的概率解释
对于线性回归模型,为什么最小化损失函数J是一种合理的选择?
假设目标变量和输入的关系如下:
其中,
代表偏差,可能是一些模型未覆盖的因素导致的偏差或者随机噪声,并且进一步假设它们服从高斯分布且独立同分布,
。
即:
表示给定
情况下
的条件分布。注意w是参数,并非随机变量,因此不能表示成
。
给定X(design matrix,包含所有的
)和参数w,采用极大似然法来求取Y的分布:
因此,最大化
即为最小化
,即最小二乘法的损失函数。需要注意的是,
的大小对最终参数w的选择没有影响。
2.梯度下降法(Gradient descent)
梯度下降法是一种求取函数的局部极小值的迭代算法, 每一步沿当前点的负梯度的方向按一定比例下降。
按照导数的定义:
由公式可见,
处的导数反映了函数在该点的瞬时变化速率,或者叫做在
处的斜率。推广到多维函数中,就有了梯度的概念,梯度是一个向量组合,反映了多维图形中变化速率最快的方向。
也就是说,多元可微函数
,在
处下降最快的方向即为
。当
在足够小时,对于
可以保证
。根据这个结论,为求得函数的局部最小值,我们从初始位置
开始,进行减去
的迭代操作得到
,
,
,……,可以得到
,因此
将有可能收敛至预期的局部最小值。其中,每次迭代时的步长
并不一定要固定不变。
如果F是凸函数,局部最小值即为其全局最小值。
回到本篇开头,我们试图最小化J(w),采用梯度下降法:
即:
上述方法称为批梯度下降(Batch Gradient Descent),在迭代过程中,每次更新ω时均要遍历整个数据集,如果样本数量m很大时收敛过程可能非常慢。
随机梯度下降算法(Stochastic Gradient Descent),每次只采用一个样本(或一部分样本)来更新ω,需要注意外层循环Loop,因为只遍历一次样本,不见得会收敛。
Loop {
for i=1 to m {
(for every j)
}
}
3.牛顿法
牛顿法就是求解函数零值位置的一种优化算法。
对于定义在实数域的函数
,其导数为
,选取初始点
,求出该点的导数(即切线的斜率),延长使其与x轴相交,以相交点的x值作为下次迭代的值,因此,迭代的更新规则为:
至于求解函数极值的过程中,我们经常转化为求解其导数为零的问题。比如极大似然法时,求解似然函数
的极大值:
令
,采用牛顿法,更新规则为: