【DeepLeaning】損失関数としてよく使われる「クロスエントロピー誤差」と「2乗和誤差」

Deep Learning とは何なのか・・・まったく知らない状態から挑戦してみたいと思います!

損失関数とは

損失関数(loss function)とは、学習したモデルが予測した結果と正解の結果の誤差を定量化するための関数です。
つまり、モデルの出力と正解の出力の差を測り、その差が小さいほど損失関数の値は小さくなります。

損失関数は、学習中に最適化されるべきパラメータの更新方向を決定する上(指標)で非常に重要な役割を果たします。
損失関数の値を最小化するようにパラメータを更新することでモデルの予測精度を向上させることができます。

使用シーン

分類問題

損失関数としてはクロス(交差)エントロピー誤差が一般的に使用されます。

クロスエントロピー誤差は、モデルが予測した確率分布と正解の確率分布の差を測るための関数です。

以下のような数式になっているようです。

ふむ・・わからない😆

調べてみました。

  • N:分類問題で使用するデータ数を表します。
    手書き数字の画像を認識する場合、1つの画像が1つのデータに相当します。
    つまり、N画像の枚数になります。
  • C:分類問題で分類するクラスの数を表します。
    手書き数字の場合、10個の数字(0~9)を分類するため、C=10となります。
  • y_{ij}正解ラベルを表します。
    i:分類問題で使用するデータの番号(1~N)を表します。
    j:分類するクラスの番号(1~C)を表します。
    つまり、y_{ij}は、i番目のデータがj番目のクラスに属するかどうかを表します。
    例えば、ある手書き数字が「5」であれば、y_{i,5}=1、y_{i,j}=0(j ≠ 5)となります。
  • hat{y}{ij}:モデルが予測した確率を表します。
    ijは、y{ij}と同様にデータの番号とクラスの番号を表します。
  • hat{y}{ij}i番目のデータがj番目のクラスに属する確率を表します。
    ある手書き数字が「5」である確率が0.8であれば、hat{y}{i,5}=0.8となります。
  • log:自然対数を表します。
    自然対数は、eを底とする対数です。
    log xは、eを何乗したらxになるかを表します。
  • sum:総和を表します。
    sum_{i=1}^{N}は、i=1からi=Nまでのすべてのiに対して、それぞれの項を足し合わせることを表します。
    sum_{j=1}^{C}も同様に、j=1からj=Cまでのすべてのjに対してそれぞれの項を足し合わせることを表します。

回帰問題

平均二乗誤差(MSE)や二乗和誤差 (Sum of Squared Error: SSE) 、平均絶対誤差(MAE)を使うようです。

2乗和誤差

Nはデータ数、y_iは正解ラベル、hat{y}_iは予測値です。

各データの正解ラベルと予測値との差を二乗しそれらをすべて合計したものです。

つまり、正解ラベルと予測値が近ければ誤差は小さく、遠ければ誤差は大きくなるようになっています。
二乗することで正解ラベルと予測値との差が正負で打ち消し合うことを防ぎ、常に正の値をとるようになっています。

また、データ数で割ることで平均二乗誤差 (Mean Squared Error: MSE) を求めることもできます。MSEは、各データの誤差を二乗して平均したものであり、回帰問題においてよく用いられます。

例えば身長が実際に170cmの人を予測したときに、それが実際に169cmだった場合と実際に175cmだった場合では予測誤差が大きく異なるということです。
二乗することで正負を無視して誤差を評価することができ2乗和誤差や平均二乗誤差を用いることで、
予測値と正解ラベルとの誤差を定量的に評価することができます。

2乗和誤差ではよく0.5をかけた数式を目にします。

0.5をかける理由は、誤差の二乗和を求めたときに2で割ることに相当するためです。
2で割ることで計算が簡単になりまた微分をする際に式がシンプルになるためよく用いられます。

また、0.5をかけることで、微分する際に係数がキャンセルされるため数学的な操作の都合上計算が容易になるという利点もあります。
(「キャンセル」というのは、等式の両辺に同じ定数をかけた場合などに、等式が成り立つことを意味します。
0.5をかけることで微分する際に係数がキャンセルされる理由は、微分の線形性という性質に関係しています。
微分の線形性とは、定数倍や和の微分が簡単に計算できるという性質です。)

0.5をかけるかどうかは、損失関数の定式化において任意の選択肢となっているようです。
深層学習のフレームワークによっては0.5をかけたMSEがデフォルトの損失関数として設定されている場合もあります。

・・・紛らわしい・・・。