ななめよみ・高卒でもわかる機械学習(2)

f:id:blackawa:20171208200559p:plain

CouseraのMachine Learningコース受講前に日本語でざっくり情報を入れるために、高卒でもわかる機械学習 (0) 前置き | 頭の中に思い浮かべた時にはを読む。

今回はその2から。 パーセプトロンなるものについて解説するらしい。

単純パーセプトロン

前回学んだ、メールがスパムかどうかを判定するグラフを指す。 複数の入力に重みをかけあわせて、結果が0より大きければ1を返し、0以下なら0を返す。

f:id:blackawa:20171211093140p:plain

これがニューラルネットワークの基本単位。 そしてこの「重み」をベクトルにして自動計算するのが機械学習というわけか。

どうやって重みを更新するのか?

その手順は、 - 最初はランダムな値を設定する - その重みを使って教師データを解いてみる - 間違いに対して、正しそうな方向に重みを微修正してリトライ - 繰り返し

である。

まずある関数がどれくらい教師データに対して期待はずれだったかを表す「損失関数」を想定する。 この関数の最小値を取れれば、そいつが単純パーセプトロンの最も期待どおりに振る舞う重みだと判定できる。

最小値を求めるためには、今の座標での関数の傾きを求め、それが正なら小さく、負なら大きくなるように少しずつ調整していくと良い。 (とはいえこれだと、谷が複数ある損失関数が書ける場合に失敗する気がする。)

この「少しずつ」の割合はそのままだと大きすぎて収束しないので「学習率」と呼ばれる定数をかけあわせてうまく収束するように調整する。

これを勾配降下法と呼ぶ。

これを使って重みを微調整した結果、最終的に重みの更新が全くなくなれば学習が終了する。

出力する

勾配降下法を使って重みを調整し学習したモデルは、与えられた入力に対して何か別の値を出力する。 たとえばスパム判定なら1 or -1、みたいな。 「○○らしさ」を数値化したものを入力に使って、外部に公開する値を生成する関数を「活性化関数」と呼ぶ。

スパム判定は二値判定であり、スパムなら0より大きく、そうでないなら0より小さい値がモデルから返るので、 - モデルの返却値 >= 0 ならば 1 - モデルの返却値 < 0 ならば -1

となる関数を定義するとわかりやすい。

多分多層パーセプトロンっていうのは、神経回路みたいに単純パーセプトロンを何層も積み重ねて活性化関数で出力された値を次のパーセプトロンに引き継ぐモノなんだろうな。

多層パーセプトロン

単純パーセプトロンにはできないことがあって、それがXOR問題である。つまり、単純に1本のグラフで分けられないような集合に対しては何もできないのだ。 これは前に学んだ言葉でいう「線形識別不可能」なデータだといえる。

これを解決するのが多層パーセプトロンである。 XORに代表される線形識別不可能なデータは、線形識別可能な関数を複数個組み合わせることで実現できる。 こうして積み重ねられた複数の単純パーセプトロンを組み合わせたものが、多層パーセプトロンである。

この多層パーセプトロンにおいて、最初の層を入力層、最後の層を出力層、そして間のすべてを中間層と呼ぶ。

ではこの重みはどう計算するのかだが、ここから先は計算式が多すぎて理解できない。 今回は雰囲気を知るのが目的なので、微積分・ベクトルの知識を仕入れてリトライすることとして読み飛ばす。 ただ、多層パーセプトロンの重みを更新するためには「逆伝播」と呼ばれる方法を使うことはわかった。つまり計算時は入力層から順番に計算を進めるが、重みの更新時は出力層から順番に更新していくらしい。