0
0

損失関数について

Posted at

ニュートラルネットワークの「学習」において重要な関数は「損失関数」である。
この関数は、人間でいう「幸せの指標」のようなデータの一つの基準になるものである。
人間は幸せの指標を元に人生を構築しようとするのと同じく、機械はこの損失関数を元に、適切なモデルを生成しようとする。

損失関数には様々あるが、一般的には「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番目の値を意味する。

では、どうやってこの値を「小さくする」のか?
それは、次の記事で記載する「勾配法」である。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0