zoukankan      html  css  js  c++  java
  • 关于牛顿法优化

    先借这个机会把两种牛顿法区分了(看到的讨论总和数值分析时记得的牛顿不一样-_-||):
    按照Wiki上的首句,切线法是用于求根的,海森矩阵是进行优化的(就此厘清一阶和二阶的困扰...)。

    有这几个问题,都是在不同地方见到的意见

    1. 牛顿法更快
    2. 牛顿法是曲面逼近,梯度法是平面

    更快

    看到有讨论说牛顿法比梯度法更快的结论(https://www.zhihu.com/question/19723347,其他地方也看到过)。想先讨论下这个。
    比如现在有个函数(f(x)=x^3),牛顿法给出的优化是(frac{3x^2}{6x}=x/2),梯度法:(3x^2),如果两者的学习率相同的话,应该是梯度法更快。这个容易理解,牛顿法是寻找极点的((Delta x)的取值要使二阶展开式的微分为0,详见Wiki上的第二式),所以牛顿法给出的是指向(x=0)的方向(对比梯度法是朝(x=-infty))。
    但如果考虑另一种情况,就会得到不同的结论。实际情况中,待优化的参数很多,并且优化面的情况也复杂。梯度法容易造成震荡。比如,上面说的函数,如果在0处是极值点,学习率为1,(x>1/3)时,梯度法出现震荡。但牛顿法步长为(x/2),可以避免。所以就整个过程来看,说快,似乎也有合理的地方。

    曲面与平面

    另外想讨论下,那张经典的维基图。原文中,每次看到,总忍不住问下,能判断出哪个是哪个么。。。
    图的注释也比较启发性。说得很在理,确切地讲,牛顿法的优势在于把函数更多的信息利用起来了(二阶),类似于逼近最优方位更细致(呃~说的是全局最优),所以能看到有用曲面平面进行对比的。
    最后回答下那个判断题(按我的理解,也只能做判断题),唯一的线索就是区分出梯度法,因为它一定是选的下降得最快的方向,然后剩下的只有牛顿法。

  • 相关阅读:
    Android Studio学习笔记(1)
    2019全国大学生电子设计大赛总结
    包与常用模块
    模块
    迭代器、生成器与递归调用
    叠加多个装饰器与有参数的装饰器。
    装饰器
    控制指针的移动、函数
    字符编码
    python 数据类型之列表、元组、字典、集合
  • 原文地址:https://www.cnblogs.com/chenyliang/p/8670843.html
Copyright © 2011-2022 走看看