Cucco’s Compute Hack

コンピュータ関係の記事を書いていきます。

複数の2クラス分類の一括学習

タイトルでは、わけがわからないと思うが、
1種類のデータに対して、2クラス分類問題が複数ある場合の学習。
整数dに対して、2の倍数かどうかと、3の倍数かどうか、・・・を例に学習してみた。

訓練データ形式

x : 8桁のビット整数。アンダーバー2つは、xベクトルの中での次元の番号。
y0:2の倍数かどうか。
y1:3の倍数かどうか。以降5,7,11の倍数かどうか。

x__0,x__1,x__2,x__3,x__4,x__5,x__6,x__7,y0,y1,y2,y3,y4
0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,0,0,0,0,0,0
0,0,0,0,0,0,0,1,0,0,0,0,0
0,0,0,0,0,0,1,0,1,0,0,0,0
0,0,0,0,0,0,1,1,0,1,0,0,0
0,0,0,0,0,1,0,0,1,0,0,0,0
0,0,0,0,0,1,0,1,0,0,1,0,0
0,0,0,0,0,1,1,0,1,1,0,0,0
0,0,0,0,0,1,1,1,0,0,0,1,0
0,0,0,0,1,0,0,0,1,0,0,0,0
0,0,0,0,1,0,0,1,0,1,0,0,0
0,0,0,0,1,0,1,0,1,0,1,0,0
0,0,0,0,1,0,1,1,0,0,0,0,1

f:id:Cucco:20190530231038p:plain
学習結果
f:id:Cucco:20190530231110p:plain
ネットワーク設計
f:id:Cucco:20190530231354p:plain
学習結果

所見
  • BatchNormalization はあったほうが収束が早い。
  • ReLUは収束早い。(Sigmoidに比べて)
  • ノード数を減らして、段数を増やすより、ノード数を増やしたほうが精度が高い(今回はノイズなしだから??)
  • 分岐前のノード数は、分岐数の2倍以上あったほうが良い(?)