梯度下降与牛顿法求最小值的区别—Apple的学习笔记

作者: applecai | 来源:发表于2018-12-02 12:30 被阅读5次

最近看到描述说牛顿法求最小值,一下子反应不过来了,牛顿不是求根的吗?怎么变成求最小值了,然后再想了下牛顿迭代一直向下,真的会跑到最小值的,即导数为0的地方,那么牛顿法又是怎么求根的呢?根一般可能有多个,而且不是最小值呀!突然间混乱了。

我需要重新推导,作图,来加强理解,其实主要原因是初始化模型搞混乱了。求根的话,即导数函数与f(x)=0这条直线上的交点x还是计算新的导数函数。所以x都是在f(x)=0上的,终止条件是xn+1-xn=0.0001(某个精度的值,自定义)。而且公式中没有学习率alpha.他是x的逐次逼近。

我用python求的y=(x-2)^2-1的一个根,其标注的放大图为如下,打印结果为3

他的数学模型为(f(xi)-0)/( xi+1- xi)= f′(xi)这是斜率公式,于是推导得出如下逼近公式。

xi+1 = xi -f(xi)/f′(xi)

Python3.6的源码如下

from sympy import *

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.axisartist.axislines import SubplotZero

listx=[]

listy=[]

def fn(x):

    return(x**2-4*x+3)

def NewTon(f, s = 1, maxiter = 100,prt_step = False):

for i in range(maxiter):

        s = s - f.evalf(subs={x:s})/f.diff().evalf(subs={x:s})

        listx.append(s)

        listy.append(fn(s))

print(s,fn(s))

if prt_step== True:

print("After {0} iteration, the solution is

updated to {1}".format(i+1,s))

return s

fig = plt.figure(1)

ax = SubplotZero(fig,1, 1, 1)

fig.add_subplot(ax)

ax.axis["xzero"].set_visible(True)

xn = np.linspace(-2,5,50)

#生成sigmiod形式的y数据x = Symbol("x")

f = x**2-4*x+3

print(NewTon(f, s = 4, maxiter = 4, prt_step = True))

# #绘制图形plt.plot(xn,fn(xn), c='b')

plt.plot(listx,listy,c='r')

plt.scatter(listx,listy,color='black')

plt.title(r'Newton calc')

plt.show()

那么再看看梯度下降求y=(x-2)^2-1的最小值。用的是f’(x)=0的数学模型,源码如下:打印结果为2

from sympy import *

import numpy as np

import matplotlib.pyplot as plt

from mpl_toolkits.axisartist.axislines import SubplotZero

listx=[]

listy=[]

def f(x):

return((x - 2) * (x - 2)-1) #the same as x^2-4x+3

    #return(x**2-4*x+3)

def SGD(Xn,alpha):

    t =1

i = Symbol("i")

    dy = diff((i-2)*(i-2)-1, i)  #the same as f(x)

    print(dy)

    listx.append(Xn)

    listy.append(f(Xn))

    Xnext = Xn - alpha*dy.evalf(subs={i:Xn})

    listx.append(Xnext)

    listy.append(f(Xnext))

print(Xnext)

while(abs(Xnext - Xn) > 0.001):

        Xn = Xnext

        Xnext = Xn - alpha*dy.evalf(subs={i:Xn})

        listx.append(Xnext)

        listy.append(f(Xnext))

print(t,Xn,Xnext)

        t=t+1

if(t>50):

break

#algorithm calc

SGD(4,0.3)

#draw picture

fig = plt.figure(1)

ax = SubplotZero(fig,1, 1, 1)

fig.add_subplot(ax)

x = np.linspace(-2,5,50)

#tag

ax.axis["xzero"].set_visible(True)

plt.xlim(-2,5)

plt.ylim(-2,8)

plt.title("SGD")

#picture

plt.plot(x,f(x),c='b')

plt.plot(listx,listy,c='r')

plt.scatter(listx,listy,color='black')

plt.show()

牛顿法也可以求最小值,是通过泰勒公式展开的。

相关文章

  • 梯度下降与牛顿法求最小值的区别—Apple的学习笔记

    最近看到描述说牛顿法求最小值,一下子反应不过来了,牛顿不是求根的吗?怎么变成求最小值了,然后再想了下牛顿迭代一直向...

  • 2018-08-23

    1.gbdt,xgboost,lgbm的区别(阿里,头条) 2.梯度下降法,牛顿法,拟牛顿法区别(阿里) 3.SG...

  • 局部搜索之牛顿法

    除了前面说的梯度下降法,牛顿法也是机器学习中用的比较多的一种优化算法。 牛顿法求方程解 牛顿法又称为牛顿-拉弗森方...

  • 梯度优化算法

    梯度下降,共轭梯度法;牛顿法,拟牛顿法;信赖域方法,罚函数法。

  • 【转】常见的几种最优化方法

    转自Poll 的笔记 阅读目录 梯度下降法(Gradient Descent) 牛顿法和拟牛顿法(Newton's...

  • 神经网络04

    梯度下降法 抽取一个公共函数模块: common_functions.py 使用梯度法求函数最小值 神经网络的梯度...

  • 个人关于机器学习的周记之九

    这周我们将介绍梯度下降: 梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数的最小值。 梯...

  • 最优化方法

    常见最优化方法 1.梯度下降法 2.牛顿法 3.拟牛顿法 4.共轭梯度法

  • 牛顿法和梯度下降法的学习

    牛顿法和梯度下降法的差别 牛顿法:二次逼近梯度下降法:一阶逼近 牛顿法:对局部凸的函数找到极小值,对局部凹的函数找...

  • 机器学习——梯度下降、梯度下降的线性回归算法

    一、梯度下降****梯度下降是一个用来求函数最小值的算法,我们将使用梯度下降算法来求出代价函数J(θo,θ1)的最...

网友评论

    本文标题:梯度下降与牛顿法求最小值的区别—Apple的学习笔记

    本文链接:https://www.haomeiwen.com/subject/fxdjcqtx.html