分類問題の考え方
よく巷にある画像の分類、ドキュメントのカテゴリ分けなどがあるが、それらは結局最終的には同じ出力形式になります。
それは以下のように、出力層で分類したいクラスの数値のユニットの数と同等になります。
例えば・・・ポジネガ判定はポジティブ、ネガティブの2つの値、MNISTは0-9などです。
ネガポジなどは実際の出力層は以下のような数式で表されます。
$$
f(x)=(0.4,0.6)^T
$$
ここでポイントなのは全ての項目を足すと1になるということです。
なので出力層ではそのそのまま確率を出すことが可能になります。
シングルラベルの場合
ここで言う確率とはそのデータが必ずどれか1つに入っている場合であり、他方が高くなるともう片方が低くなってしまいます。
Softmax関数
これを実装するにはSoftmax関数を使います。
$$
y_i = \frac{\exp(a_i)}{\sum_j^D \exp(a_j)}
$$
これは以下のように計算できますので、
$$
\sum_i^D y_i = \frac{\sum_i^D \exp(a_i)}{\sum_j^D \exp(a_j)}=1
$$
のように和が1となります。
交差エントロピー
これを損失関数として扱う場合には交差エントロピーを使います。
F.softmax_cross_entropyです。
$$
E=-\sum_n^N \sum_i^D t_{ni} \log y_i
$$
マルチラベルの場合
上記のシングルラベルの方法だと、どちらかの数値が高くなると必ず他の数値が下がります。
そのため、答えが複数あるようなものには使えません。
例えば・・・一般のニュース記事などで、タグ付けをする場合、「経済」、「政治」など複数のラベリングが必要になるとき
このときは別の関数を使うことになます。
また、分類問題でも「その他」というものが存在する場合もこの手法が使えます。未知のものというのは非常に学習させるのは難しいので。
その際にはシグモイド関数を使うことになります。sigmoid_cross_entropyです。
シグモイド関数を使うことにより、一方的な数値の偏りがなくなります。
次は具体例で説明しようと思います。