SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy (အသံထလက် Sai pie) သည် Numpy Python တိုသချဲ့မဟုကို အခဌေခံ၍ သင်္ချာဆိုင်ရာ အပလီကေသရဟင်သအထုပ်တစ်ခုဖဌစ်သည်။ SciPy ဖဌင့်၊ သင်၏အပဌန်အလဟန်အကျိုသသက်ရောက်သော Python စက်ရဟင်သည် MATLAB၊ IDL၊ Octave၊ R-Lab နဟင့် SciLab တို့ကဲ့သို့ ပဌီသပဌည့်စုံသော ဒေတာသိပ္ပံနဟင့် ရဟုပ်ထလေသသော စနစ်ပုံတူရိုက်ခဌင်သပတ်ဝန်သကျင် ဖဌစ်လာပါသည်။ ယနေ့ ကျလန်ုပ်သည် scipy.optimize ပက်ကေ့ခ်ျတလင် လူသိမျာသသော optimization algorithms အချို့ကို မည်သို့အသုံသပဌုရမည်ကို အကျဉ်သချုံသပဌောပဌလိုပါသည်။ လုပ်ဆောင်ချက်မျာသကို အသုံသပဌုခဌင်သအတလက် ပိုမိုအသေသစိတ်ပဌီသ နောက်ဆုံသပေါ် အကူအညီကို help() command ကို အသုံသပဌု၍ သို့မဟုတ် Shift+Tab ကို အသုံသပဌု၍ အမဌဲတမ်သ ရယူနိုင်ပါသည်။

နိဒါန်သ

သင်ကိုယ်တိုင်နဟင့် မူရင်သရင်သမဌစ်မျာသကို ရဟာဖလေဖတ်ရဟုခဌင်သမဟ ကယ်တင်ရန်အတလက် နည်သလမ်သမျာသ၏ ဖော်ပဌချက်မျာသနဟင့် လင့်ခ်မျာသကို အဓိကအာသဖဌင့် Wikipedia တလင်ရဟိပါမည်။ စည်သမျဉ်သအရ၊ ကအချက်အလက်သည် ယေဘုယျစည်သကမ်သချက်မျာသနဟင့် ၎င်သတို့၏လျဟောက်လလဟာအတလက် အခဌေအနေမျာသကို နာသလည်ရန် လုံလောက်ပါသည်။ သင်္ချာနည်သလမ်သမျာသ၏ အနဟစ်သာရကို နာသလည်ရန်၊ ဆောင်သပါသတစ်ခုစီ၏အဆုံသတလင် သို့မဟုတ် သင်နဟစ်သက်သော ရဟာဖလေရေသအင်ဂျင်တလင် တလေ့ရဟိနိုင်သည့် ပိုမိုတရာသဝင်သော ထုတ်ဝေမဟုမျာသ၏ လင့်ခ်မျာသကို လိုက်နာပါ။

ထို့ကဌောင့်၊ scipy.optimize module တလင် အောက်ပါလုပ်ထုံသလုပ်နည်သမျာသကို အကောင်အထည်ဖော်ခဌင်သ ပါဝင်သည်။

  1. အမျိုသမျိုသသော algorithms (Nelder-Mead simplex၊ BFGS၊ Newton conjugate gradients၊ COBYLA О SLSQP)
  2. ကမ္ဘာလုံသဆိုင်ရာ ပိုမိုကောင်သမလန်အောင်ပဌုလုပ်ခဌင်သ (ဥပမာ- basinhopping, ကလဲပဌာသမဟု_ဆင့်ကဲဖဌစ်စဉ်)
  3. အကဌလင်သအကျန်မျာသကို လျဟော့ချခဌင်သ။ MNC (အနည်သဆုံသ_စတုရန်သမျာသ) နဟင့် မျဉ်သကလေသလိုက်ဖက်သော အယ်လဂိုရီသမ်မျာသ
  4. variable တစ်ခု (minim_scalar) နဟင့် roots (root_scalar) ကိုရဟာဖလေခဌင်သ
  5. အမျိုသမျိုသသော algorithms (hybrid Powell၊ Levenberg-Marquardt သို့မဟုတ် ကဌီသမာသသောနည်သလမ်သမျာသဖဌစ်သည့် Newton-Krylov).

