ニューラルネットワークと最小二乗法の違いについて考えてみた
ニューラルネットワークと最小二乗法は、”損失関数(二乗和誤差)が最小となる重みを探す”という点で似ているように感じ、違いをはっきりと理解したいと思ったため、両者の違いについて自分なりに考察してみました(機械学習初心者なので間違いがあるかもしれません)。
考察のために作成したプログラムはGithubに置きます。フレームワークはchainerを利用しています(chainerはメジャーアップデートが終了してしまいましたね。勉強目的で使っているので気にしないことにします^^;)。
ronron-gh / neural-regress
ニューラルネットワークで回帰問題を解く場合
次のグラフに示すサンプルデータの近似関数を導出する回帰問題を考えます。
まずは、最小二乗法は使わずに、ニューラルネットワークで解いてみます。非線形の問題なので次の図のように中間層を1層設けました。
余談ですが、中間層が1層だけでも、ニューラルネットワークはあらゆる非線形関数を表現できます。これを普遍性定理というようです。以下のWebページで直感的にイメージできる形で説明されています(「ニューラルネットワークと深層学習」というオンライン書籍の翻訳のようです)。
ニューラルネットワークと深層学習
それでも、層を深くしたディープラーニングが注目されているのにはいろいろと訳があるようです(自分も勉強中のため、これ以上はもっと詳しくなってから書きます^^;)
結果は次のグラフのようになりました。中間層のニューロン数が増えると表現力が増していきます。
最小二乗法で回帰問題を解く場合
それでは、最小二乗法で解く場合を考えます。最小二乗法ではまずどんな関数で近似するかを決める必要があります。ここでは次のような三次関数で近似することにします。
f(x) = a3x3 + a2x2 + a1x + a0
最小二乗法ではサンプルデータとf(x)の二乗和誤差が最小となる係数a0~a3を求めることになります。表計算ソフトで最小二乗法を実行した結果を次のグラフに示します。
最小二乗法のアルゴリズムについては説明しませんが、自分が参考にしているWebページを紹介させていただきます。(Webで二次以上の関数の最小二乗法について説明しているのは、自分が知っている中ではここだけです)。
ITエンジニアの数学 最小二乗法
このように、最小二乗法ではまず三次関数で近似できると仮定していますが、ニューラルネットワークではそのような仮定はしないため、両者は回帰問題へのアプローチの仕方が違います。
ニューラルネットワークで最小二乗法と同じアプローチを取ってみる
もう少し踏み込んで、今度はニューラルネットワークで最小二乗法とまったく同じアプローチを取るとどうなるかを考えてみました。それが次のニューラルネットワークです。
このように、最小二乗法は中間層なしで表現できました。結果は次のグラフの通り、先の表計算ソフトと同じような結果が得られました。このようにニューラルネットワークで表現すると、最小二乗法は実は(三次関数近似であっても)中間層なしで表現できるため、線形の問題を解いているに過ぎないということがわかります。
念のため補足しますが、ニューラルネットワークは複雑な問題に対応するために、損失関数(二乗和誤差)が最小となる重みの算出に勾配降下法を用いているため、計算時間は最小二乗法と比べ物にならないくらい大きくなります。一方、最小二乗法は解析的に二乗和誤差関数を偏微分して、勾配=0となる重みを求めるため高速です(最小二乗法の詳細は先に紹介したリンクを参照ください)。
まとめ
最小二乗法とニューラルネットワークの違いについて、自分なりに考察しました。最小二乗法は、ニューラルネットワークで解くことを考えると、線形の回帰問題を解くことに帰着します。一方ニューラルネットワークは普遍性定理により、どんなに複雑な非線形関数でも表現できるというポテンシャルを秘めています。
ゼロから独学で学び始めると、このような基本的な部分の理解にたどり着くまでに結構な時間がかかったため、記事にしてみようと思いました(どこか間違っていたらすみません)。