机器学习之参数估计

参数估计(Parameter Estimate)就是通过一系列算法,来求出模型的最优参数。在各个机器学习深度学习的框架里,都变成了optimizer的活了。

其实这个名字很奇怪,但是在比较早的机器学习论文里都是这么叫的,我们重点来关注下里面涉及的一些算法。

这里主要关注的是

  • 最小二乘法
  • 梯度下降
  • 牛顿法
  • 拟牛顿法(未完成)

最小二乘法 Least Squares Method

二乘是平方的意思,感觉最小二乘法就相当于均方误差(MSE)了,最小二乘法的思想是找到一组参数\(\theta=(\theta_0, \theta_1, ..., \theta_n)\)使得\(\sum_{i=1}^n(h_\theta(x_i)-y_i)^2\)最小

具体求解时,通过代数法求解,假设模型为\(h_\theta(x) = X\theta\),那么定义损失函数为\(J(\theta) = \frac{1}{2}(X\theta-Y)^T(X\theta-Y)\),这里二分之一是为了计算方便。那么求解步骤如下:

\[\frac{\partial J(\theta)}{\partial \theta} = X^T(X\theta-Y) = 0\\ \theta = (X^TX)^{-1}X^TY \]

总结:

  1. 最小二乘法需要计算\((X^TX)^{-1}\),这个逆不一定存在;
  2. 当特征很多时,求逆的过程非常复杂;
  3. 当模型函数不是线性函数时,无法使用最小二乘法。

梯度下降 Gradient Descent

梯度下降是一种迭代求解的方法,主要思路是:

\[\theta = \theta - \alpha \frac{\partial J(\theta)}{\partial \theta} \]

其中,\(\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)\)的二阶泰勒展开式得:

\[f(x) = f(x_n) + f'(x_n)(x-x_n) + \frac{f''(x_n)}{2}(x-x_n)^2 \tag{1} \]

此时,当前的零点满足

\[f'(x_n) = 0 \tag{2} \]

对(1)进行求导并结合(2)得

\[\begin{aligned} f'(x) & = 0 = f'(x_n) + f''(x_n)(x-x_n)\\ x & = x_n - \frac{f'(n)}{f''(n)} \end{aligned} \]

于是得到新的零点\(x\),这里的\(x\)就是下一个零点\(x_{n+1}\)

现在把参数\(x\)扩展成向量,定义损失函数\(f(x)\)

\[\sum_{x \in \Bbb{R}^n}f(x) \]

假设\(f(x)\)具有二阶连续偏导数,若第\(k\)次迭代值为\(x^{(k)}\),则可将\(f(x)\)\(x^{(k)}\)的附近进行二阶泰勒展开:

\[f(x) = f(x^{(k)}) + g^T_k(x-x^{(k)}) + \frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)}) \]

其中\(g_k = g(x^{(k)})=\nabla f(x^{(k)})\)是f(x)的梯度向量在点\(x^{(k)}\)的值,\(H(x^{(k)})\)\(f(x)\)的海塞矩阵(Hessian Matrix)在点\(x^{(k)}\)的值,其中海塞矩阵的定义如下:

\[H(x) = [\frac{\partial^2f}{\partial x_i \partial x_j}]_{n \times n} \]

这里令\(\nabla f(x)=0\),得到

\[\begin{aligned} g_k & + H_k(x-x^{(k)})= 0\\ x & = x^{(k)} - H_k^{-1}g_k \end{aligned} \]

这里将\(H(x^{(k)})\)简记为\(H_k\),于是得到了牛顿法。

总结:

  • 优势:速度快
  • 缺点:海塞矩阵的逆矩阵计算太耗时了

改进方法:拟牛顿法

posted @ 2020-08-01 00:29  YoungF  阅读(813)  评论(0编辑  收藏  举报