読者です 読者をやめる 読者になる 読者になる

"機械学習","信号解析","ディープラーニング"の勉強

"機械学習","信号解析","ディープラーニング"について、それぞれ勉強しながらブログにまとめていきます。テーマは気分によってバラバラかもしれません。

ニューラルネットの表現力と回帰分析

機械学習 ディープラーニング

機械学習といえばニューラルネット・ディープラーニングという印象の方も多いと思われます。実際、ニューラルネットはそのアーキテクチャによって様々な種類のデータをうまく扱うことができます。今回はニューラルネットに対して、いろいろなアーキテクチャを考えて、それがどの既存の手法に類似しているのか、そしてどのような相違点があるのかをまとめてみたいと思います。

統計的な分析を行っている人にとって、ニューラルネットを始めとする機械学習の手法は魅力的にも映る一方で、結局のところ何をどのように分析しているのかというのが分かりづらいかと思います。今回は機械学習を専門としないような人が、ニューラルネットの役割を理解できるような内容を目指してみたいと思います。

数理的な面は必要最小限にして、応用上心得ておくべきことを中心に書きます。

 

 

 

ニューラルネットの基本

前回の記事で、ニューラルネットに関する基本的な事柄をまとめました。

s0sem0y.hatenablog.com

一応さらっとで良いので上で復習をしておくと、より理解が深まると思います。

f:id:s0sem0y:20160522001904p:plain

 

上記のように、中間層を1つ持つニューラルネットワークの出力yは以下で表されます。この式の導出は前記事で行っているので、わからない人は参考にしてください。

 

y_k=h_2 \left( \sum_{j=0}^{M} w_{kj}^{(2)} h_1{\left( \sum_{i=0}^{D} w_{ji}^{(1)}x_i \right)} \right)

 

重回帰分析との比較

重回帰分析(じゅうかいきぶんせき)は、多変量解析の一つ。回帰分析において独立変数が2つ以上(2次元以上)のもの。独立変数が1つのものを単回帰分析という。
一般的によく使われている最小二乗法、一般化線形モデルの重回帰は、数学的には線形分析の一種であり、分散分析などと数学的に類似している。適切な変数を複数選択することで、計算しやすく誤差の少ない予測式を作ることができる。

yk=h2(∑Mj=0w(2)kjh1(∑Di=0w(1)jixi))yk

(Wikipedia引用)となっています。

 

ニューラルネットは重回帰分析を行う手法の1つとして見ることができます。

例えば(駅からの距離,築年数,広さ)という3次元データから、その物件の価格が決まるとしましょう。たくさんのデータから、その価格を決定づけている関数

 

価格 = f(駅からの距離,築年数,広さ)

 

を獲得したいというのが重回帰分析になります。

通常は最小二乗法や、分散共分散などの統計的パラメータを使って、このような回帰式を獲得しようとしますが、ニューラルネットでは、たくさんのデータ(駅からの距離,築年数,広さ)とそれに対応する価格をセットで与えることで、自動で回帰式を獲得します。

仮に、価格がデータの線形結合によって得られるとすれば、

価格Value

駅からの距離Distance

築年数Year

広さSize

の頭文字を取って変数を表すと、

 

V=w_0+w_1D+w_2Y+w_3S

 

として、w_i,i=1,...,3を知りたいという問題になります。

これをニューラルネットで表現しようとするならば

 

f:id:s0sem0y:20160522205736p:plain

 

といった具合になります。入力層から中間層へは、それぞれ一本ずつしか接続が無いようにすれば、上記のような線形回帰をニューラルネットで表現することができます。接続を切るというのは重みを0にするということですから、接続を作っておいて、プログラム上では重みを0って設定すれば良いだけの話です。

中間層と出力層の活性化関数はいずれも恒等変換にしておきます。すなわち、なにも変化をさせずに次のノードへ渡すということになります。

これで単純な線形回帰問題をニューラルネットに学習させることができるようになります。

ニューラルネットは数式では以下のように表現されるものを、グラフィカルに取り扱うことで直感的に扱いやすくなっています。この部分も魅力の1つではあるでしょう。

 

y=h_2 \left( \sum_{j=0}^{M} w_{j}^{(2)} h_1{\left( \sum_{i=0}^{D} w_{ji}^{(1)}x_i \right)} \right)

 

