機械学習

損失関数

投稿日:


おっさんが入門した軌跡シリーズです。損失関数に関して学んだことをメモしておきます。

入力値\(x\)、正解\(t\)からなる訓練データ\(T=(x,t)\)が大量に与えられたときに、
\(f(x,w)\)によって回帰なり分類なりをする。
仮に立てた\(f(x,w)\)と正解\(t\)の距離\(L\left(f(x,w),t\right)\)を損失関数と呼んだり。

あえて\(L\left(f(x,w),t\right)\)としているのは、
一番わかりやすそうな残差の2乗だけでなく、他があるから。

2乗損失

残差の2乗だと、\(f(x,w)\)と\(t\)の差が大きい場合に必要以上に大きくなってしまう。
ほとんどのデータで残差が0なのに、特殊なデータで残差が100とかになられたら、
全体の損失は測れそうにないし、異常値に敏感すぎる。

\begin{eqnarray}
L\left(f(x,w),t\right) = (t-f(x,w))^2
\end{eqnarray}

Huber損失

単に残差の2乗を使うだけでは不十分で、"\(f(x,w)\)と\(t\)の差の大小にあまり影響されないこと"が必要。
残差の絶対値がある値を超えるまでは残差の2乗、
超えてからは線形にするというのもある(Huber損失)。
\begin{eqnarray}
L\left(f(x,w),t\right) = \begin{cases}
(t-f(x,w))^2 & t \in [t-\delta,t+\delta] \\
2\delta (|t-f|-\frac{\delta}{2}) & それ以外
\end{cases}
\end{eqnarray}

損失関数が微分可能か

損失関数を最小(極小)にすることが目的なので..、
損失関数の1階導関数(勾配ベクトル)を使ってパラメタを更新したりする。
\begin{eqnarray}
w_{i+1} = w_i - \eta \left(f'(x,w),t\right)
\end{eqnarray}

損失関数が微分可能(連続)だと勾配ベクトルがすぐに求まるので、
損失関数は不連続点をなくすように作るらしい。
(Huber損失の2乗から線形に切り替わるところは連続になってる。)

次回以降実際のデータとモデルを使ってやってみる。

-機械学習
-,

Copyright© ikuty.com , 2019 AllRights Reserved Powered by AFFINGER4.