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

HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学などをテーマに扱っていきます

機械学習を発展させる3つの立場

 

 

機械学習をしようという場合には大きく分けて3つの立場があるように思います。

 

1.機械学習手法の狙いを提案

2.機械学習手法に対する解法を提案

3.機械学習を使ってデータを解析

 

 

 

 

機械学習は最適化問題を解くということである

この視点に立ってみると、3つの分け方はしっくりくるでしょう。

教師があろうがなかろうが、生成的だろうが識別的であろうが、それらは全て何らかの最適化問題を解いて学習を行っています。その設定が違うだけ、そして設定が違うから解法も違うだけなのです。しかし、様々な機械学習手法を見たときに、それらがまるで全然別のものに見えてはいないでしょうか。

機械学習の研究は大きく分けて下の図のようになっています。

 

f:id:s0sem0y:20161104231801p:plain

 

もちろん機械学習の手法が提案される場合には、画像処理を行うために適したモデルの設定を行いたいという、応用面からのアプローチも多々あります。むしろそういうケースのほうが多いでしょう。

逆に、何に役立つかはわからないけども、「こういう設定のもとではこういう学習が行われる」と、純粋に学習の振る舞いを調べてみるという立場もあります(もちろん有用性の確認のために、多くの論文には簡単な実データへの適用例が掲載されている)。

 

どちらのアプローチでも構わない

実際には学習というものそのものを調べようと思ったものが、応用の世界で大活躍をすることもありますし、実問題を解くために考案されたものが、広く多くの分野に知れ渡ることもあります。

 

前者の例としてはニューラルネットワークです。これは非常に単純化された脳の神経回路のモデルから始まりました。これがどんな問題に適用できるかということよりも、あれほど単純な構成でも何かを学習できるということ自体が衝撃でした。その後、応用への研究も(苦しい道を潜りぬけながら)続いた結果、現在のディープラーニングブームを巻き起こしています。

 

後者の例としては主成分分析のような伝統的な手法です。統計学ではデータの相関を説明する重要な手法の1つですし、信号処理の分野では、信号を分離するというKL展開として知られています。

 

一旦全体像を把握してみる

機械学習が何をしようとしているのかを思い出してください。

データに何かを語らせようとしているのです。そしてどのように語らせるのかが手法によって違ってきます。その違いとは、どのようなモデル(仮説)を立てて、どのような学習(解法)を行うかというところに着きます。

そして機械学習では、モデルそのものが非常に複雑であったり、学習自体が工夫に満ち溢れているため、さも別々のモノのように見えてくるのです。でも実際には根本は同じです。

 

 

機械学習手法の3つの立場の流れ

機械学習手法の狙いの提案

ここでは誰もが聞いたことのあるサポートベクターマシンを例に取りましょう。

サポートベクターマシンはマージン最大化を狙いとしています。

この狙いを組み込むために準備すべき条件は一体何でしょうか。それを考えて評価関数を構築するのが最初の仕事です。

 

 

 

f:id:s0sem0y:20160808043146p:plain

 

この図では、青色と赤色の点を識別するために直線を一本引いています。

右の図と左の図、どちらも分けることはできていますが、未知のデータ(黒点)の分類結果が異なってきますね。「どちらが良い」のかは、多くの未知データに対して予測性能が良かったかを調べなければなりませんから、今は述べることができません。

 

サポートベクターマシンでは、手元のデータを分ける線を引くとき、その線がそれぞれのデータからなるべく離れることを狙いとしています。

 

つまり線形の式y={\bf w^Tx}+w_0を上手く作ってやって、データ点を分けたいのだが、その線形の式で現れる境界とデータ点との距離をなるべく離してやりたいということです。

この狙いは妥当なように感じますね。もしも境界がある一方のデータに寄り添っていたならば、そのデータは少しズレるだけで反対側に分類されかねませんから。

この狙いは、天下りですが以下の式で得られる\bf w\bf w_0によって達成することができます。

 

\arg \max_{{\bf w},w_0} \left( \frac{1}{|{\bf w}|} \min_n \left( t_n({\bf w^Tx_n}+w_0) \right) \right)

 