で、w_{ji}^{(1)}=1 (if  i=j)   w_{ji}^{(1)}=0 (if  i≠j)とし活性化関数h_1,h_2を恒等変換とすれば、良いだけです。余裕あれば確認してみてください(簡単な変更も数式だとちょっとめんどくさいですね)。

 

 

ただ、この手の問題をニューラルネットで解くメリットは全くありません。普通に最小二乗法や主成分分析をした方が確実に速いです。

ニューラルネットワークを使うのであれば、何らかの活性化関数を使わねば旨味が無いということを知っておいてください。

 

ロジスティック回帰分析との比較

応用上注目しておくべきは、ロジスティック回帰分析(分類に使われる手法)についてです。

ロジスティック回帰分析は、上記で説明した線形回帰を行うニューラルネットの出力層の活性化関数h_2をシグモイド関数に変更するだけで達成できます。

しかしロジスティック回帰分析は線形分離しかできません。

図で表すと、

 

f:id:s0sem0y:20160522212549p:plain f:id:s0sem0y:20160522212611p:plain

 

 

f:id:s0sem0y:20160522205736p:plain

 

このモデルで出力層をシグモイド関数にしただけでは、基本的にロジスティック回帰分析と同じように線形分離しかできないという問題は解決されません。

通常非線形な分離を行なう場合には、赤丸と青丸それぞれについて統計パラメータを推定して分布を個々に獲得したり、あるいはカーネル関数などを導入して非線形性を有する判別法を編み出さねばなりません。

しかし、ニューラルネットワークは中間層にも何らかの非線形変換を設定でき、それだけで表現力が増します。ニューラルネットワークの中間層の活性化関数h_1にも非線形変換を使うことで、曲線を使った分離も可能となるのです。

非線形変換を挟むことで、分離のための曲線を獲得するというイメージの一方で、実は中間層の段階では、データの配置を変更して最後の出力層で線形分離を行っているとみなすこともできます(下図)。

つまり分離曲線を得るというよりは、データを識別しやすいような別の表現をなんとか獲得しているというわけです。データの識別のしやすさというのは、もちろん正解が増えるような配置のことです。教師あり学習ですから、その配置は2次元ならば明らかです。通常は多次元で可視化ができないため、それを見出だすのは一般に困難ですね。カーネル法では、そのような上手い変換を陽に求めることなしに、変換先での距離を計るカーネル関数(内積のようなもの)によってこの問題を解決します。このカーネル法に相当する部分を、ニューラルネットでは中間層が担っていると思うと分かりやすいです。

 

f:id:s0sem0y:20160522213416p:plainf:id:s0sem0y:20160522213556p:plain

 

ニューラルネットの問題点と克服法

ニューラルネットは、層を増やせばそれだけ活性化関数を設定できます。それに従い表現できる曲線や分離できる問題も増えていきますが、それは理論上のお話で、実際には学習が上手くいかず使い物になりませんでした。

要するに理論的には対象を表現しうるパラメータwは存在するが、それを探す方法は知りませんということです。どんな最適化手法を考えても、これが応用で実り豊かな成果を出すことは当分ありませんでした。

層を厚くすれば厚くするほど、学習が困難になるのならば、層が薄いままで応用価値が見いだせないかと、あきらめずニューラルネットを研究していた人たちもいました。まず、ニューラルネットの中間層では、分離に有利なデータの表現が獲得されているかもしれないということに着目します。通常、2次元ならば分離に有利な表現を見ることができるため、多次元データを可視化するための次元圧縮手法(PCAやLDAなど)は様々提案されていましたが、ニューラルネットのような構造でこれをできないかと考えたくなります。

 

それがオートエンコーダです。そしてオートエンコーダを一層ずつたくさん作って重ねたものが積層オートエンコーダ(積層自己符号化器)になります。

歴史上はディープビリーフネットワーク(DBN)と呼ばれる生成モデルが先に生まれましたが、おそらく学習の便宜上は積層オートエンコーダから勉強をしたほうが良いと思います。

その方がニューラルネットからより自然に勉強ができるかと思います。

 

=。

tdeh2(Mj=0は

w(2)kjh1(Di=0w(1)jixi))