非線形領域をlinear classifierと2層Neural Networkで分類してみる

3種のラベルのうち1種が付与されている点列データを、
linear classifierと2層NNでそれぞれ分類させてみる。

Stanfordのオンライン教材CS231n Convolutional Neural Networks for Visual Recognitionを参考にしている。

Linear Classifier

入力データとパラメータ

非線形な領域をつくるように点群を作成 1種ごとに100点の訓練データがある。

f:id:yusuke_ujitoko:20170115185022p:plain

入力データに対して、重み{W}バイアス{b}を施し、

f:id:yusuke_ujitoko:20170116214140p:plain:w500

Softmax関数を出力とした。
Softmax関数なので、交差エントロピー誤差を最小にするようなパラメータをSGDで求めた。

分類結果

training dataに対して、正しく分類できたかを評価すると56%という結果となった。
(test dataを分けて作っていなことに注意)
下図でそれが一目瞭然だ。

下図の背景の色は、linear classifierで領域全体を3種に分類した結果領域を示しており、
点群は入力データで、その色は種類を指している。

背景と点の色が一致していれば、分類成功であり、
不一致であれば、上手くいっていないことを示している。

当然ながら、Linear Classifierの名の通り、
領域を線形分類しているため、非線形な入力データには対応できていない。 f:id:yusuke_ujitoko:20170115185345p:plain

2層NeuralNetwork

基本的な方針はLinear Classifierのときと同じ。
層が増えるのでforward passとbackpropagationの計算が倍になる。

入力データ

f:id:yusuke_ujitoko:20170115212625p:plain

ネットワークの構成

f:id:yusuke_ujitoko:20170122000700p:plain:w500

注意点としては、

  • regularization lossの計算で、二層分の重みを加えること
  • forward passでReLU関数で値を0にされた項は、backpropのときに勾配を0にすること

分類結果

training dataに対して、正しく分類できたかの評価は100%となった。 f:id:yusuke_ujitoko:20170115220515p:plain

分類領域の変化

NNを学習させる過程で、領域がぐにょぐにょ動く様子は面白い。 f:id:yusuke_ujitoko:20170115212906g:plainyoutube:https://www.youtube.com/watch?v=yGihMqZZ13w&feature=youtu.be

Loss functionの推移

f:id:yusuke_ujitoko:20170115212615p:plain

Accuracyの推移

f:id:yusuke_ujitoko:20170115212608p:plain