牛顿法

看最优化的文章时总能看到牛顿法和梯度下降法等基础算法,这里对牛顿法做个总结。

牛顿法一般的用途有:1、求方程的根;2、求极值

求方程的根

并不是所有的方程都有求根公式,或者求根公式很复杂,导致求解困难。利用牛顿法,可以迭代求解。

原理是利用泰勒公式,在x0处展开,且展开到一阶,即f(x) = f(x0)+(x-x0)f‘(x0)

求解方程f(x)=0,即f(x0)+(x-x0)*f‘(x0)=0,求解x = x1=x0-f(x0)/f‘(x0),因为这是利用泰勒公式的一阶展开,f(x) = f(x0)+(x-x0)f‘(x0)处并不是完全相等,而是近似相等,这里求得的x1并不能让f(x)=0,只能说f(x1)的值比f(x0)更接近f(x)=0,于是乎,迭代求解的想法就很自然了,可以进而推出x(n+1)=x(n)-f(x(n))/f‘(x(n)),通过迭代,这个式子必然在f(x*)=0的时候收敛。整个过程如下图:

求极值

根据函数极值的必要条件可知,要求一个函数f(x)的极值,可以令f‘(x)=0求方程得到极小值点,于是可以采用类似于上面的牛顿法求方程,迭代式子为:

下面编写程序对上面的各举一个例子说明:

#!/usr/bin/python
# -*- coding:utf8 -*-
import random

#f(x) = x^2 - 4*x + 3

lastval = random.uniform(-10,10)
def solution(func1, func2) :
    global lastval
    val = 0
    for index in xrange(0, 100) :
        val = lastval - func1(lastval) * 1.0 / func2(lastval)
        if abs(val - lastval) < 0.000001 : break
        lastval = val
    print "times of iterate : %s" % index
    return val

if __name__ == "__main__" :
    print "solution of equation x^2 - 4*x + 3 =0 : %s" % solution(lambda x: x**2 - 4*x + 3, lambda x: 2*x - 4)
    print "minimum of f(x) = x^2 - 4*x + 3 : %s" % solution(lambda x: 2*x - 4, lambda x: 2)

执行结果:

可以看到牛顿法解方程需要迭代的次数一直在变,这是跟初始值有关;求极值例子比较简单,只一次迭代就完成了,其实相同条件下牛顿法求极值比梯度下降法要更快!牛顿法的一大优点就是它比梯度下降法更具有全局判断能力,在二阶导数的作用下,从函数的凹凸性出发,直接搜索怎样到达极值点;而梯度法是从初始点的领域开始判断,在局部进行最速下降方向,然后步步逼近极值;所以往往会导致梯度下降法比牛顿法迭代的次数更多。

文章参考于http://blog.csdn.net/luoleicn/article/details/6527049

http://www.zhihu.com/question/19723347

时间: 2024-08-02 02:47:31

牛顿法的相关文章

Logistic回归的牛顿法及DFP、BFGS拟牛顿法求解

牛顿法 1 # coding:utf-8 2 import matplotlib.pyplot as plt 3 import numpy as np 4 5 def dataN(length):#生成数据 6 x = np.ones(shape = (length,3)) 7 y = np.zeros(length) 8 for i in np.arange(0,length/100,0.02): 9 x[100*i][0]=1 10 x[100*i][1]=i 11 x[100*i][2]=

牛顿法|阻尼牛顿法|拟牛顿法|DFP算法|BFGS算法|L-BFGS算法

一直记不住这些算法的推导,所以打算详细点写到博客中以后不记得就翻阅自己的笔记. 泰勒展开式 最初的泰勒展开式,若  在包含  的某开区间(a,b)内具有直到n+1阶的导数,则当x∈(a,b)时,有: 令可得到如下式子: 泰勒展开我的理解就有两个式子. 参考文献:http://baike.baidu.com/link?url=E-D1MzRCjDi8qrlh2Cn64fwtz703bg-h_z2_mOXorti2_3aBKrOUY4-2gHuESowiK8aQSBFE8y0yJeGl4_yOAq

Machine Learning 学习笔记 (2) —— 另一种寻找极值的方法:牛顿法

[总目录]http://www.cnblogs.com/tbcaaa8/p/4415055.html 1. 用牛顿法解方程 牛顿法是一种求解方程的迭代算法,也可以用于方程组的求解.其思想是利用方程(尤其是非线性方程)的线性部分,对原方程进行近似.不失一般性,考虑方程f(x)=0.对f(x)在x=t处进行泰勒展开,可得f(x)=f(t)+f'(t)(x-t)+... 取线性部分代替f(x),带入方程f(x)=0,可得f(t)+f'(t)(x-t)=0 ,进而解出x=t-f(t)/f'(t).将方程