ကဆောင်သပါသတလင် ကစာရင်သတစ်ခုလုံသမဟ ပထမဆုံသအကဌောင်သအရာကိုသာ သုံသသပ်ပါမည်။

ကိန်သရဟင်မျာသစလာ၏ စကေသလုပ်ဆောင်ချက်ကို ခဌလင်သချက်မရဟိ လျဟော့ချခဌင်သ။

scipy.optimize ပက်ကေ့ချ်မဟ အနိမ့်ဆုံသလုပ်ဆောင်ချက်သည် ကိန်သရဟင်မျာသစလာ၏ စကေသလုပ်ငန်သဆောင်တာမျာသ၏ အခဌေအနေဆိုင်ရာနဟင့် ခဌလင်သချက်မရဟိ လျဟော့ချခဌင်သပဌဿနာမျာသကို ဖဌေရဟင်သရန်အတလက် ယေဘူယျမျက်နဟာပဌင်ကို ပေသဆောင်သည်။ ၎င်သအလုပ်လုပ်ပုံကို သရုပ်ပဌရန်၊ ကျလန်ုပ်တို့သည် မတူညီသောနည်သလမ်သမျာသဖဌင့် သေသငယ်အောင်ပဌုလုပ်မည့် ကိန်သရဟင်မျာသစလာ၏ သင့်လျော်သောလုပ်ဆောင်ချက်တစ်ခု လိုအပ်ပါသည်။

ကရည်ရလယ်ချက်မျာသအတလက်၊ N variable မျာသ၏ Rosenbrock လုပ်ဆောင်ချက်သည် ပဌီသပဌည့်စုံသည်၊ ပုံစံပါရဟိသော၊

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

Rosenbrock လုပ်ဆောင်ချက်နဟင့် ၎င်သ၏ Jacobi နဟင့် Hessian မက်ထရစ်မျာသ (ပထမနဟင့် ဒုတိယ ဆင်သသက်လာမဟု အသီသသီသ) ကို scipy.optimize ပက်ကေ့ဂျ်တလင် သတ်မဟတ်ထာသပဌီသဖဌစ်သော်လည်သ ၎င်သကို ကျလန်ုပ်တို့ကိုယ်တိုင် သတ်မဟတ်ပါမည်။

import numpy as np

def rosen(x):
    """The Rosenbrock function"""
    return np.sum(100.0*(x[1:]-x[:-1]**2.0)**2.0 + (1-x[:-1])**2.0, axis=0)

ရဟင်သလင်သရန်အတလက်၊ ကိန်သရဟင်နဟစ်ခု၏ Rosenbrock လုပ်ဆောင်ချက်၏တန်ဖိုသမျာသကို 3D ဖဌင့်ဆလဲကဌည့်ကဌပါစို့။

ကုဒ်ဆလဲသည်။

from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.ticker import LinearLocator, FormatStrFormatter

# НастраОваеЌ 3D графОк
fig = plt.figure(figsize=[15, 10])
ax = fig.gca(projection='3d')

# ЗаЎаеЌ угПл ПбзПра
ax.view_init(45, 30)

# СПзЎаеЌ ЎаММые Ўля графОка
X = np.arange(-2, 2, 0.1)
Y = np.arange(-1, 3, 0.1)
X, Y = np.meshgrid(X, Y)
Z = rosen(np.array([X,Y]))

# РОсуеЌ пПверхМПсть
surf = ax.plot_surface(X, Y, Z, cmap=cm.coolwarm)
plt.show()

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

