Softmax関数は多クラス分類問題に使用される。最終層の出力を受け取り、各クラスについて入力が与えられた下での条件付き確率を計算する。
誤差関数には交差エントロピー誤差(cross entropy error)を用いる。交差エントロピーではone-hot表現で与えられる教師データを用いて、誤差を計算する。
多クラス分類では、マルチヌーイ分布(multinoulli distribution)から得られる確率:
を考える。
ただし、は対数オッズ比:
この時、は教師データによって与えられる確率を示す。理由は以下の通り。
まず、式(1)の最後の式における右肩は:
より、
よって、式(1)の最後の式は
と、確かに確率を示していることがわかる。
更に、対数オッズ比(2)について:
両辺でについて和を取ると、全確率の法則から:
これを再び対数オッズ比の式(2’)に代入すると、
これを利用して各クラスの確率を求める関数:
がsoftmax関数である。
対数オッズ比を線形関数でモデル化:
したものを考えれば、マルチヌーイ分布(1)に対し個の入力と教師データを利用して、パラメータについて最尤推定を行うことで、予測の確率分布を真の確率分布に近づけることができる。
すなわち、尤度関数:
を最大化すればよく、これは交差エントロピー:
を最小化することと同義である。故に、交差エントロピー誤差が使用されるのである。
交差エントロピー誤差は予測の確率分布と真の確率分布との距離を求めている。
確率分布の平均情報量(Shannon entropy):
を利用して、予測の確率分布から真の確率分布への距離(分布の近さ)をKL情報量(Kullback-Leibler divergence):
で計算することができる。
これは、
となるが、第1項は真の確率分布のみで構成されており、パラメータによる変化がないから、KL情報量を最小化することは第2項:
を最小化することと同義である。これが交差エントロピーであり、実際、予測の確率をsoftmaxから得られる予測確率()、真の確率を教師データ()と見なせば:
と、(3)式と一致することが確かめられる(であるから)。
すなわち、交差エントロピーを最小化することは、KL情報量の下で与えられる2つの確率分布の近さを最小化することと同義である。
input:
formula:
output:
input:
formula:
output:
input:
formula:
ただし、上のはクロネッカーのデルタ。これをまとめると以下になる。
output:
import tensorflow as tf
# softmaxの実装
logits = tf.layers.dense(
inputs=z, # z.shape = (column(i))
units=K
)
predictions = {
"classes": tf.argmax(input=logits, axis=1),
"probabilities": tf.nn.softmax(logits, name="softmax_tensor")
}
# cross entropy errorの実装
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)