機械学習

最急降下法を用いて二次関数の局値を確認してみた

\(y=x^2\)の関数のグラフは以下の通りで、これを見ると\(x=0\)の場合に\(y\)が最小値(局値)を取ることが確認できるが、この\(y\)が最小となる\(x\)を求める方法の1つに「最急降下法」がある。
xの2乗のグラフ

最急降下法は、接線の傾きを順次調べることによって、傾きが0になる\(x\)の値に近づけて行く方法で、以下の更新式を繰り返すことで、\(y\)が最小となる\(x\)を求めることができる。

最急降下法
出所:最急降下法の仕組みをイラストでわかりやすく解説

今回は、最急降下法を用いて、二次関数の最小値(局値)の値を確認してみたので、そのサンプルプログラムを共有する。

前提条件

下記記事のAnacondaをインストールしJupyter Notebookを利用できること

Python開発用のAnacondaをインストールしJupyter Notebookを利用してみた今回は、Pythonを勉強してみたいと思い、Python開発環境を構築してみたので、その手順を共有する。 Python開発用として...

\(y=x^2\)とその接線のグラフ

例えば、\(y=x^2\)の、\(x=4\)における接線は\(y=8x-16\)で計算され、その際のグラフを描くソースコードとグラフは、以下のようになる。

x=4における接線

同様に、\(y=x^2\)の接線を、\(x=3\),\(x=2\),\(x=1\)と描いた結果は以下の通りで、だんだん傾きが0に近づくことが確認できる。
x=3における接線

x=2における接線 x=1における接線

そして、\(x=0\)となると、以下のように、傾きが0になることが確認できる。
x=0における接線



Code VillageはJavaScriptを中心としたサポート体制が充実したプログラミングスクールだったJavaScriptや、JavaScriptのフレームワーク「React」「Vue」を中心にオンラインで学習できるプログラミングスクール...

最急降下法を用いた二次関数の最小値(局値)の確認

実際に、最急降下法を用いて、\(x\)の値が\(0\)に近づくことを確認してみる。

なお、この記事の冒頭で紹介した通り、最急降下法で、以下の更新式を繰り返すことで、\(y\)が最小となる\(x\)を求めることができる。

最急降下法
出所:最急降下法の仕組みをイラストでわかりやすく解説

\(y=x^2\)をxについて微分すると、\(y=2x\)となるので、最急降下法を用いた\(x\)の値の変化をいくつか確認した結果は、以下のようになる。

最急降下法によるxの値の変化

これを見ると、\(x\)の値がだんだん0に近づいていることが確認できる。なお、学習率ηは、結果を見て適当な値を設定している。

次に、最急降下法の、更新式の繰り返し回数を200回・1,000回にした結果は、以下の通り。

更新式を200回繰り返した結果

更新式を1000回繰り返した結果

最急降下法の、更新式の繰り返し回数を1,000回にした最終結果の数値を、散布図で表現した結果は以下の通りで、これを見ると確かに\(x=0\)に近づいているのが確認できる。

更新式を1000回繰り返した結果を散布図で表示

また、最急降下法の、更新式を1,000回繰り返した際の、xの値の変化は以下の通りで、約300回の繰り返しで\(x=0\)に近づいているのが確認できる。

更新式を1000回繰り返した際のxの値の変化を表示

要点まとめ

  • 最急降下法は、接線の傾きを順次調べることによって、傾きが0になる値に近づけて行く方法で、これを用いて二次関数の局値を求めることができる。