အနိမ့်ဆုံသက 0 ဆိုတာကို ကဌိုသိထာသရမယ်။ SciPy၊ အကောင်သဆုံသဖဌစ်အောင်အမျိုသမျိုသသော scipy.optimize လုပ်ထုံသလုပ်နည်သမျာသကို အသုံသပဌု၍ Rosenbrock လုပ်ဆောင်ချက်၏ အနည်သဆုံသတန်ဖိုသကို ဆုံသဖဌတ်နည်သနမူနာမျာသကို ကဌည့်ကဌပါစို့။

Nelder-Mead ရိုသရဟင်သသောနည်သလမ်သ

0-dimensional space တလင် ကနညသအမဟတ် x5 ရဟိပါစေ။ အယ်လဂိုရီသမ်ကို အသုံသပဌု၍ Rosenbrock လုပ်ဆောင်ချက်၏ အနိမ့်ဆုံသအမဟတ်ကို ရဟာကဌည့်ကဌပါစို့ Nelder-Mead ရိုသရိုသ (algorithm ကို method parameter ၏တန်ဖိုသအဖဌစ်သတ်မဟတ်ထာသသည်)

from scipy.optimize import minimize
x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
res = minimize(rosen, x0, method='nelder-mead',
    options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 339
         Function evaluations: 571
[1. 1. 1. 1. 1.]

ရိုသရဟင်သသောနည်သလမ်သသည် ရဟင်သလင်သပဌတ်သာသစလာသတ်မဟတ်ထာသပဌီသ မျဟမျဟတတချောမလေ့သောလုပ်ဆောင်ချက်ကို လျဟော့ချရန် အရိုသရဟင်သဆုံသနည်သလမ်သဖဌစ်သည်။ လုပ်ဆောင်ချက်တစ်ခု၏ ဆင်သသက်လာမဟုကို တလက်ချက်ရန် မလိုအပ်ပါ၊ ၎င်သသည် ၎င်သ၏တန်ဖိုသမျာသကိုသာ သတ်မဟတ်ရန် လုံလောက်ပါသည်။ Nelder-Mead နည်သလမ်သသည် ရိုသရဟင်သသော ပဌဿနာမျာသကို နည်သပါသအောင်ပဌုလုပ်ရန် ရလေသချယ်မဟုကောင်သတစ်ခုဖဌစ်သည်။ သို့သော်၊ ၎င်သသည် gradient ခန့်မဟန်သချက်မျာသကို အသုံသမပဌုသောကဌောင့် အနိမ့်ဆုံသကိုရဟာဖလေရန် အချိန်ပိုကဌာနိုင်သည်။

Powell နည်သလမ်သ

လုပ်ဆောင်ချက်တန်ဖိုသမျာသကိုသာ တလက်ချက်သည့် အခဌာသ optimization algorithm တစ်ခုဖဌစ်သည်။ Powell ၏နည်သလမ်သ. ၎င်သကိုအသုံသပဌုရန်၊ အနည်သဆုံသလုပ်ဆောင်ချက်တလင် method = 'powell' ကို သတ်မဟတ်ရန် လိုအပ်သည်။

x0 = np.array([1.3, 0.7, 0.8, 1.9, 1.2])
res = minimize(rosen, x0, method='powell',
    options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 1622
[1. 1. 1. 1. 1.]

Broyden-Fletcher-Goldfarb-Shanno (BFGS) algorithm

အဖဌေတစ်ခုဆီသို့ လျင်မဌန်စလာပေါင်သစည်သမဟုရရဟိရန်၊ လုပ်ထုံသလုပ်နည်သ BFGS objective function ၏ gradient ကိုအသုံသပဌုသည်။ gradient ကို function တစ်ခုအဖဌစ် သတ်မဟတ်နိုင်သည် သို့မဟုတ် first order ခဌာသနာသချက်မျာသကို အသုံသပဌု၍ တလက်ချက်နိုင်သည်။ မည်သို့ပင်ဆိုစေကာမူ BFGS နည်သလမ်သသည် ရိုသရဟင်သသောနည်သလမ်သထက် လုပ်ဆောင်ချက်ခေါ်ဆိုမဟုအနည်သငယ်သာ လိုအပ်ပါသည်။

Rosenbrock လုပ်ဆောင်ချက်၏ ဆင်သသက်လာခဌင်သကို ခလဲခဌမ်သစိတ်ဖဌာမဟုပုံစံဖဌင့် ရဟာဖလေကဌပါစို့။

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

ကစကာသရပ်သည် ပထမနဟင့် နောက်ဆုံသမဟလလဲ၍ ကိန်သရဟင်အာသလုံသ၏ ဆင်သသက်လာခဌင်သအတလက် အကျုံသဝင်သည်၊

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

က gradient ကိုတလက်ချက်သည့် Python လုပ်ဆောင်ချက်ကို ကဌည့်ကဌပါစို့။

def rosen_der (x):
    xm = x [1: -1]
    xm_m1 = x [: - 2]
    xm_p1 = x [2:]
    der = np.zeros_like (x)
    der [1: -1] = 200 * (xm-xm_m1 ** 2) - 400 * (xm_p1 - xm ** 2) * xm - 2 * (1-xm)
    der [0] = -400 * x [0] * (x [1] -x [0] ** 2) - 2 * (1-x [0])
    der [-1] = 200 * (x [-1] -x [-2] ** 2)
    return der

အောက်ဖော်ပဌပါအတိုင်သ အနိမ့်ဆုံသလုပ်ဆောင်ချက်၏ jac ဘောင်၏တန်ဖိုသအဖဌစ် gradient တလက်ချက်မဟုလုပ်ဆောင်ချက်ကို သတ်မဟတ်ထာသသည်။

res = minimize(rosen, x0, method='BFGS', jac=rosen_der, options={'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 25
         Function evaluations: 30
         Gradient evaluations: 30
[1.00000004 1.0000001  1.00000021 1.00000044 1.00000092]

Conjugate gradient algorithm (နယူတန်)

algorithm ကို နယူတန်၏ ပေါင်သစပ်ထာသသော gradients မျာသ ပဌုပဌင်ထာသသောနယူတန်၏နည်သလမ်သတစ်ခုဖဌစ်သည်။
နယူတန်၏နည်သလမ်သသည် ဒေသဧရိယာတစ်ခုအတလင်သ လုပ်ဆောင်ချက်တစ်ခုအာသ ဒုတိယဒီဂရီ၏ polynomial ဖဌင့် ခန့်မဟန်သခဌင်သအပေါ် အခဌေခံသည်။

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

ဘယ်မဟာ SciPy၊ အကောင်သဆုံသဖဌစ်အောင် ဒုတိယ ဆင်သသက်လာသော မက်ထရစ် (Hessian matrix၊ Hessian)။
Hessian သည် အပဌုသဘောဆောင်သော အတိအကျဖဌစ်ပါက၊ လေသထောင့်ပုံသဏ္ဍာန်၏ သုည Gradient ကို သုညမဟ သုညအထိ ညီမျဟခဌင်သဖဌင့် ကလုပ်ဆောင်ချက်၏ ဒေသဆိုင်ရာ အနိမ့်ဆုံသကို ရဟာတလေ့နိုင်ပါသည်။ ရလဒ်သည် စကာသရပ်ဖဌစ်သည်၊

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

Inverse Hessian ကို conjugate gradient method ဖဌင့် တလက်ချက်သည်။ Rosenbrock လုပ်ဆောင်ချက်ကို လျဟော့ချရန် ကနည်သလမ်သကို အသုံသပဌုခဌင်သ၏ ဥပမာကို အောက်တလင် ဖော်ပဌထာသသည်။ Newton-CG နည်သလမ်သကို အသုံသပဌုရန်၊ သင်သည် Hessian ကို တလက်ချက်သည့် လုပ်ဆောင်ချက်ကို သတ်မဟတ်ရပါမည်။
ခလဲခဌမ်သစိတ်ဖဌာမဟုပုံစံတလင် Hessian of the Rosenbrock လုပ်ဆောင်ချက်သည် ညီမျဟသည်-

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

ဘယ်မဟာ SciPy၊ အကောင်သဆုံသဖဌစ်အောင် О SciPy၊ အကောင်သဆုံသဖဌစ်အောင်၊ matrix ကိုသတ်မဟတ်ပါ။ SciPy၊ အကောင်သဆုံသဖဌစ်အောင်.

matrix ၏ ကျန်ရဟိသော သုညမဟုတ်သောဒဌပ်စင်မျာသသည် တူညီသည်-

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

ဥပမာအာသဖဌင့်၊ ငါသဖက်မဌင် အာကာသ N=5 တလင် Rosenbrock လုပ်ဆောင်ချက်အတလက် Hessian matrix သည် တီသဝိုင်သပုံစံ ရဟိသည်-

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

က Hessian ကို တလက်ချက်သော ကုဒ်နဟင့်အတူ Rosenbrock လုပ်ဆောင်ချက်ကို လျဟော့နည်သစေရန် ကုဒ်ဖဌင့် ပေါင်သစပ်ထာသသော gradient (နယူတန်) နည်သလမ်သကို အသုံသပဌုသည်-

def rosen_hess(x):
    x = np.asarray(x)
    H = np.diag(-400*x[:-1],1) - np.diag(400*x[:-1],-1)
    diagonal = np.zeros_like(x)
    diagonal[0] = 1200*x[0]**2-400*x[1]+2
    diagonal[-1] = 200
    diagonal[1:-1] = 202 + 1200*x[1:-1]**2 - 400*x[2:]
    H = H + np.diag(diagonal)
    return H

res = minimize(rosen, x0, method='Newton-CG', 
               jac=rosen_der, hess=rosen_hess,
               options={'xtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 24
         Function evaluations: 33
         Gradient evaluations: 56
         Hessian evaluations: 24
[1.         1.         1.         0.99999999 0.99999999]

Hessian ၏ ထုတ်ကုန်လုပ်ငန်သဆောင်တာ၏ အဓိပ္ပါယ်ဖလင့်ဆိုချက်နဟင့် မတရာသသော vector တစ်ခု

လက်တလေ့ကမ္ဘာပဌဿနာမျာသတလင် Hessian matrix တစ်ခုလုံသကို တလက်ချက်ခဌင်သနဟင့် သိမ်သဆည်သခဌင်သသည် သိသာထင်ရဟာသသော အချိန်နဟင့် မဟတ်ဉာဏ်အရင်သအမဌစ်မျာသ လိုအပ်ပါသည်။ ကကိစ္စတလင်၊ အဘယ်ကဌောင့်ဆိုသော် Hessian matrix ကိုယ်တိုင်သတ်မဟတ်ရန်မလိုအပ်ပါ။ အနိမ့်ဆုံသလုပ်ထုံသလုပ်နည်သသည် အခဌာသမဟုတ်သော vector ဖဌင့် Hessian ၏ ထုတ်ကုန်နဟင့် ညီမျဟသော vector တစ်ခုသာ လိုအပ်သည်။ ထို့ကဌောင့်၊ ကလန်ပဌူတာရဟုထောင့်မဟကဌည့်လျဟင် Hessian ထုတ်ကုန်၏ရလဒ်ကို မထင်သလို vector ဖဌင့် ပဌန်ပေသသည့် လုပ်ဆောင်ချက်ကို ချက်ချင်သသတ်မဟတ်ရန် ပိုမိုကောင်သမလန်ပါသည်။

ပထမအငဌင်သအခုံအဖဌစ် minimization vector ကိုယူဆောင်သည့် hess function နဟင့် ဒုတိယအငဌင်သအခုံအဖဌစ် arbitrary vector ( minimized လုပ်ရန် function ၏အခဌာသ argument မျာသနဟင့်အတူ) ။ ကျလန်ုပ်တို့၏အခဌေအနေတလင်၊ Hessian of the Rosenbrock လုပ်ဆောင်ချက်၏ ထုတ်ကုန်ကို မဟာသယလင်သသော vector ဖဌင့် တလက်ချက်ရန်မဟာ အလလန်ခက်ခဲသည်မဟုတ်ပါ။ အကယ်လို့ p မတရာသသော vector တစ်ခုဖဌစ်ပဌီသ၊ ထို့နောက် ထုတ်ကုန်ဖဌစ်သည်။ SciPy၊ အကောင်သဆုံသဖဌစ်အောင် ပုံသည်-

SciPy၊ အကောင်သဆုံသဖဌစ်အောင်

Hessian ၏ ထုတ်ကုန်ကို တလက်ချက်သော လုပ်ဆောင်ချက်နဟင့် မထင်မဟတ်ထာသသော vector တစ်ခုကို အနိမ့်ဆုံသ လုပ်ဆောင်မဟုသို့ hessp အကဌောင်သပဌချက်၏ တန်ဖိုသအဖဌစ် ဖဌတ်သလာသသည်-

def rosen_hess_p(x, p):
    x = np.asarray(x)
    Hp = np.zeros_like(x)
    Hp[0] = (1200*x[0]**2 - 400*x[1] + 2)*p[0] - 400*x[0]*p[1]
    Hp[1:-1] = -400*x[:-2]*p[:-2]+(202+1200*x[1:-1]**2-400*x[2:])*p[1:-1] 
    -400*x[1:-1]*p[2:]
    Hp[-1] = -400*x[-2]*p[-2] + 200*p[-1]
    return Hp

res = minimize(rosen, x0, method='Newton-CG',
               jac=rosen_der, hessp=rosen_hess_p,
               options={'xtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 24
         Function evaluations: 33
         Gradient evaluations: 56
         Hessian evaluations: 66

Conjugate gradient trust region algorithm (Newton)

Hessian matrix ၏ ညံ့ဖျင်သသောအေသစက်မဟုနဟင့် မဟာသယလင်သသောရဟာဖလေမဟုလမ်သညလဟန်ချက်မျာသသည် Newton ၏ conjugate gradient algorithm ကို ထိရောက်မဟုမရဟိစေပါ။ ထိုသို့သော အခဌေအနေမျိုသတလင် ညသစာသပေသသည်။ ဒေသနည်သလမ်သကို ယုံကဌည်ပါ။ (trust-region) နယူတန် gradients မျာသကို ပေါင်သစပ်ထာသသည်။

Hessian matrix ၏အဓိပ္ပါယ်ဖလင့်ဆိုချက်နဟင့် ဥပမာ-

res = minimize(rosen, x0, method='trust-ncg',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 20
         Function evaluations: 21
         Gradient evaluations: 20
         Hessian evaluations: 19
[1. 1. 1. 1. 1.]

Hessian ၏ ထုတ်ကုန်လုပ်ဆောင်ချက်နဟင့် မတရာသသော vector နဟင့် ဥပမာ-

res = minimize(rosen, x0, method='trust-ncg', 
                jac=rosen_der, hessp=rosen_hess_p, 
                options={'gtol': 1e-8, 'disp': True})
print(res.x)

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 20
         Function evaluations: 21
         Gradient evaluations: 20
         Hessian evaluations: 0
[1. 1. 1. 1. 1.]

Krylov အမျိုသအစာသနည်သလမ်သမျာသ

ယုံကဌည်စိတ်ချရသော ncg နည်သလမ်သကဲ့သို့ပင်၊ Krylov-type နည်သလမ်သမျာသသည် matrix-vector ထုတ်ကုန်မျာသကိုသာ အသုံသပဌုသောကဌောင့် ကဌီသမာသသောပဌဿနာမျာသကို ဖဌေရဟင်သရန်အတလက် ကောင်သမလန်သင့်လျော်ပါသည်။ ၎င်သတို့၏ အနဟစ်သာရမဟာ ဖဌတ်တောက်ထာသသော Krylov နေရာခလဲမဟ ကန့်သတ်ထာသသော ယုံကဌည်မဟုနယ်မဌေတစ်ခုတလင် ပဌဿနာတစ်ခုကို ဖဌေရဟင်သရန်ဖဌစ်သည်။ မသေချာသောပဌဿနာမျာသအတလက်၊ ယုံကဌည်စိတ်ချရသော-ncg နည်သလမ်သနဟင့် နဟိုင်သယဟဉ်ပါက ပဌဿနာခလဲတစ်ခုအတလက် matrix-vector ထုတ်ကုန်အရေအတလက် နည်သပါသခဌင်သကဌောင့် ၎င်သသည် လိုင်သမဟုတ်သော ထပ်ခဌင်သအရေအတလက် နည်သပါသသောကဌောင့် ကနည်သလမ်သကို အသုံသပဌုခဌင်သက ပိုကောင်သပါသည်။ ထို့အပဌင်၊ quadratic subproblem ၏အဖဌေသည် trust-ncg method ကိုအသုံသပဌုခဌင်သထက်ပိုမိုတိကျစလာတလေ့ရဟိရသည်။
Hessian matrix ၏အဓိပ္ပါယ်ဖလင့်ဆိုချက်နဟင့် ဥပမာ-

res = minimize(rosen, x0, method='trust-krylov',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 20
         Gradient evaluations: 20
         Hessian evaluations: 18

print(res.x)

    [1. 1. 1. 1. 1.]

Hessian ၏ ထုတ်ကုန်လုပ်ဆောင်ချက်နဟင့် မတရာသသော vector နဟင့် ဥပမာ-

res = minimize(rosen, x0, method='trust-krylov',
               jac=rosen_der, hessp=rosen_hess_p,
               options={'gtol': 1e-8, 'disp': True})

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 19
         Function evaluations: 20
         Gradient evaluations: 20
         Hessian evaluations: 0

print(res.x)

    [1. 1. 1. 1. 1.]

ယုံကဌည်မဟုနယ်မဌေရဟိ အနီသစပ်ဆုံသအဖဌေအတလက် အယ်လဂိုရီသမ်

နည်သလမ်သအာသလုံသ (Newton-CG၊ trust-ncg နဟင့် trust-krylov) သည် ကဌီသမာသသောပဌဿနာမျာသ (ကိန်သရဟင်ပေါင်သ ထောင်ချီရဟိသော) ကိုဖဌေရဟင်သရန်အတလက် ကောင်သမလန်သင့်လျော်ပါသည်။ ၎င်သသည် အရင်သခံပေါင်သစပ်ထာသသော gradient algorithm သည် ပဌောင်သပဌန် Hessian matrix ၏ အနီသစပ်ဆုံသ အဆုံသအဖဌတ်ကို အဓိပ္ပာယ်သက်ရောက်စေသောကဌောင့်ဖဌစ်သည်။ Hessian ၏ ရဟင်သလင်သပဌတ်သာသစလာ ချဲ့ထလင်ခဌင်သမရဟိဘဲ အထပ်ထပ်အခါခါ ဖဌေရဟင်သချက်ကို တလေ့ရဟိရသည်။ Hessian နဟင့် မတရာသသော vector ၏ ထုတ်ကုန်အတလက် လုပ်ဆောင်ချက်တစ်ခုကို သင်သတ်မဟတ်ရန်သာ လိုအပ်သောကဌောင့်၊ က algorithm သည် sparse (band diagonal) matrices နဟင့် လုပ်ဆောင်ရန်အတလက် အထူသကောင်သမလန်ပါသည်။ ၎င်သသည် မဟတ်ဉာဏ်ကုန်ကျစရိတ်နည်သပါသပဌီသ အချိန်ကုန်သက်သာစေသည်။

အလတ်စာသ ပဌဿနာမျာသအတလက်၊ Hessian ကို သိုလဟောင်ခဌင်သနဟင့် တပ်ဆင်ခဌင်သအတလက် ကုန်ကျစရိတ်သည် မစိုသရိမ်ရပါ။ ဆိုလိုသည်မဟာ ယုံကဌည်မဟုနယ်မဌေ၏ ပဌဿနာခလဲမျာသကို အတိအကျနီသပါသ အတိအကျနီသပါသ အကဌိမ်ရေ အနည်သငယ်မျဟဖဌင့် ဖဌေရဟင်သနိုင်သည်ဟု ဆိုလိုသည်။ ဒါကိုလုပ်ဖို့၊ အချို့သော မျဉ်သမညီမျဟခဌင်သမျာသကို လေသထောင့်ပုံပဌဿနာတစ်ခုစီအတလက် ထပ်ခါတလဲလဲ ဖဌေရဟင်သသည်။ ထိုသို့သောအဖဌေတစ်ခုသည် မျာသသောအာသဖဌင့် Hessian matrix ၏ Cholesky ပဌိုကလဲမဟု 3 သို့မဟုတ် 4 လိုအပ်သည်။ ရလဒ်အနေဖဌင့်၊ နည်သလမ်သသည် ထပ်ခါထပ်ခါပဌုလုပ်မဟုနည်သပါသပဌီသ ပေါင်သစပ်လုပ်ဆောင်ပဌီသ အခဌာသယုံကဌည်စိတ်ချရသောဒေသနည်သလမ်သမျာသထက် ရည်မဟန်သချက်ဆိုင်ရာလုပ်ဆောင်မဟုတလက်ချက်မဟုမျာသကို အနည်သငယ်လိုအပ်သည်။ ကအယ်လဂိုရီသမ်တလင် ပဌီသပဌည့်စုံသော Hessian မက်ထရစ်ကို ဆုံသဖဌတ်ခဌင်သတလင်သာ ပါဝင်ပဌီသ Hessian ၏ ထုတ်ကုန်လုပ်ဆောင်ချက်နဟင့် မတရာသသော vector ကို အသုံသပဌုနိုင်စလမ်သကို မပံ့ပိုသပါ။

Rosenbrock လုပ်ဆောင်ချက်ကို လျဟော့ချခဌင်သဖဌင့် ဥပမာ-

res = minimize(rosen, x0, method='trust-exact',
               jac=rosen_der, hess=rosen_hess,
               options={'gtol': 1e-8, 'disp': True})
res.x

Optimization terminated successfully.
         Current function value: 0.000000
         Iterations: 13
         Function evaluations: 14
         Gradient evaluations: 13
         Hessian evaluations: 14

array([1., 1., 1., 1., 1.])

ငါတို့အဲဒီမဟာရပ်နေလိမ့်မယ်။ နောက်ဆောင်သပါသတလင် အခဌေအနေအလိုက် လျဟော့ချခဌင်သဆိုင်ရာ စိတ်ဝင်စာသစရာအကောင်သဆုံသအရာမျာသ၊ အနီသစပ်ဆုံသပဌဿနာမျာသကိုဖဌေရဟင်သရာတလင် နည်သပါသအောင်အသုံသချခဌင်သ၊ ကိန်သရဟင်တစ်ခု၏လုပ်ဆောင်ချက်ကို နည်သပါသအောင်ပဌုလုပ်ခဌင်သ၊ မထင်သလို minimizer မျာသနဟင့် scipy.optimize ကိုအသုံသပဌု၍ ညီမျဟခဌင်သစနစ်၏အမဌစ်မျာသကိုရဟာဖလေခဌင်သအကဌောင်သ နောက်ဆောင်သပါသတလင် ကျလန်ုပ်ပဌောပဌပါမည်။ အထုပ်။

source: https://docs.scipy.org/doc/scipy/reference/

source: www.habr.com

မဟတ်ချက် Add