【画像分類】Softmax関数の意図と別の視点

# はじめに
機械学習を使う問題の代表例として画像分類問題があります. 現状, 画像分類は出力ニューロン特性関数をsoftmax関数とし, 誤差関数を交差エントロピー誤差とするところが固定化されているように感じます.
しかし, softmax関数は本当に妥当なのかということを疑問に思ったので, 考えてみたことを記事にしてみました.

# 学習データと教師データ
今ここに, $n$個の$d$次元データの集合$X\in\mathbb{R}^{n\times d}$があります. 人間は各学習データに対して1対1で対応するように$n$個の$c$次元教師データ$T\in [0, 1]^{n\times c}$を用意します($c$は分類するクラスの総数). このとき, 教師データはどのようにして決められるのでしょうか.
ラベルを付けた人が正解を決めて貼ってるだけといえばそこまでですが, じゃあ人間はそのクラスが正解であるということを, **どのような考えで**導き出しているかという話を考えてみます.

$X$内の$m\in\{1,\cdots, n\}$番目のデータ$\vec{x_m}$に対して, 対応する教師データ$\vec{t_m}$は回りくどい言い方をすれば, 次の2ステップになるでしょう.

**[Step1]**：各クラスに対して代表的な画像を思い浮かべることができる. データ$\vec{x_m}$に対して思い浮かべた特徴に似ているかどうかを考えて, 各クラス$k\in[1,\cdots, c]$ごと順々に類似度から**それらしさ**$\vec{p_m}=[p_{m1}, p_{m2}, \cdots, p_{mc}]$を決定する.

```math
\forall p_{mk}\in\vec{p_m}, p_{mk}\in[0\cdots1], p_{mk} = F_k(\vec{x_m})
```

**[Step2]**： **[Step1]** において決定した**それらしさ**を大小比較することにより, 最も大きいクラスが$1$, そうでないクラスが$0$になるよう(one-hot表現), 教師データ$\vec{t_m}$を決定する.
```math
\forall t_{mk}\in\vec{t_m}, t_{mk} = \left\{
    \begin{array}{rl}
       1 & \mathrm{if}\ \max(\vec{p_m}) = p_{mk}\\
       0 & \mathrm{otherwize}\\
    \end{array}
\right.
```

この**それらしさ**の値は尤度に対応され, 人間の決定する尤度は各クラスに属するデータの確率密度分布を正確に捉えると考えます. つまり, 一般のデータ$\vec{x}\in\mathbb{R}^d$について, 次が成立することになります.

$$\forall k\in\{1, \cdots, c\}, \int_{\vec{x}\in\mathbb{R}^d}F_k(\vec{x})=1$$

# 交差エントロピー誤差の2つの視点
## 交差エントロピー誤差
各入力$\vec{x_m}$に対して, モデル関数が$\vec{\tilde{p_m}}\in\mathbb{R}^{c}$を出力すると考えましょう.
誤差は各入力$\vec{x_m}$に対するモデル関数の出力$\vec{\tilde{p_m}}\in\mathbb{R}^{c}$と, 対応する教師データ$\vec{t_m}$の誤差$l(\vec{t_m}, \vec{\tilde{p_m}})$の総和により決まります. つまり, 入力データの集合$X$, 教師データの集合$T$, モデル関数の出力の集合$\tilde{P}$を用いて, 誤差の総和は$L(T, \tilde{P})$とできます.
分類タスクにおいては, 誤差関数は平均二乗誤差または交差エントロピー誤差が用いられることが多いですが, 近年では冒頭の通り次式の交差エントロピー誤差がより一般的かと思います.

$$L(T, \tilde{P}) = \sum_{m\in\{1...n\}}l(\vec{t_m}, \vec{\tilde{p_m}}) = \sum_{m=1}^{n}\sum_{k=1}^{c} -t_{mk}\log(p_{mk})$$

交差エントロピー誤差を用いる場合, 出力ニューロン特性関数にはsoftmaxが採用されます(実際にライブラリを用いる場合には, softmax関数が誤差計算側に組み込まれている場合もある).

