• home
  • about
  • 全ての投稿
  • ソフトウェア・ハードウェアの設定のまとめ
  • 分析関連のまとめ
  • ヘルスケア関連のまとめ
  • 生涯学習関連のまとめ

ニュートン法

date: 2020-03-03 excerpt: ニュートン法について

tag: statistics最適化ニュートン法


ニュートン法について

概要

  • 微分可能な関数を対象に最適化する
  • ある値を求めるときに、計算時間がO(k)で済む
    • kは微分関数

導出

ある関数\(f(x)\)があるときに、テーラー展開すると以下のようになる

\[f(x) = f(x_0) + f'(x_0)(x - x_0) + O((x-x_0)^2)\]

最後の項を外して整理すると

\[x = x_0 - \frac{f(x_0)}{f'(x_0)}\]

\(O((x-x_0)^2)\)が正の値を持つから(行列では半正定値)

\[x_1 = x_0 - \frac{f(x)}{f'(x)}\]

任意の値のルート(SQRT)を高速に求める

\(a = 3\) があるときに、$\sqrt{a}$ を求める

\(x = \sqrt{a}\) と置くことができ、変形すると \(f(x) = x^2 - a\)

ニュートン法で記すと

\[x_{n+1} = x_{n} + \frac{f(x_n)}{f'(x_n)}\]

整理すると

\[x_{n+1} = x_{n} + \frac{x_{n}^2-a}{2 x_{n}}\]

20回、最適化するとおおよそ正しい値が得られる

import random
a = 3
x_n = random.random()
for _ in range(20):
    x_np = x_n - (x_n ** 2 - a) / (2 * x_n)
    x_n = x_np
print(x_n) # 1.7320508075688772
import math
print(math.sqrt(a)) # 1.7320508075688772

参考

  • ニュートン法
  • 69. Sqrt(x)/LeetCode


statistics最適化ニュートン法 Share Tweet