機械学習 はじめよう

第15回 分類問題ことはじめ

この記事を読むのに必要な時間:およそ 3 分

パーセプトロンの解き方

誤差関数が決まりましたので,あとはこれが最も小さくなるパラメータa,b,cを選べばよいだけです。どうすればできるでしょう。

線形回帰の誤差関数は,二次関数の多次元版(二次形式)という非常に扱いやすい形をしており,そのおかげで連立一次方程式を解くだけで最小点を容易に求めることができました。

一方,パーセプトロンの誤差関数はそれほど単純ではありません。

形を想像するのには(2)式の方が都合がいいのでこちらをじっとよく見ると,要はh(z)をずらしたり,のばしたり,反転したものを足しあげた形をしていることがわかります。

h(z)のグラフ

h(z)のグラフ

つまりパーセプトロンの誤差関数はあちらこちらでカクカクした形をしているわけです。これでは線形回帰のように簡単に最小点を求められそうにありません。

ここで,パーセプトロンの解くための実際の手順をまず見ておきましょう。このようにすれば解ける理由は次回説明します。

まず最初にパラメータa,b,cは適当に決めておきます。乱数を入れてもいいですし,(0,0,0)でもかまいません。最初に決めたパラメータをa0b0c0としましょう。

次に,パラメータa=aib=bic=ciを次の手順で更新していきます。

データの中からランダムに1点(xn,yn)を取り出し,f(x,y)に代入すると,現在のパラメータを用いた予測値として+1または-1が得られます。それが正解tnと一致すればOK,また別のデータを取り直します。

予測が正解と一致しなかった場合,次のようにパラメータを更新します。

そして新たなパラメータai+1bi+1ci+1を使って,また別のデータ点で同じ評価を行います。これをすべてのデータ点全体についてぐるっと一周行い,もう評価していない点がなくなってしまったら,またデータ全体に対して一点ずつ同じことを繰り返します。

この操作を十分多い回数繰り返せば,f(x,y)=sgn+(ax+by+c)が分類関数として働くようなa,b,cが得られるという寸法です。

この分離関数f(x,y)が+1と-1になる領域をそれぞれ塗り分けてみると,直線ax+by+c=0によって分けられることがわかります。

実際の学習結果例は次のようになります。

赤が+1,緑が-1のデータ

赤が+1,緑が-1のデータ

このように驚くほど簡単な手順で解けてしまうパーセプトロンですが,大きな弱点があります。

パーセプトロンがきれいに解けるのは,+1のラベルを持つデータ点と-1のラベルを持つデータ点に一本の直線で(2次元の場合。n次元の場合は(n-1)次元平面で)きれいに分離できる場合にほぼ限られるのです。この条件を「線形分離可能」と呼びます。

特に線形分離可能である場合は,実は先ほどの解法手順を繰り返すことでいつか必ずすべてのデータ点での予測値が正解と一致することも示されています(パーセプトロンの収束定理⁠⁠。

しかし線形分離可能ではないデータでは,どのようにパラメータを選んでもすべての予測が正解になることはありません。その場合でも「このへんだとだいたいいい感じ」という具合に切り分けてくれれば良さそうな気もしますが,評価するデータ点の順番によって全くバラバラの結果が得られてしまうのです。

試しにy=x2より上の点は+1,下の点は-1のラベルを持つデータに対して,パーセプトロンで学習した20通りの分類関数の分離面(ax+by+c=0)を描いてみたのが次の図です。このデータにパーセプトロンというのはかなり無理筋な組み合わせだとはいえ,ここまでバラバラな結果が出てきてしまうのはさすがに困ってしまいますよね。

バラバラな結果のグラフ

バラバラな結果のグラフ

一般の問題ではデータが線形分離可能であることはまずありませんので,パーセプトロンは残念ながら実用には向いていません。

しかしながら,パーセプトロンの解法手順は,他のモデルやアルゴリズムでも使われる有用なものなのです。次回はその解説を行います。

なお本連載では取り上げませんが,パーセプトロンのこういった弱点を克服した改良型パーセプトロンもいくつかありますので,興味のある方は"Passive Aggressive"などの手法を調べてみるとよいかもしれません。

著者プロフィール

中谷秀洋(なかたにしゅうよう)

サイボウズ・ラボ(株)にてWebアプリ連携や自然言語処理を中心に研究開発を行いながら,英単語タイピングゲーム iVocaをサービス提供している。

URLhttp://d.hatena.ne.jp/n_shuyo/
Twitterhttp://twitter.com/shuyo