【Excelでわかりやすく】勾配降下法で最小値が見つかる理由を視覚的に理解するで勾配降下法(最急降下法)で最小値が見つかる様子を視覚的に示しました。今回は、最小二乗法の問題を最急降下法で解く方法を、Excelを使って試してみたいと思います。学習率による収束の違いをExcelグラフで確認する◆仕事や勉強の息抜きに。最急降下法の基本アルゴリズム残差平方和を求める次のような10組の(x,y)のデータが得られたとして、xからyを予測する単回帰の式を求める問題を考えます。14まず予測式f(x)をf(x)=ax+bとします。10組ある(x,y)を(x1,y1)、(x2,y2)、、、(x10,y10)とすると、(x1,y1)=(7,17)(x2,y2)=(9,21)・・・(x10,y10)=(6,14)のように書けます。予測値と実際の値との誤差(残差)も次のように10個できます。y1-(ax1+b)=17-(7a+b)y2-(ax2+b)=21-(9a+b)・・・y10-(ax10+b)=14-(6a+b)従って、残差の平方和は次のようになります。{17-(7a+b)}2+{21-(9a+b)}2+・・・+{14-(6a+b)}2この式の中のaとbを動かして、残差平方和の最小値を見つけるのが最小二乗法の問題です。残差平方和はaとbの関数になっていますからQ(a,b)とすると、次のような式に一般化できます。【Excelでわかりやすく】勾配降下法で最小値が見つかる理由を視覚的に理解するで解説したのはxとyの二次関数であるということです。変数をa、bにするかx、yにするかだけの違いです。学校では2変数の二次関数というと変数をxとyにするのが一般的ですが、最小二乗法の式から来るとaとbが変数になります。xとyは与えられたデータで、定数となるからです。勾配を計算するさて、勾配降下法(最急降下法)では初期値(x0,y0)を適当に選んで、x方向には∂f(x,y)/∂xと逆方向に、y方向には∂f(x,y)/∂yと逆方向に少しずつ動かしていけば、f(x,y)の最小値に辿り着きました。今回は初期値(a0,b0)を適当に選んで、a方向には∂Q(a,b)/∂aと逆方向に、b方向には∂Q(a,b)/∂bと逆方向に少しずつ動かしていけば、Q(a,b)の最小値に辿り着きます。それでは∂Q(a,b)/∂aと∂Q(a,b)/∂bはどのように計算できるでしょうか?nが大きいとQ(a,b)が長い式になってしまうため、この偏微分は一見難しそうに見えますが、合成関数の微分と考えれば簡単です。なかけんの数学ノートこれを使うと、∂Q(a,b)/∂aと∂Q(a,b)/∂bは次のようになります。勾配を足し合わせるつまり、Q(a,b)も∂Q(a,b)/∂aも∂Q(a,b)/∂bも、10組のデータ(xi,yi)を代入した足し算になります。Excelで計算してみると、次のようになります。aとbは、取り合えずa=b=1としています。学習率を掛けてパラメータを更新するこのようにしてQ(a,b)と∂Q(a,b)/∂aと∂Q(a,b)/∂bは求まりますが、最急降下法ではaとbを少しずつ動かしていきます。その時に、わざわざこのシートで別に計算するのは不便ですので、1行でこの計算を行うことにします。aとbの初期値をa0=b0=10にして、これを1回目の更新とします。10-η∂Q(10,10)/∂bにより、aとbを更新します。ηは学習率で、0.001とします。最急降下法で学習する様子をExcelに実装この計算を1行ずつ行うために、次のようにExcelに入力します。1行が長いので、3つのスクリーンショットに分けています。1枚目クリックすると拡大します2枚目クリックすると拡大します3枚目クリックすると拡大しますこのスクリーンショットでは7回目の更新までしか載っていませんが、aとbが収束するまで延々と続けるとQ(a,b)が最小値になるaとbの近似値が求まります。その収束したかどうかの判定をJ列でやっています。aとb共に、一つ前の値と比べて0.000001以下しか変わっていなければ収束したと判定しています。今回の例では4,842回目の更新でa=1.95、b=3.37となって収束しました。学習率による収束の違いをExcelグラフで確認するグラフにすると次のようになります。このシミュレーションでは学習率を0.001にしましたが、これを小さくすると収束するまで時間がかかります。大きくすると早く収束しますが、やり過ぎると発散してしまいます。発散とはaやbの値が更新ごとに大きく上下して、どんどん振れが大きくなってしまうことです。今回の例では0.0017で発散してしまいました。η=0.0005まで小さくすると収束するまで8,960回もかかりました。このことから、いい感じの学習率ηの範囲は意外と狭いことが分かります。次に、初期値を変えてやってみましょう。a=b=0を初期値とすると、4,534回目で次のように収束しました。負の初期値も試してみましょう。a=-30、b=-20とすると、5,488回目で収束しました。このようにExcelで計算するとシートは大きくなってしまいますが、計算は一瞬で終わりますので、なかなか優れものだと思いました。残念ながら実務でこの方法は使われていないようです。今回の例ではサンプルデータが10個だけでしたが、現実には何百万個ものデータを使ってパラメータを推定することも珍しくありません。パラメータとは、今回の例ではaやbのことです。パラメータ更新のたびに何百万個のデータを計算することは割に合わないのです。そのための改良方法がいくつか知られています。こちらで解説しています。ロジギークよろしければシェアお願いしますTwitterFacebookLinkedInB!HatenaLINELINE確率的勾配降下法のアルゴリズムをExcelに実装して具体例を解いてみた。...再帰型ニューラルネットワーク(RNN)のBPTTをExcelに実装してみた。...【マルコフ連鎖】標準体重の人が太りすぎになるまで平均何年かかる?ある病院では毎年行っている健康診断で肥満度の統計をとっています。前回は3×3の9画素で〇✕を見分けるニューラルネットワークを作りました。...◆キーワードで探すイチローの安打数がポアソン分布にならず正規分布になる理由を考察してみた【マルコフ連鎖】標準体重の人が太りすぎになるまで平均何年かかる?待ち行列理論を応用して10分カットが儲かる仕組みを解明してみた。計算グラフモンテカルロ積分クラスタリングカーネルトリックPythonSimPy(離散事象シミュレーション)inventorize(在庫シミュレーション)SARIMAX(時系列解析)investpy(財務データ取得)PyPDF2(PDF操作)仕事や勉強の合間の息抜きに管理人ロジギークロジスティクス業界で6か国に勤務。