損失関数について その2

損失関数について その1 - 時給600円

これの続きです。その1では

  • 学習とは訓練データから最適な重みパラメータの値を自動で獲得する
  • 重みパラメータを修正、更新のために損失関数が存在する

というところまでメモった。

損失関数がどのような指標かというと、重みパラメータを用いた出力の答えと、正解の答えがどれだけ一致しているかの指標と自分は認識している。
例えば、3つのデータに対して重みパラメータAを用いた学習モデルの方の答えが2つ正解を出したとすると、1つ間違えている。
逆に重みパラメータBを用いた時、3つ正解を出したとすると、間違いは0。
この時、損失関数の値3つのうち全てに正解を出した重みパラメータBの方がAより小さい(間違いが少ないから)。

このように損失関数は間違いが少ないほど、値としては小さくなるようになっている。だから損失関数の値を小さくすることは重みパラメータが最適な値を取っているということに繋がる。だから損失関数の値が最小値を取るように重みパラメータを修正していく。

損失関数にはいくつか種類がある。

2乗和誤差

f:id:Owatank:20170628170816p:plain
yk はニューラルネットワークの出力で、tk は教師データを表す。k はデータの次元数。
出力と教師データ(正解データ)の各要素 k の差の2乗を計算して総和を求めて 2 で割っている。

交差エントロピー

f:id:Owatank:20170628171427p:plain
logは底がe(自然対数)
y = logx を考える。x = 1 の時、 y = 0になる。 xが0に近づくにつれてyの値は小さくなる。
上の画像の式に戻ると、出力 yk の値が大きければ大きいほど、E は 0 に近づくということになる。
マイナスがついているのは yk が 0に近づく時負の値が出るからそれを正に直すため?

もし訓練データが N個ある時はその N個の損失関数の和を指標とするので、こんな感じになる。
f:id:Owatank:20170628172803p:plain
y_nk では N個あるうちの n番目のデータのk次元目の値を意味する。
最後にN個で割っているので「平均の損失関数の値」を出していることになる。


どうやって損失関数が最小になるようなパラメータを見つけるのか。
重みパラメータCがあるとして、その値を増やせば今より損失関数の値が最小になるのか?というのは直感的にはわからない。。。
これに関しては関数の値を最も減らす方向を示してくれる 勾配 を用いる。微分。ただし勾配の指す方向の先が関数の最小値なのかは保証できないっぽい。
勾配を用いて最小値を探す方法を 勾配降下法 と呼ぶらしい。

物理の授業で勾配とかわかんねえ、、、何に使うん、、、と思って問題を解いていたが、ディープラーニングでのパラメータの修正に使うことができるなんて正直たまげた