機械学習で一番重要な要素は言うまでもなく学習です。
学習に対するイメージは各々あると思いますが、実際にソースコードにもしくは数式に落とし込んだ時
私たちは実際の手順と、なぜ学習をするのかといったロジックを正確に説明できるでしょうか?
次節以降の具体的なアルゴリズムを俯瞰で見ることのできるように、 本節では、学習のあらましや手順に対する理解を深めていきます。
損失
モデルと関数の近似度を図るために、モデルの入出力と教師データの相違度を指標にします。
この相違度の事を損失といいます。
もちろん近似したい関数と、教師データの損失は0となります。
つまり、モデルが示す損失は、小さければ小さいほどよく近似できているといえそうです。
損失関数(誤差関数)
損失を計算する関数のことを損失関数と言います。
損失関数はモデルの評価関数でもあり、色々な関数が使われています。
ニューラルネットワークで使う誤差関数は、以下の二つの条件を満たせばどのような関数でも構いません。
- 連続・微分可能であること
- 損失が少ない(と考えられる関数)ほど小さな値となること
二乗誤差
二乗誤差とは、モデルと教師データの差を二乗したものです。
二乗することで、正負の場合分けしなくて良いので簡潔に記述できるメリットがあります。
教師データが (1,3,5) モデルが予測した出力が (2,2,5) の時
損失Lは \((1-2)^2+(3-2)^2+(5-5)^2 = 2\) となります。
モデルの出力が教師データと一致した時に0となることを確認してください。
二乗誤差は回帰問題で利用されることが多いです。
クロスエントロピー
クロスエントロピーとは、モデルの出力の対数をとったものと教師データを掛け合わせたものです。 教師データとモデルの出力は[0.0,1.0]の範囲の数値に正規化されていることが前提であり、その範囲内では勾配が大きくなるため学習速度が速くなるというメリットがある。 モデルの出力を[0.0,1.0]に正規化するために、出力層の活性化関数はsoftmax関数が使われる。
\[L(x,x^{\prime}) = -\sum_{i} \Bigl\{x_{i} log(x^{\prime}_{i}) - (1-x_{i})(1-log(x^{\prime}_{i}))\Bigr\}\] クロスエントロピーは分類問題で利用されます。 分類問題では教師データは一つの要素だけ1.0となるone-hot-vectorが利用されるので、実質 \(L(x,x^{\prime}) = -\sum_{i} x_{i} log(x^{\prime}_{i})\)となります。
教師データが (1.0,0.0,0.0) モデルが予測した出力が (0.8,0.2,0.0) の時 損失Lは \[1*log0.8+0*log0.2+0*log0.0 = log(0.8) = -0.097\] となります。 モデルの出力が教師データと一致した時に0となることを確認してください。
クロスエントロピーは分類問題で利用されることが多いです。
まとめ
- ニューラルネットワークは関数であり、その近似能力の評価は損失関数で求められる。
- 学習とは損失が小さくなるようにモデルのパラメータを探索する事である。
- 回帰問題では二乗誤差、分類問題ではクロスエントロピーがよく用いられる。