# 損失関数
## 定義
損失関数(loss function、コスト関数・誤差関数とも呼ばれる)とは、訓練データで与えられる正解に対し予測がどれだけ間違っているかを表す関数である。入力 $x$、正解の出力 $y$、モデルパラメータ $\theta$ を引数にとり、0以上の値を返す。分類が正しければ0、間違えていれば0より大きな正の値をとる。分類器が高い確信度(境界面からのマージンの大きさ)で予測したにもかかわらず間違えた場合は、損失関数は大きな正の値をとるよう設計する。どのような損失関数を使うかによって、学習がうまくいくか、学習結果のモデルがどのような性質(汎化性能・ノイズへの強さ・最悪ケース性能など)を持つかが決まるため、損失関数の設計は学習の中核をなす。訓練データ全体にわたる損失関数の値の平均が訓練誤差(training error、経験誤差)であり、$L(\theta):=\frac1N\sum_{i=1}^N l(x^{(i)},y^{(i)};\theta)$ と表す。詳細は[[経験リスク最小化]]を参照。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6)
## 代表的な損失関数
- **0/1損失関数** $l_{0/1}$: モデルによる分類が間違っていれば1、正しければ0を返す。分類精度を直接評価できるが、微分がほとんどの位置で0となり、勾配降下法を使った学習では使えない。
- **クロスエントロピー損失関数** $l_{CE}$: 分類問題に使われる代表的な損失関数であり、確率分布間の距離を表す尺度クロスエントロピーを用いる。$l_{CE}(x,y;\theta)=-\frac1N\sum_i\log q(y^{(i)}\mid x^{(i)};\theta)$。訓練データの尤度を最大化する[[最尤推定]]とも呼ばれる。
- **二乗損失(L2損失、二乗誤差)** $l_{SE}$: 回帰問題に使われる。$l_{SE}(x,y;\theta)=\frac12\|f(x;\theta)-y\|^2$。大きな間違いをしないようにするが、訓練データのノイズに弱い。
- **絶対損失(L1損失)** $l_{AE}$: 回帰問題に使われる。$l_{AE}(x,y;\theta)=\|f(x;\theta)-y\|$。大きな間違いをする可能性はあるが、ノイズに強い。
(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6)
## クロスエントロピー損失関数の導出
分類問題は入力 $x$ から出力 $y$ の条件付き確率 $q(y\mid x)$ を求める問題とみなせる。予測/推定した結果の分布を予測分布(predictive distribution)と呼び、正解ラベルの確率だけが1、それ以外が0になっている分布を経験分布(empirical distribution)と呼ぶ。学習の目標は予測分布が経験分布と一致することである。2つの確率分布間の距離を表すKLダイバージェンス $KL(p\|q)=\sum_x p(x)\log\frac{p(x)}{q(x)}$ は、$p=q$ のとき最小値(経験分布のエントロピーに等しく、経験分布の場合は0)をとる。経験分布を $p$、モデル分布を $q$ としてKLダイバージェンスを計算し、モデル分布に依存しない項(経験分布のエントロピー、学習対象に依存しないため無視できる)を除くと、クロスエントロピー損失関数が導出される。クロスエントロピー損失で登場する $\log q(y^{(i)}\mid x^{(i)};\theta)$ は観測データの対数尤度であり、クロスエントロピー損失の最小化は観測データの負の対数尤度の最小化、すなわち[[最尤推定]]と一致する。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6コラム「クロスエントロピーの導出」)
## なぜ分類問題にクロスエントロピー損失を使うか
分類問題には二乗損失も使えそうだが、クロスエントロピー損失が確率モデルに基づいて導出された手法であることに加え、学習時の利点がある。二乗損失では予測が真の値に近づくにつれ勾配の大きさが急激に0に近づいてしまい、モデルの予測分布が経験分布に近づいていくことができなくなる。これに対しクロスエントロピー損失では、スコアの勾配が小さくなることがない。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6)
## サロゲート損失関数
0/1損失関数はほとんどの位置で平らで分類が変わる位置だけ垂直に切り立っているため勾配がほとんど0であり、また凸関数でもない(モデルが線形なら、損失関数が凸であれば全体も凸関数になり、収束の速さや解の最適性の判定などのメリットが得られる)。そこで学習時には、0/1損失関数を上から滑らかな関数で抑えたような関数であるサロゲート損失関数(surrogate loss)を使う。クロスエントロピー損失関数はサロゲート損失関数の代表例であり、勾配降下法を使って学習できる。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6コラム「なぜ0/1損失関数は『学習』に使われないのか」)
## 生成モデルと識別モデル
入力 $x$ と出力 $y$ が与えられたとき、モデルを使って分類する方法として、同時確率 $p(x,y)=p(y\mid x)p(x)$ を使ってモデル化し訓練データの対数尤度を最大化するアプローチ(生成モデル・生成器ベースの分類)と、直接条件付き確率 $p(y\mid x)$ を使ってモデル化し条件付き確率の対数尤度を最大化するアプローチ(識別モデル・識別器ベースの分類)がある。前者は教師なしデータも考慮して $p(x)$ を学習できるが、実際に知りたい $y$ 以外の $x$ のモデル化も必要になるため推定が難しくなる場合がある。後者は $p(y\mid x)$ と $p(x)$ で異なるパラメータを使ってモデル化できる点が良いと主張される。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6コラム「生成モデルと識別モデル」)
## 横断的知見
- **SRE実務入門のTensorFlow例は、本ページが定義する4種の損失関数のうち最も単純な二乗損失(L2損失)だけを使う**: 『SREの探求』第18章のTensorFlowコード例は、単一ニューロンの重み$w$を`loss = tf.pow(y - y_, 2)`という二乗損失で最適化し、クロスエントロピー損失・絶対損失・0/1損失には触れない。本ページが積み増した『ディープラーニングを支える技術』の分類は、二乗損失を回帰問題向け(訓練データのノイズに弱いが大きな間違いをしないようにする)と位置づけるが、SRE章の例自体は分類でも回帰でもない単一スカラーの最適化デモであり、損失関数の選択が扱うタスク種別と厳密に対応づけられているわけではないことを示す実例になっている。(Source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] §2.6, [[@2021__OReillyJapan__SREの探求 - Chapter 18 SREのための機械学習入門]] §18.6.2.4)
- [[経験リスク最小化]]は Mathematics for Machine Learning から「損失関数」を仮説クラス・正則化と並ぶERMの構成要素として抽象的に扱っており、本ページが導出するクロスエントロピー損失=最尤推定という具体的な結びつきは、その抽象的な枠組みに確率論的な内実を与える関係にある(詳細は[[経験リスク最小化]]の横断的知見を参照)。
## 未解決の問い
- 二乗損失(ノイズに弱い)と絶対損失(ノイズに強い)のどちらを選ぶべきかの実務的な判断基準は、外れ値の割合以外にどのような要因に依存するか。
- サロゲート損失関数として「0/1損失を上から抑える滑らかな凸関数」という条件を満たす損失関数は他にどれだけあり、クロスエントロピー損失以外の選択がいつ優位になるか。
## 関連
- source: [[@2022__Gihyo__ディープラーニングを支える技術 - Chapter 2 [入門]機械学習]] / [[@2021__OReillyJapan__SREの探求 - Chapter 18 SREのための機械学習入門]]
- concept: [[経験リスク最小化]] / [[最尤推定]] / [[勾配降下法]] / [[凸最適化]] / [[正則化]]
## 出典
- 岡野原大輔, 『ディープラーニングを支える技術』, 技術評論社, 2022, 第2章, §2.6.
- [[@2021__OReillyJapan__SREの探求 - Chapter 18 SREのための機械学習入門]] §18.6.2.4.