損失関数・誤差関数

損失関数・誤差関数とは

誤差関数は、統計分析や機械学習の分野において、測定データとモデル関数の誤差による関数です。

例えば、モデル関数が1次関数であるような線形回帰の場合は、誤差は測定データ群と直線との距離(二乗和)になるため、誤差関数はモデル関数の傾きと切片を変数とする2次関数になります。
また、モデル関数がシグモイド関数であるようなロジスティック回帰の場合は、誤差関数は二値クロスエントロピー関数になります。

損失関数は、誤差関数とほぼ同じか、より包括的な概念です。
予想データと正解データの出力の間に、どのくらい誤差があるのかを評価する関数です。
作成した予測モデルの精度を評価する際に損失関数は使われ、値が小さければ小さいほど正確なモデルと言えます。
モデル関数とデータ群の誤差という文脈では誤差関数と呼ばれます。学習の文脈では損失関数と呼ばれ、また誤差関数以外にもたとえばカルバック・ライブラー(KL)情報量などを含みます。

適切な問題のために適切な損失関数を選ぶことは重要です。
ほとんどの場合、損失関数は扱う問題によって以下のような関数がすでに定義されています。

例えば、回帰問題の場合は平均二乗誤差(MSE)関数、分類問題の場合は2クラス分類問題では、2クラス交差クロスエントロピー誤差関数、多クラス分類問題では多クラス交差クロスエントロピー誤差関数、シーケンス学習問題ではコネクショニスト時系列分類法(CTC)サポートベクターマシンではヒンジ損失関数が主に用いられます。損失関数は他にも、Huber関数、指数損失関数などが知られています。

機械学習を始めとするAI分野において、代表的な損失関数である二乗和誤差は、入力値と正解の値の差を二乗して総和を求めるものです。
総和が小さいほど、精度の高いモデルを生成したと言えます。
計算結果が0に近ければ近いほど、良い数値だと言えます。
MNISTのような画像データセットを使った多クラス分類問題には「交差エントロピー誤差」が利用されます。

実装の際に、kerasで利用可能な損失関数は、

  • 平均二乗誤差「mean_squared_error(y_true,y_pred)」
  • 交差エントロピー「categorical_crossentropy(y_true,y_pred)」

※y_trueは正解ラベル、y_predは予測値
などがあります。

Kerasにはよく使う損失関数が用意されていて、文字列で指定するだけで使えます。
例:LOSS=‘categorical_crossentropy’

ニューラルネットワーク機械学習を行う際は、損失関数が最小になるように学習を行います。
実際の学習では、過学習を防ぐためしばしば正則化項が用いられ、損失関数にこの正則化項を加えたものをコスト関数と呼びます。多くの場合、ニューラルネットワークは目的関数を最小(大)化する最適化問題を解くために反復学習を行いますが、このコスト関数を含むものが目的関数となります。


目的関数の最適化問題を解くことは、狭義にはすなわち損失関数(誤差関数)を最小化することです。
ニューラルネットワークの学習では多くの場合、この問題を解析的には解けないため、損失関数の勾配が0になる点を逐次的に探索する勾配法(確率的勾配降下法)を用いて、各ノードの重みとバイアスを更新します。
勾配法では、損失関数が凸関数であれば大域的最適解に収束しますが、通常ニューラルネットワークの損失関数は非凸関数であるため、局所最小や鞍点などの局所最適解に陥りがちです。
この問題を解決するため、さまざまなオプティマイザーが考案されています。