機械学習といえばニューラルネット・ディープラーニングという印象の方も多いと思われます。実際、ニューラルネットはそのアーキテクチャによって様々な種類のデータをうまく扱うことができます。今回はニューラルネットに対して、いろいろなアーキテクチャを考えて、それがどの既存の手法に類似しているのか、そしてどのような相違点があるのかをまとめてみたいと思います。
統計的な分析を行っている人にとって、ニューラルネットを始めとする機械学習の手法は魅力的にも映る一方で、結局のところ何をどのように分析しているのかというのが分かりづらいかと思います。今回は機械学習を専門としないような人が、ニューラルネットの役割を理解できるような内容を目指してみたいと思います。
数理的な面は必要最小限にして、応用上心得ておくべきことを中心に書きます。
ニューラルネットの基本
前回の記事で、ニューラルネットに関する基本的な事柄をまとめました。
一応さらっとで良いので上で復習をしておくと、より理解が深まると思います。
上記のように、中間層を1つ持つニューラルネットワークの出力は以下で表されます。この式の導出は前記事で行っているので、わからない人は参考にしてください。
重回帰分析との比較
重回帰分析(じゅうかいきぶんせき)は、多変量解析の一つ。回帰分析において独立変数が2つ以上(2次元以上)のもの。独立変数が1つのものを単回帰分析という。
一般的によく使われている最小二乗法、一般化線形モデルの重回帰は、数学的には線形分析の一種であり、分散分析などと数学的に類似している。適切な変数を複数選択することで、計算しやすく誤差の少ない予測式を作ることができる。
yk=h2(∑Mj=0w(2)kjh1(∑Di=0w(1)jixi))yk
(Wikipedia引用)となっています。
ニューラルネットは重回帰分析を行う手法の1つとして見ることができます。
例えば(駅からの距離,築年数,広さ)という3次元データから、その物件の価格が決まるとしましょう。たくさんのデータから、その価格を決定づけている関数
価格 = 駅からの距離,築年数,広さ
を獲得したいというのが重回帰分析になります。
通常は最小二乗法や、分散共分散などの統計的パラメータを使って、このような回帰式を獲得しようとしますが、ニューラルネットでは、たくさんのデータ(駅からの距離,築年数,広さ)とそれに対応する価格をセットで与えることで、自動で回帰式を獲得します。
仮に、価格がデータの線形結合によって得られるとすれば、
価格
駅からの距離
築年数
広さ
の頭文字を取って変数を表すと、
として、を知りたいという問題になります。
これをニューラルネットで表現しようとするならば
といった具合になります。入力層から中間層へは、それぞれ一本ずつしか接続が無いようにすれば、上記のような線形回帰をニューラルネットで表現することができます。接続を切るというのは重みをにするということですから、接続を作っておいて、プログラム上では重みを
って設定すれば良いだけの話です。
中間層と出力層の活性化関数はいずれも恒等変換にしておきます。すなわち、なにも変化をさせずに次のノードへ渡すということになります。
これで単純な線形回帰問題をニューラルネットに学習させることができるようになります。
ニューラルネットは数式では以下のように表現されるものを、グラフィカルに取り扱うことで直感的に扱いやすくなっています。この部分も魅力の1つではあるでしょう。
で、とし活性化関数
を恒等変換とすれば、良いだけです。余裕あれば確認してみてください(簡単な変更も数式だとちょっとめんどくさいですね)。
ただ、この手の問題をニューラルネットで解くメリットは全くありません。普通に最小二乗法や主成分分析をした方が確実に速いです。ニューラルネットワークを使うのであれば、何らかの活性化関数を使わねば旨味が無いということを知っておいてください(あるいは多層化)。
ロジスティック回帰分析との比較
応用上注目しておくべきは、ロジスティック回帰分析(分類に使われる手法)についてです。
ロジスティック回帰分析は、上記で説明した線形回帰を行うニューラルネットの出力層の活性化関数をシグモイド関数に変更するだけで達成できます(モデルは同じになるが、その学習の方法は異なる)。
線形回帰では、
となっているものを
と、関数に入れるということになります。これはの値を出力するようにスケールを変換していることによって、出力を確率とみなせるというテクニックです。結果として、出力
を堺に何らかの分類に使えるという狙いがあります。(こう見るとえらくいい加減な方法に見えますが、ロジスティック回帰分析は統計的に2つの分類を行う上で最尤推定になっている)
ただ、足し算したものをスケール変換しているだけであり、線形分類でできない問題(図で表すと以下)を上手く解けるというわけではありません。
従ってニューラルネットに関して
このモデルで出力層をシグモイド関数にしただけでは、基本的にロジスティック回帰分析と程度の能力しか持ていないということです(むしろ、ロジスティック回帰の方が良いと思います。学習の方法が精密なので)。
ニューラルネットワークは中間層を増やして、更に何らかの非線形変換を設定でき、それだけで表現力が増します。ニューラルネットワークの中間層の活性化関数にも非線形変換を使うことで、曲線を使った分離も可能となるのです。
非線形変換を挟むことで、分離のための曲線を獲得するというイメージの一方で、実は中間層の段階では、データの配置を変更して最後の出力層で線形分離を行っているとみなすこともできます(下図)。
つまり分離曲線を得るというよりは、データを識別しやすいような別の表現をなんとか獲得しているというわけです。データの識別のしやすさというのは、もちろん正解が増えるような配置のことです。教師あり学習ですから、その配置は2次元ならば明らかです。通常は多次元で可視化ができないため、それを見出だすのは一般に困難ですね。カーネル法では、そのような上手い変換を陽に求めることなしに、変換先での距離を計るカーネル関数(内積のようなもの)によってこの問題を解決します。このカーネル法に相当する部分を、ニューラルネットでは中間層が担っていると思うと分かりやすいです。
ニューラルネットの問題点と克服法
ニューラルネットは、層を増やせばそれだけ活性化関数を設定できます。それに従い表現できる曲線や分離できる問題も増えていきますが、それは理論上のお話で、実際には学習が上手くいかず使い物になりませんでした。
要するに理論的には対象を表現しうるパラメータは存在するが、それを探す方法は知りませんということです。どんな最適化手法を考えても、これが応用で実り豊かな成果を出すことは当分ありませんでした。
層を厚くすれば厚くするほど、学習が困難になるのならば、層が薄いままで応用価値が見いだせないかと、あきらめずニューラルネットを研究していた人たちもいました。まず、ニューラルネットの中間層では、分離に有利なデータの表現が獲得されているかもしれないということに着目します。通常、2次元ならば分離に有利な表現を見ることができるため、多次元データを可視化するための次元圧縮手法(PCAやLDAなど)は様々提案されていましたが、ニューラルネットのような構造でこれをできないかと考えたくなります。
それがオートエンコーダです。そしてオートエンコーダを一層ずつたくさん作って重ねたものが積層オートエンコーダ(積層自己符号化器)になります。
歴史上はディープビリーフネットワーク(DBN)と呼ばれる生成モデルが先に生まれましたが、おそらく学習の便宜上は積層オートエンコーダから勉強をしたほうが良いと思います。
その方がニューラルネットからより自然に勉強ができるかと思います。
※現在事前学習に自己符号化器はほとんど用いられておりません。基本的にReLUを用いれば多層構造でもある程度上手く学習できることが知られています。ただしLadderNetworkのような自己符号化器の考えを突き詰めまくった素晴らしい派生技術もあることは頭に入れておいていいでしょう。
主成分分析のような伝統的な次元圧縮手法とオートエンコーダの比較記事
=。
tdeh2(∑Mj=0は
w(2)kjh1(∑Di=0w(1)jixi))