損失関数とは
Loss Function / 誤差関数 / 目的関数
モデルの予測と正解とのずれを数値化し、学習の最適化目標とする関数
ひとことで言うと
AIの答えが正解からどれだけずれているかを数字で表す、学習の「採点基準」。
概要
損失関数は、モデルの予測値と正解(教師信号)との間のずれを1つのスカラー値として定量化する関数で、学習の目標はこの値を最小化するようにモデルのパラメータを調整すること。 回帰タスクでは予測値と正解の差の二乗を平均する平均二乗誤差(MSE)、分類タスクでは予測確率分布と正解ラベルの分布の差を測る交差エントロピー損失がよく使われる。 損失関数の設計は、モデルがどのような誤りをどの程度重く扱うかを直接左右するため、タスクの性質や評価指標との整合性を考慮して選ぶ必要がある。 生成モデルや強化学習など、単純な正解ラベルが存在しないタスクでは、敵対的損失や報酬に基づく損失など、より複雑な損失関数が設計される。
背景
モデルの学習を数理最適化の問題として扱うには、モデルの良し悪しを比較可能な単一の数値に落とし込む必要がある。 損失関数はこの役割を担い、勾配降下法などの最適化アルゴリズムが最小化すべき目的関数として機能する。
歴史
統計的決定理論の文脈で、A. Waldが1950年の著書「Statistical Decision Functions」において損失関数を用いた意思決定の定式化を確立し、これが機械学習における損失関数の概念的な源流の1つとされる。 多層ニューラルネットワークの学習では、1986年の誤差逆伝播法の普及とともに二乗誤差(MSE)などの損失関数を用いた勾配ベースの学習が定着し、分類タスクではSoftmaxと組み合わせた交差エントロピー損失が広く使われるようになった。
ワークフロー
モデルが入力に対して予測を出力 → 予測値と正解を損失関数に入力し、誤差の大きさを1つの数値として計算 → 誤差逆伝播法で損失関数の値を各パラメータで微分し勾配を求める → 勾配降下法などでパラメータを更新し、次のバッチでも同じ手順を繰り返す。
コード例
PyTorchでのMSEと交差エントロピー損失
import torch
import torch.nn as nn
# 回帰: 平均二乗誤差
mse = nn.MSELoss()
pred = torch.tensor([2.5, 0.0, 2.1])
target = torch.tensor([3.0, -0.5, 2.0])
print(mse(pred, target))
# 分類: 交差エントロピー損失
ce = nn.CrossEntropyLoss()
logits = torch.tensor([[2.0, 1.0, 0.1]])
label = torch.tensor([0])
print(ce(logits, label))利点
- モデルの良し悪しを単一の数値で比較でき、最適化アルゴリズムに直接組み込める
- タスクに応じて損失関数を設計・選択することで、重視したい誤りの種類を学習に反映できる
- 多くの標準的な損失関数(MSE、交差エントロピー等)が主要フレームワークに用意されており、すぐ利用できる
欠点
- 実際に重視したい評価指標(精度やF1スコア等)と、微分可能な損失関数は一致しないことがある
- 損失関数の設計を誤ると、意図しない挙動(外れ値への過剰反応など)を助長することがある
- クラス不均衡などデータの偏りが大きいと、単純な損失関数では学習がうまく進まない
比較
関連用語
よくある質問
損失関数と評価指標(精度など)はなぜ別に用意するのか?
精度やF1スコアなど実務上重視したい指標の多くは微分できないため、そのままでは勾配降下法で最適化できない。そこで微分可能な損失関数を代理の目的関数として最適化し、別途評価指標でモデルの実際の性能を確認する。
回帰と分類で使う損失関数の違いは?
回帰タスクでは連続値の誤差を測る平均二乗誤差(MSE)などが、分類タスクでは予測確率分布の誤差を測る交差エントロピー損失がよく使われる。