• 学习笔记:机器学习优化算法之牛顿法、拟牛顿法


     活动地址:CSDN21天学习挑战赛

    1 简介

            牛顿法也叫牛顿迭代法,它是一种求根算法,也可以求函数的极小值。它的基本思想是在现有极小点估计值附近对f(x)做二阶泰勒展开,找到下一个极小点,继续迭代的过程。

    2 牛顿法原理

    输入:目标函数f(x),函数梯度为f'(x),计算精度 \varepsilon

    输出:f(x)的零点 x^{*}

    (1)选出初始值x^{(0)},k=0;

    (2)计算f(x^{(k)})和梯度\large \nabla f(x);

    (3)带入迭代公式进行参数更新:             \large x^{(k+1)}=x^{(k)}-\frac{f(x^{k})}{\nabla f(x^{(k)})}

    推导该迭代公式

    设第k次迭代点为\small (x^{(k)},f(x^{(k)})),过该点做曲线的切线,斜率则为\small f'(x^{(k)}),进而可得到切线方程为:

    \large y-f(x^{(k)}))=f'(x^{(k)})(x-x^{(k)})

    接着求该曲线与x轴的交点坐标:

    \large 0=f(x^{(x)})+f'(x^{(k)})(x-x^{(k)})

    则交点的横坐标为新的迭代点的横坐标,整理得:

    \large x^{(k+1)}=x^{(k)}-\frac{f(x^{k})}{\nabla f(x^{(k)})}

    确定迭代次数或者精度;

    (4)如果\large ||f(x^{(k+1)}||<\epsilon,停止迭代,令x^{*}=x^{(k+1)},输出结果;否则继续迭代。

    实验部分:雷神之锤代码计算    \frac{1}{\sqrt{x}}

    1. #include
    2. using namespace std;
    3. //计算 1/((x)^(1/2))
    4. float Q_rsqrt( float number ) {
    5. long i;
    6. float x2, y;
    7. const float threeHalfs = 1.5f;
    8. x2 = number * 0.5f;
    9. y = number;
    10. i = * ( long * ) &y; // evil floating point bit level hacking
    11. i = 0x5f3759df - ( i >> 1 ); // What the fuck?
    12. y = * ( float * ) &i;
    13. y = y * ( threeHalfs - ( x2 * y * y ) ); // 1st iteration
    14. // y = y * ( threeHalfs - ( x2 * y * y ) ); // 2nd iteration, this can be removed
    15. return y;
    16. }
    17. int main() {
    18. float x1=4;
    19. float x2=2;
    20. float x3=25;
    21. printf("%f",Q_rsqrt(x3));
    22. return 0;
    23. }

    2.1 Hessen矩阵

            Hessen矩阵存储了二阶可导的多元函数的二阶导数,Hessen矩阵可用于多元函数的泰勒展开,一般用H表示 Hessen矩阵。

    上式可简写为:

    f(x)\approx f(x^{(k)})+g_k^T(x-x^{(k)})+\frac{1}{2}(x-x^{(k)})^TH(x^{(k)})(x-x^{(k)}) \qquad \qquad(1)

    其中\large g_k为求导后在第k个迭代点的梯度向量;

    \large H(x^{(k)})表示第k次迭代时的Hessen矩阵

    当f(x)去到最值时,f'(x)=0,令此时的x=k+1(其中x_{k},x^{(k)}意思相同)

    \large \frac{\partial f(x) }{\partial x}=g(x)\approx 0+g(x^{(k)})+\frac{1}{2}\times 2H(x^{(k)})(x-x^{(k)}) \\ =g_k(x^{(k)})+H_k(x-x^{(k)})\quad(2)

    整理后得到x的迭代公式:

    \LARGE x_{k+1}=x_{k}-g_k(x^{(k)})H^{-1}_k

    2.2 拟牛顿法条件

    对(2)式子操作:

    y_k=g_{k+1}-g_kx=x^{(k+1)},则:

    \large g_{k+1}-g_k=H_k(x^{(k+1)}-x^{k})

    \large y_k=H_k(x^{(k+1)}-x^{k})

    \delta_k=x^{(k+1)}-x^{(k)}代入上式得:

     \large y_k=H_k\delta _k

    即                                                                    \large \delta _k=H^{-1}_ky_k                                                            该式为拟牛顿法条件。

            从这里可以看出此时牛顿法需要 计算矩阵的逆,计算会很麻烦,甚至不存在逆矩阵,这样就需要拟牛顿法了。  

    3 拟牛顿法

            拟牛顿法的思想是找到矩阵的逆的替代者,主要有DFP和DFGS方法。

    参考

    (43条消息) 泰勒展开与黑塞矩阵(Hessian Matrix)_老实人小李的博客-CSDN博客_泰勒展开式的矩阵形式

  • 相关阅读:
    音频数据如果在中断中会随机给的那就放入队列或者缓冲区;队列缓冲区对音频的作用
    中国移动杭州公司——亚运会网络运行保障系统
    职场Excel:求和家族,不简单
    .Net Core 中使用工厂模式
    .NET 一款支持8种方式维持权限的工具
    Makefile入门(二)
    决策树和随机森林
    从0到1搞定前端性能测试(非常详细)
    数据结构-图-基础知识
    防御保护--入侵防御系统IPS
  • 原文地址:https://blog.csdn.net/qq_44635691/article/details/126148283