SJS/2016/ex11 のロジスティック回帰を,次の2段階で改良しよう
SJS/2016/ex11 のロジスティック回帰を,次の2段階で改良しよう
クラス数を一般化しよう
特徴ベクトルが与えられたときに,これを \( K \) 通りのクラスのいずれかに識別したい.入力 \( \bm{x} \) に対して \( K \) 個の値 \( z_1,z_2,\dots , z_K \) を出力するしくみを用意して,\( z_k \) が,\( \bm{x} \) が \( k \) 番目のクラスに所属する確率の推定値となるように学習する識別器を考える.このとき,各 \( z_k \) を2クラスの場合の式そのままで計算することにすると,\( \sum_{k=1}^{K} z_k \) が 1 になる保証がないので,確率とみなして議論ができなくて都合が悪い.そこで,\( z_k \) が 0 から 1 の値をとり,かつ \( \sum_{k=1}^{K} z_k = 1 \) となるように,次のようにする.
この一つ目の式の形を,softmax という(最大値に対して1を,ぞれ以外に0を割りふる関数を考えると,それを0から1の実数をとるように「柔らかく」したものと考えられるから).実は,\( K = 2 \) の場合,\( z_1 + z_2 = 1 \) という制約をふまえて式を整理すると,シグモイドが出てきますが,省略.
次に,多クラス問題に対応した交差エントロピーを考える.まずは,正解クラスを表す教師信号を \( \bm{t} = (t_1, t_2, \dots , t_K )^{\top} \) という \( K \) 次元ベクトルとする.ただし,その要素は,いずれか一つだけが 1 で,他は全て 0 とする.例えば \( K = 3 \) で \( t_1 = t_3 = 0, t_2 = 1 \) なら,このデータは2番目のクラス所属,等.そして,\( h \) を次のように定義する.
これまた \( K = 2 \) としたら前回の式と同じになってることが確認できます.というわけで,複数の学習データが与えられた場合,それぞれに対する \( h \) の和が交差エントロピー \( H \) になります.
がんばって微分して学習則を導出しよう.実は「おんなじ形になるやん」ってオチですが. ヒント:
なので,
ですね.ここで \( \sum_{k=1}^{K} t_k \) は...だから右辺第2項はもう少し簡単になって....それから,
ですね.
実験
上記の結果を活かして,SJS/2016/ex12のプログラムの改良版を作ろう.これまではデータの一部を取り出して2クラス問題にしていたが,全部使って3クラス問題を解こう.