参数估计(Parameter Estimate)就是通过一系列算法,来求出模型的最优参数。在各个机器学习深度学习的框架里,都变成了optimizer的活了。
其实这个名字很奇怪,但是在比较早的机器学习论文里都是这么叫的,我们重点来关注下里面涉及的一些算法。
这里主要关注的是
- 最小二乘法
- 梯度下降
- 牛顿法
- 拟牛顿法(未完成)
最小二乘法 Least Squares Method
二乘是平方的意思,感觉最小二乘法就相当于均方误差(MSE)了,最小二乘法的思想是找到一组参数( heta=( heta_0, heta_1, ..., heta_n))使得(sum_{i=1}^n(h_ heta(x_i)-y_i)^2)最小
具体求解时,通过代数法求解,假设模型为(h_ heta(x) = X heta),那么定义损失函数为(J( heta) = frac{1}{2}(X heta-Y)^T(X heta-Y)),这里二分之一是为了计算方便。那么求解步骤如下:
总结:
- 最小二乘法需要计算((X^TX)^{-1}),这个逆不一定存在;
- 当特征很多时,求逆的过程非常复杂;
- 当模型函数不是线性函数时,无法使用最小二乘法。
梯度下降 Gradient Descent
梯度下降是一种迭代求解的方法,主要思路是:
其中,(alpha)代表学习速率,也是迭代过程中的步长。
根据数据的不同,主要分为以下三种:
- 批量梯度下降,Batch Gradient Descent,直接在所有数据进行迭代计算
- 随机梯度下降,Stochastic Gradient Descent,每次选择在一条数据上进行迭代
- 小批量梯度下降,Mini-batch Gradient Descent,每次选择在一个小batch上进行迭代计算
总结:
- 优势:和最小二乘法相比,在没有解析解的时候也能进行迭代求解;
- 缺点:速度慢,没有最小二乘法快
牛顿法 Newton Method
牛顿法同样是使用近似求解,但是它的速度是比梯度下降法更快的。首先来看下牛顿法在求零点的时候的应用,对于函数(f(x))求近似零点,假设当前的近似零点是(x_n),要进一步求解下一个零点(x_{n+1}),该怎么做呢?
首先,将在(x_n)处展开(f(x))的二阶泰勒展开式得:
此时,当前的零点满足
对(1)进行求导并结合(2)得
于是得到新的零点(x),这里的(x)就是下一个零点(x_{n+1})
现在把参数(x)扩展成向量,定义损失函数(f(x))为
假设(f(x))具有二阶连续偏导数,若第(k)次迭代值为(x^{(k)}),则可将(f(x))在(x^{(k)})的附近进行二阶泰勒展开:
其中(g_k = g(x^{(k)})= abla f(x^{(k)}))是f(x)的梯度向量在点(x^{(k)})的值,(H(x^{(k)}))是(f(x))的海塞矩阵(Hessian Matrix)在点(x^{(k)})的值,其中海塞矩阵的定义如下:
这里令( abla f(x)=0),得到
这里将(H(x^{(k)}))简记为(H_k),于是得到了牛顿法。
总结:
- 优势:速度快
- 缺点:海塞矩阵的逆矩阵计算太耗时了
改进方法:拟牛顿法