常见的几种最优化方法(梯度下降法、牛顿法、拟牛顿法、共轭梯度法等)

我们每个人都会在我们的生活或者工作中遇到各种各样的最优化问题,比如每个企业和个人都要考虑的一个问题"在一定成本下,如何使利润最大化"等.最优化方法是一种数学方法,它是研究在给定约束之下如何寻求某些因素(的量),以使某一(或某些)指标达到最优的一些学科的总称.随着学习的深入,博主越来越发现最优化方法的重要性,学习和工作中遇到的大多问题都可以建模成一种最优化模型进行求解,比如我们现在学习的机器学习算法,大部分的机器学习算法的本质都是建立优化模型,通过最优化方法对目标函数(或损失函数)进行优

机器学习中梯度下降法和牛顿法的比较

在机器学习的优化问题中,梯度下降法和牛顿法是常用的两种凸函数求极值的方法,他们都是为了求得目标函数的近似解.在逻辑斯蒂回归模型的参数求解中,一般用改良的梯度下降法,也可以用牛顿法.由于两种方法有些相似,我特地拿来简单地对比一下.下面的内容需要读者之前熟悉两种算法. 梯度下降法 梯度下降法用来求解目标函数的极值.这个极值是给定模型给定数据之后在参数空间中搜索找到的.迭代过程为: 可以看出,梯度下降法更新参数的方式为目标函数在当前参数取值下的梯度值,前面再加上一个步长控制参数alpha.梯度下降法通

c#用牛顿法计算根号下2的值

1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace 牛顿法计算根号下2的值 8 { 9 class Program 10 { 11 static void Main(string[] args) 12 { 13 double a = 0, b = 2, t = 0; 14

Stanford大学机器学习公开课(四):牛顿法、指数分布族、广义线性模型

(一)牛顿法解最大似然估计 牛顿方法(Newton's Method)与梯度下降(Gradient Descent)方法的功能一样,都是对解空间进行搜索的方法.其基本思想如下: 对于一个函数f(x),如果我们要求函数值为0时的x,如图所示: 我们先随机选一个点,然后求出该点的切线,即导数,延长它使之与x轴相交,以相交时的x的值作为下一次迭代的值. 更新规则为: 那么如何将牛顿方法应用到机器学习问题求解中呢? 对于机器学习问题,我们优化的目标函数为极大似然估计L,当极大似然估计函数取得最大时,其导

梯度下降法与牛顿法的解释与对比

1 梯度下降法 我们使用梯度下降法是为了求目标函数最小值f(X)对应的X,那么我们怎么求最小值点x呢?注意我们的X不一定是一维的,可以是多维的,是一个向量.我们先把f(x)进行泰勒展开: 这里的α是学习速率,是个标量,代表X变化的幅度:d表示的是单位步长,是一个矢量,有方向,单位长度为1,代表X变化的方向.什么意思呢?就是说我们这里求最值,不是一下子就找到最小值对应的X,而是一点点的迭代,逼近最小值对应的X,每一次迭代新的X即X’就是X+αd(下图蓝色点都可以是X’),(注意这里的αd是矢量,这

deep learning 练习 牛顿法完成逻辑回归

Logistic Regression and Newton's Method 作业链接:http://openclassroom.stanford.edu/MainFolder/DocumentPage.php?course=DeepLearning&doc=exercises/ex4/ex4.html 数据是40个考上大学的小朋友和40个没有考上大学的小朋友在两次测验中的成绩,和他们是否通过的标签. 根据数据建立这两次测验与是否进入大学的二分类模型. 在二分类任务中,我们需要找到一个函数,来

牛顿法、拟牛顿法、共轭梯度法

牛顿法 一: 最速下降法 下降法的迭代格式为xk+1=xk–αkdk , 其中dk为下降方向, 设gk=∇f(xk)≠0, 则下降方向要满足dTkgk<0. 当步长确定时, dTkgk的值越小, 即−dTkgk的值越大, 函数下降得越快. 由Cauchy-Schwartz不等式∣∣dTkgk∣∣≤∥dk∥∥gk∥, 当且仅当dk=−gk时, dTkgk的值最小. 从而−gk是最速下降方向. 则最速下降法的迭代格式为xk+1=xk−αkgk . 这里要注意的是, 最速下降方向只是算法的局部性质.