ニュートラルネットワークの「学習」において重要な関数は「損失関数」である。
この関数は、人間でいう「幸せの指標」のようなデータの一つの基準になるものである。
人間は幸せの指標を元に人生を構築しようとするのと同じく、機械はこの損失関数を元に、適切なモデルを生成しようとする。
損失関数には様々あるが、一般的には「2乗和誤差」や「交差エントロピー誤差」が用いられる。
2乗和誤差
E = \frac{1}{2}\sum_{k}{(y_k - t_k)^2} \label{a}\tag{1}
y : ニュートラルネットワークの出力
t : 教師データ(訓練データ)
k : データの次元
を表す。
仮に、ある画像を「0 ~ 9」のどれかを判定するケースを考えるとする。
1つの画像に対して、ニュートラルネットワークは下記のように出力したとする。
y = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0]
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
上記の「y」はソフトマックス関数を通した後だと仮定すると、各項目の合計は「1」となる。
上記の例だと、「2」の確率が、60%だと示されていることになる。
tは「1」を正、「0」を誤だとした時の配列である。つまりtは「2」が正解であることを表している。
(※ 正解ラベルを「1」、それ以外を「0」で表す表記法を 「one-hot表現」という。)
(1)の式に戻ると、
t = [0, 0, 1, 0, 0, 0, 0, 0, 0, 0]
とし、
y1 = [0.1, 0.05, 0.6, 0.0, 0.05, 0.1, 0.0, 0.1, 0.0, 0.0] (2が正解だと思われる。)
y2 = [0.1, 0.05, 0.1, 0.0, 0.05, 0.1, 0.0, 0.6, 0.0, 0.0] (7が正解だと思われる。)
をそれぞれ計算すると、
E1 = 0.0975 (y1)
E2 = 0.5975 (y2)
となる。
損失関数が大きい方が、「性能が悪い」と判定されるので、y2よりもy1の方が教師データにより適合していると判定される。
交差エントロピー誤差
E = - \sum_{k}{t_k \log{y_k}}
y : ニュートラルネットワークの出力
t : 教師データ(訓練データ)
k : データの次元
を表す。
2乗和誤差のケースと同様に考えれば、
E1 = 0.510
E2 = 2.3025
となり、y2よりもy1の方が教師データにより適合していると判定される。
※ 交差エントロピー誤差は、t != 0の部分だけの計算で済む。
機械学習の学習とは
上記の関数を採用し、訓練データに対する損失関数を求め、その値をできるだけ小さくするようなパラメータを探し出すこと。
上記の例だと1つのデータに対する関数を書いているが、訓練データがN個あれば、N個の損失関数の和を指標とする。
E = - \frac{1}{N} \sum_{n}\sum_{k}{t_{nk} log{y_{nk}}}
t_nk : n個目のデータのk番目の値を意味する。
では、どうやってこの値を「小さくする」のか?
それは、次の記事で記載する「勾配法」である。