損失関数

機械学習の教師あり学習では、データセット (x, y) が与えられたとき、パラメーター θ を持つ関数 f(x; θ) の出力値が y に近くなるように学習を行う。このとき、関数 f の出力値と実際の y の値の差を関数として定義したものが、損失関数である。一般的によく用いられる損失関数には、二乗誤差、絶対値誤差、0-1 損失、ロジスティック損失などがある。損失関数は、様々なものが存在するが、データの特徴や問題設定に合わせて、応じて適切に決めていく必要がある。

回帰分析

回帰分析は、正解データは連続値をとるから、機械学習モデル(回帰モデル)の f 関数が出力する値を y に近づけることを目的としている。そのため、損失関数としては、モデルの出力値と正解値が離れば離れるほど、大きなペナルティを与える損失関数を用いる必要がある。このような損失関数として、二乗誤差や絶対値誤差などが用いられる。

二乗誤差

データセット (x, y) が与えられたとき、機械学習で得られた回帰モデルの関数を f としたとき、損失関数(二乗誤差)は次のように計算される。この損失関数では、回帰モデルの出力値 f(x) と y の差を 2 乗しているため、両者が離れば離れるほど大きなペナルティを受ける。データに外れ値が含まれると、その外れ値による影響を大きく受ける。

\[ loss = \frac{1}{2}(f(\mathbf{x}) - y)^{2} \]

絶対値誤差

データセット (x, y) が与えられたとき、機械学習で得られた回帰モデルの関数を f としたとき、損失関数(絶対値誤差)は次のように計算される。絶対値誤差のペナルティは、二乗誤差のように誤差を 2 乗していないため、二乗誤差に比べてゆっくりと大きくなる。

\[ loss = |f(\mathbf{x}) - y| \]

Huber 誤差

Huber 誤差は、二乗誤差と絶対値誤差の両方を取り入れた誤差である。回帰モデルの出力値が、ある範囲内([f(x) - δ f(x) + δ])であれば、二乗誤差を利用し、その範囲外の場合は、絶対値誤差を利用する。このことにより、誤差が一定範囲内であればペナルティを厳しく課し、その範囲外であればペナルティを直線的に増加させることができる。データに外れ値が含まれたとしても、その影響を小さく抑えることができる。

\[ \begin{eqnarray} loss = \begin{cases} \frac{1}{2}(f(\mathbf{x}) - y)^2 & (|f(\mathbf{x}) - y| \ge \delta) \\ \delta (|f(\mathbf{x}) - y| - \frac{\delta}{2}) & ( other ) \end{cases} \end{eqnarray} \]

判別問題

判別問題において、機械学習モデルが出力する値は、true, false などのような離散的な値(カテゴリカルデータ)になる。この場合、モデルの出力値と正解データとの誤差を測ることが難しくなる。2 クラスの判別問題でよく利用される損失関数には、0-1 損失やロジスティック損失などがあげられる。

0-1 損失関数

0-1 損失関数では、ペナルティとして、モデルの出力値と正解データが一致すれば 0 を、そうでなければ 1 を与える。2 クラスの判別問題で判別モデル f(x) は -1 または 1 を返す関数とし、y の取りうる値も -1 または 1 とすると、判別モデルの出力値と正解データの値が一致するときは、両者の積が 1 になる(1×1=1, (-1)×(-1)=1)。逆に、判別モデルの出力値と正解データの値が一致しないときは、両者の積が -1 になる。

\[ \begin{eqnarray} loss = \begin{cases} 0 & (f(\mathbf{x})y = 1) \\ 1 & (f(\mathbf{x})y = -1) \end{cases} \end{eqnarray} \]

ロジスティック損失

0-1 損失では、「確実正解ではない」と「ぎりぎり正解」の両方は、同じペナルティを受ける。そこで、「確実正解ではない」の場合にはペナルティを大きく与え、「ぎりぎり正解」の場合にはペナルティを小さく与えるようにした損失関数が、ロジスティック損失となる。この場合、f(x) の出力値は、+1 または -1 になる確率などを利用する。

\[ loss = \log(1+ \exp\left(- f(\mathbf{x})y)\right) \]

指数損失

指数損失では、判別が、多く間違えば間違えるほど大きなペナルティを与える。

\[ loss = \exp(- f(\mathbf{x})y) \]

ヒンジ損失

ヒンジ損失は、SVM などに一般的に用いられる損失関数である。ヒンジ損失は、(1) 判別に成功し、かつ境界面から大きく離れていればペナルティを課さない(loss = 0)、(2) 判別に成功し、かつ境界面付近ならばペナルティを小さく課し(0 < loss < 1)、(3) 判別に間違えて、正解と離れば離れるほど大きなペナルティを課すようにしている(1 < loss)。

\[ loss = \max\{1 - f(\mathbf{x})y, 0\} \]
ヒンジ損失のイメージ図