ニュートン法と勾配降下アルゴリズム論

ニュートン法に動作します。

(1)定義:

ニュートンの法則は、一般的にニュートン反復法を指します。ニュートン反復法(ニュートン法)を、また、ニュートンとして知られている - ラプソン(ラプソン)法(ニュートン・ラプソン法)、方程式を解くために実数と複素数場近似の分野で17世紀にニュートンの方法を提案しています。

(2)背景:

そこには多数の方程式の根の公式はありませんので、式のようにおおよその根を見つけるために、非常に困難、不可能ではない正確なルートを模索することは特に重要です。関数の使用方法F(X)の方程式を見つけるために、いくつかのテイラー級数の前にF(x)が0 =ルーツ。ニュートン反復法は、ルート方程式のための重要な方法であり、最大の利点は、(X)= 0 ** F式の近くの単一の二次収束であり、そしてプロセスは、複雑な、方程式の根を見つけるために使用することができます根、この時点では、線形収束が、いくつかの手段によって超線形収束になることがあります。加えて、この方法は、広くコンピュータプログラミングに使用されます。

(3)公式:

1. Aのメンバーシップ関数場所:

導出の原理をより良く理解皆を可能にするためには、最初の1つの変数関数の場合を考えます。1つの変数展開式のテイラー機能によると、我々は点x0テイラー展開での目的関数を行い、あります:IMG
あなたが2回以上の項目を無視した場合、:
IMG
今、私たちはそれに基づいてされるように、点x0であり、派生0を見つけるために、点は、即ち、導関数はゼロです。上式の両辺の誘導体などの誘導体が0であるが、以下の式が得られる:
IMG
与えるために解くことができる:
IMG
これは私たちX1を来て次のポイントの位置を与えます。:誘導体は、それによって、反復式をニュートン法を得るために、点0になるまで次のこの処理が繰り返されるIMG
初期反復ポイントX0、上記式の反復繰り返し、所定の誘導体は点0または反復の最大数になるまで。

2.多機能ケース:

ここで読者の勾配、ヘッセ概念が不明確である場合は、公共のポストの最適化された数やSIGAIを読む前に、微積分の教科書を参照してください、多機能の場合に拡張されます。テイラー多機能拡張式によれば、我々は、点x0テーラー展開での目的関数を実行します。
IMG
二次無視して、アイテムの上、及び式の両側の勾配を求めると同時に、導関数(勾配ベクトル)を取得している:
IMG
ここでそれは私たちの書かれたHの裏に、ヘッセ行列であり、次関数は、その後、0勾配:
IMG
これは、線形方程式の系の解です。勾配ベクトルをgと略記する場合、以下のように、上記の式を省略することができる:
IMG
初期点x0から、関数を繰り返し、でヘッセ行列と勾配ベクトルを算出する下記式の反復が続く:
IMG
最終的によどみ点の関数に到達します。これはニュートンの方向と呼ばれています。繰り返し終了条件が近い0勾配モードにあるか、または関数の値が指定された閾値を下回ります。

(4)実施例パイソン

1. Aのメンバーシップ関数:

コードは以下の通りであります:

from sympy import *
# step为迭代步数,x0为初始位置,obj为要求极值的函数
def newtons(step, x0, obj):
    i = 1 # 记录迭代次数的变量
    x0 = float(x0) # 浮点数计算更快
    obj_deri = diff(obj, x) # 定义一阶导数,对应上述公式
    obj_sec_deri = diff(obj, x, 2) # 定义二阶导数,对应上述公式
    while i <= step:
        if i == 1:
            # 第一次迭代的更新公式
            xnew = x0 - (obj_deri.subs(x, x0)/obj_sec_deri.subs(x, x0))
            print('迭代第%d次:%.5f' %(i, xnew))
            i = i + 1
        else:
            #后续迭代的更新公式
            xnew = xnew - (obj_deri.subs(x, xnew)/obj_sec_deri.subs(x, xnew))
            print('迭代第%d次:%.5f' % (i, xnew))
            i = i + 1
    return xnew
x = symbols("x") # x为字符变量
result = newtons(50, 10, x**6+x)
print('最佳迭代的位置:%.5f' %result)

結果が示されています。
[画像のチェーンは、失敗したダンプの外に、ソースステーションは、セキュリティチェーン機構を有していてもよい、それは直接ダウンアップロードした写真を保存することをお勧めします(IMG-UvjjDKkX-1586158727496)(。\画像-20200406153627471.png)]
[画像のチェーンは、失敗したダンプの外に、ソースステーションは、セキュリティチェーン機構を有していてもよい、それは直接ダウンアップロードした写真を保存することをお勧めします(IMG-JQC0Q3ie-1586158727497)(。\画像-20200406153608593.png)]

