zoukankan      html  css  js  c++  java
  • 机器学习之参数估计

    参数估计(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)),这里二分之一是为了计算方便。那么求解步骤如下:

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

    总结:

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

    梯度下降 Gradient Descent

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

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

    其中,(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 ag{1} ]

    此时,当前的零点满足

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

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

    [egin{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)})= abla 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 imes n} ]

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

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

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

    总结:

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

    改进方法:拟牛顿法

  • 相关阅读:
    Javascript
    读jQuery源码
    常用正则-(各种数字,不能包括特殊字符等,后续再补充)
    SpringBoot入门教程(二) Spring Boot配置第二章
    Mybatis面试题
    HTTP和socket的连接请求的区别
    Maven有哪些优点和缺点
    @Autowired 与@Resource的区别(详细)
    spring的优点与缺点
    SpringMVC常见面试题总结
  • 原文地址:https://www.cnblogs.com/YoungF/p/13413007.html
Copyright © 2011-2022 走看看