これが見事に性能の良い識別器を構成したために、サポートベクターマシンは一躍大流行しました。

 

s0sem0y.hatenablog.com

 

 

機械学習手法に対する解法の提案

先ほどの最適化問題を初見ですぐに解けますという人は中々いないでしょう。

狙いを達成する評価関数が獲得できても、それを上手く解けるとは限りません。従って解法を導くのも重要なテーマの1つです。

 

サポートベクターマシンの場合は、ラベルt_nの設定などを工夫することによって

 

t_n({\bf w^Tx_n}+w_0)\geq 1

 

の下で

 

\arg \min_{{\bf w},w_0} \frac{1}{2}|{\bf w}|^2

 

を解くという非常に単純な問題に帰着させることに成功しました。

更にサポートベクターマシンでは、データ\bf {x_n}を、非線形変換φ({\bf x_n})で変換したとしても同様に表現することができます。その場合は不等式制約が

 

t_n({\bf w^T}φ({\bf x_n})+w_0)\geq 1

 

と変更されるだけです。ここでφ()は好きに選ぶことができます。データ\bf xが直線で分離できない場合には、上手く変換して配置を変えてやることで、線形分離ができるようになるかもしれません。

そのような上手いφを考えるのは非常に困難です。なぜならばそれが何次元になるかもわからないですし、次元を増やせば計算量も増大します。

 

サポートベクターマシンに対しては、カーネル法という強力な手法によって、変換先での内積(スカラー)に相当するカーネル関数を考えるだけで非線形変換を含むことに成功しました。

 

s0sem0y.hatenablog.com

 

カーネル法の存在が、サポートベクターマシンの適用範囲拡大をしたと言っても過言ではありません。カーネル法は、その後、他の手法の解法にも用いられるようになりました。

 

機械学習を使ってデータを解析

サポートベクターマシンの応用は探せばいくらでも見つかります。

画像認識をしたり、生体信号から動作意図を識別したり、音声認識に用いることもできるでしょう。データ点が各クラス毎に分かれていれば(あるいは分かれるようなカーネルを見つけてしまえば)どんな問題にでも適用の可能性があるのです。

 

 

 

ニューラルネットワークの場合

単純パーセプトロン

ニューラルネットワークも、まずはモデルの考案がなされました。

神経回路のモデルです。非常に単純化されたモデルで学習を行うことができたということで、単純パーセプトロンは世界に衝撃を与えました。

評価関数は単純で、間違いの数が少ないほど良いというものです。偉大な研究も最初は少しずつ着実に歩みを進めてきたことがわかります。

 

解法も単純で、データ点を1つずつ与え、間違えたら少し修正、合っているならそのままにするというものでした。これだけの操作でも、線形分離可能な問題ならば、人間が可視化できない高次元なデータでも放り投げておけば自動で答えを見つけてくれるということが証明されています。

 

実問題への適用はほとんどされていません。線形分離可能な問題しか解けないというのは致命的でした。

 

多層パーセプトロン

層を重ねて活性化関数による非線形変換を中間層で行うことで、線形分離不可能な問題でも解けるようなモデルが考案されました。当初は入力層と中間層の間のパラメータは適当に設定しておいて、出力層だけ学習を行うという方向性でしたが、後に活性化関数に微分可能なものを用意し、微分の連鎖規則を用いる誤差逆伝播法という解法が発案され、再び脚光を浴びます。

 

しかし非線形変換をほとんど意識せず、さらに計算コストも食わないサポートベクターマシンの方が応用では受け入れられたというのはよく知られた事実です。

実際精度の方もあまり良くなく、多層構造では学習が上手く行かないことも見つかり、応用での姿も見られなくなりました。

 

畳み込みニューラルネット

視神経モデルを参考に提案されたネオコグニトロンの流れを組むニューラルネットです。

 

モデル化は当然神経回路の再現というところからでしたが、逆誤差伝播法はニューラルネット全体に対して衝撃的な発展を及ぼし、神経回路がそのように学習をしているかとは別に、用いられるようになります。

 

今では画像認識コンテストで活躍をし、一躍有名な機械学習の手法となっています。