2.バイナリ機能:

コードは以下の通りであります:

"""
    用梯度法求二次函数f(x1,x2)=x1^2+2*x2^2-4*x1-2*x1*x2的极小值,极小点、
"""
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np
 
def Fun(x1,x2):#原函数
    return x1*x1+2*x2*x2-4*x1-2*x1*x2
 
def PxFun(x1,x2):#偏x导
    return 2*x1-2*x2-4
 
def PyFun(x1,x2):#偏y导
    return 4*x2-2*x1
 
#初始化
i=0     #迭代次数
fig=plt.figure()#figure对象
ax=Axes3D(fig)#Axes3D对象
X1,X2=np.mgrid[-2:2:40j,-2:2:40j]#取样并作满射联合
Z=Fun(X1,X2)#取样点Z坐标打表
ax.plot_surface(X1,X2,Z,rstride=1,cstride=1,cmap="rainbow")
ax.set_xlabel('x1')
ax.set_ylabel('x2')
ax.set_zlabel('z')
 
#梯度下降
step=0.01   #下降系数
x1=0
x2=0#初始选取一个点
tag_x1=[x1]
tag_x2=[x2]
tag_z=[Fun(x1,x2)]#三个坐标分别打入表中,该表用于绘制点
new_x1=x1
new_x2=x2
Over=False
while Over==False:
    new_x1-=step*PxFun(x1,x2)
    new_x2-=step*PyFun(x1,x2)#分别作梯度下降
    if Fun(x1,x2)-Fun(new_x1,new_x2)<7e-9:#精度
        Over=True
    x1=new_x1
    x2=new_x2#更新旧点
    tag_x1.append(x1)
    tag_x2.append(x2)
    tag_z.append(Fun(x1,x2))#新点三个坐标打入表中
    i=i+1
 
#绘制点/输出坐标
ax.plot(tag_x1,tag_x2,tag_z,'r.')
plt.title('(x1,x2)~('+str(x1)+","+str(x2)+')')
plt.show()
print("迭代次数:",i)

結果は以下の通りであります:
[画像のチェーンは、失敗したダンプの外に、ソースステーションは、セキュリティチェーン機構を有していてもよい、それは直接ダウンアップロードした写真を保存することをお勧めします(IMG-mSkZqWNe-1586158727497)(。\画像-20200406153721062.png)]

第二に、勾配降下アルゴリズムの原則:

(1)3つの要素勾配:

思考勾配法の三つの要素:開始点、減少の方向、ダウンステップ。

(2)類似:

ここで、我々は力を動かす類推すると、鮮やかな類推を行い、ステップ(多くを行く)、方向、出発点、とても鮮やかメタファーは、私たちは勾配問題への洞察を解決しましょうという三つの要素を完了します、開始点は焦点が考えるように初期化され、非常に重要ですが、方向は重要なステップです。実際には、様々な異なる勾配は、これら2つの点が異なっているということです!

勾配方向は、次のとおり
IMG
、[デルタ]時に大きな勾配は、比較的遠く最適解から、Wが速く更新される場合、それはでしょう、一定のステップサイズであるが、ときに小さく、すなわち勾配近い最適解への更新Wが実際に元のレートと同じに維持しているとき、これは過度のWにつながる更新するのは簡単ですが、これまで最適解から、その後、前後に最適解が振動の近くに表示されます。だから、以来、ときに大きな離れ最適解からの勾配、長い間このリズムとして最適な解決策は、我々の譲歩の近くの小さな勾配しばらく、私たちはλを使用し、私はそう|最後におなじみだ、代わりにΔの| W式:
IMG
それは一定であるがので、この時間λは、変化の傾きとして遅く、急峻です。

(3)公式:

それは次のように計算されます。
IMG

III。概要

最小二乗計算量が多すぎると、逆行列は、コントラスト勾配降下によって、マトリックスが逆であろう非常に時間のかかる数値不安定な状況である最終ステップの最小二乗解の単純な方法として見ることができます方程式法、勾配降下法がいくつかの欠点があるが、量が少し良く時に選択勾配降下法では、データのより大きな量を算出していないが。

参考文献:
[1] https://blog.csdn.net/sigai_csdn/article/details/80678812。

[2]。https://baijiahao.baidu.com/s?id=1613121229156499765&wfr=spider&for=pc

リリース元の2件の記事 ウォンの賞賛0 ビュー18

おすすめ

転載: blog.csdn.net/lk1252793766/article/details/105344940