こんにちはketです。初記事です。
本記事の構成
◇目次
って感じの流れです。今回は、長くなりすぎてしまうので1変数の場合のみについてまとめたいと思います。n変数の場合に関しては別記事で。
ではさっそく。
※勾配法を知らない場合は勾配法を勉強してからの方がいいと思います!勾配法のまとめページも完成させたらリンク貼ります。
ニュートン法の適用条件と特徴
適用できる条件は以下の3つ
ニュートン法の特徴は何と言ってもこれ
- 収束がめっちゃ早い。(2次収束する)
軽くまとめると、
定義域に縛りがない、いっぱい微分できる凸関数の最大値(もしくは最小値)を探す時に使えて、すぐ答えが見つかるよ
って感じ。
ニュートン法の理論
ニュートン法が、なぜ収束しやすく、またなぜ二回微分が必要なのか等を数学的に確認していきます。
1変数の場合
軸上の点
の近くの点
での関数
の値はテイラー展開して、
のように書けます。
具体的に考えてみましょう。例えばある点だとします。そしてその近くの点
の値を求めるために
とし、テイラー展開を用いて計算しよう(近似しよう)としています。何も難しいことはしていません。
上式のの部分は
の3次以上の項であるため、
がとても小さな数の場合、急速に0に近づきます。そこでこれらの項を無視して近似した新たな関数を次のように定めます。
かなりスッキリしましたね。添字の2は2次の項まで近似しましたよ〜っていう意味です。最初の目的関数の代わりに、この2次近似した関数の最大(最小)を求めよう!というのがニュートン法の根幹の考え方になっています。
関数の最大を求めると言ったら、おなじみの微分ですね。で
を微分して値が0になる
を探しましょう。
このように求めた2次近似関数の最大値に移動する、つまりは以下のように
とを更新することによって、近似する前の目的関数の最大値に近づくことがことができます。
この近づいた点で、また同じように
2次近似を行い→最大値を求め→を更新
を繰り返すことによって徐々に目的関数の最大値に近づくことができます。
ニュートン法のアルゴリズム
それではアルゴリズムを確認しましょう。
-------procedure Newton(f'(x),f"(x))-----------------------
に初期値を代入する。
-
と置き、以下のように
を更新する。
- ステップ2に戻り、これを
となるまで繰り返す。
を返す。
※ここでのはとても小さな定数ということを意味します。
--------------------------------------------------------------------------------------
収束がすごく早いことを意味する2次収束の証明、またpythonでの実装はまた今度。
それでは。