## softmax関数という視点
softmax関数は, **クラスの軸に対して**値が大きいほど重みづけされるように確率の形に正規化する関数です. つまり, softmax関数の視点は1つのデータ$\vec{x_m}$が与えられたときに, その結果がどの選択肢に当てはまるかというのを確率として出していることになります.　この考え方は納得できますが, 一点だけ問題があります.
教師データの決定方法として, 「人間の設定した教師データは各クラスの(人間の感性による)確率密度関数の大小比較によりone-hot表現に変換されたもの」という仮定をしましたね. しかし, one-hot表現は確率的な意味を持たずあくまで「結果論としてのもの」です. ルビンの壺など見方によって複数通りに見えるものもありますが, どちらにも分類できそうというような確率密度関数の境界にあたるデータでは, one-hot表現という結果論は本当に使えるのでしょうか.
one-hot表現によるラベリングは, 境界を明確に分断してしまうことから過学習の原因にもなりえます. 現在ではsoft-labelingによる過学習抑制や蒸留などの方法もあります. 

## 尤度推定という視点
softmax関数は, **データの点ごとに結果のクラスを推定**しました. 冒頭の手順でいうところStep1.5にあたるような位置の見方をしていました. しかし, 教師データは連続的であった確率分布を「悪く整形」してしまっているという問題が起こってしまいました. では「悪い整形」の影響を受けないような方法はないのでしょうか.

先ほどの交差エントロピーの式について, 2つの和記号の位置を交換してみます.

$$L(T, \tilde{P}) = \sum_{k\in\{1...c\}}\sum_{m\in\{1...n\}} -t_{mk}\log(p_{mk})$$

このような見方をすれば, まず各クラス毎に交差エントロピー誤差を求めてその総和を取るという意味になります.
各クラス毎ということで, あるクラス$\bar{k}$に限定して誤差を考えてそれらを足し合わせる方針を立ててみます. 正解のクラスが$\bar{k}$となるパターンのみを$(X, T, P)$より抽出した$(X_k, T_k, P_k)$を用意すると, one-hot表現の特性上正解が$\bar{k}$であれば, $t_{i\bar{k}}=1$, その他の各クラス$k\in\{1, \cdots, c\}-\{\bar{k}\}$では$t_{ik}=0$となるので, クラス$\bar{k}$が分類結果となるようなデータの集合に対する誤差はクラス$\bar{k}$にのみ依存し, 次のようになります.
```math
L(T_{\bar{k}}, \tilde{P}_{\bar{k}}) = \sum_{i\in\{1...n\}} -\log(p_{i\bar{k}})
```

したがって, one-hot表現を利用することで交差エントロピー誤差による学習は尤度推定の並列処理に見ることができます. Step1の段階, 人間の決定した確率密度関数そのものを推定することができそうです.
この視点では, **クラスの点ごとにデータの尤度を推定**することになります.

## 新たな可能性
尤度推定的な見方をする場合は各出力ニューロンの出す信号が対応する各クラスの入力データに対する尤度になります.
出力ニューロン特性関数へのsoftmax関数の採用は, **クラスの軸の確率への正規化**が目的でした.
softmax関数の考え方に倣えば, 尤度推定では**データの全空間に対する確率への正規化**となります.
もっとも単純な方法は, 出力ニューロン特性関数をそのまま有名な確率密度関数とすることです. 代表例として標準正規分布があげられます.
ただし, これは確率密度を返すという制約に従うことが目的であり, 発火の概念に基づきません. 標準正規分布の場合には入力が$0$に近いほどいわゆる発火を行うことになりますが, 無理やりな理由付けだと思います.

他に理由をつけるとするならば, 次の2つあたりだと思います.
1. $z\rightarrow\pm\infty$において, $\Phi(z)\rightarrow0$である.(学習中にパラメータの極端な発散に影響しずらい.)
2. 思い描く特徴と入力の特徴の類似度により人間が「それらしさ」を決定づけると考えた場合には, 標準正規分布における入力が2つの間の変位を示し, それが発火の要因となるという考え方は比較的納得出来ること.

# おわりに
今回は分類タスクの活性化関数について考えてみました.
画像分類など, クラスにデータが属するという視点が自然に捉えられる場面ではこの考え方はうまくいきそうですが, 自然言語処理では「この答えを返す質問はこのような分布です」となるのでなんともまあという形で, やっぱりこれからもSoftmax関数を使うのかなと思います.