Loss Function
損失関数は、モデルの予測と正解データの差を評価し、学習ではその値を最小化します。一般的な損失関数とそれぞれの用途を紹介します。
損失関数は、モデルの予測と学習データの正解ラベルとの差を測定し、その誤差を1つの数値に集約します。この数値は小さいほど良好です。ニューラルネットワークの学習とは、この数値ができるだけ小さくなるようにモデルの重みを調整することです。「コスト関数」と「目的関数」も一般的な同義語ですが、文献によっては「損失」を単一の例に対する誤差、「コスト」をバッチやデータセット全体の平均に限定して使う場合があります。
損失が学習を促す仕組み#
学習では、データの各バッチについて同じサイクルを繰り返します。モデルが予測を行い、損失関数がラベルと照らして予測を評価し、誤差逆伝播が各重みに対する損失の勾配を計算します。続いて、確率的勾配降下法(SGD)やAdamオプティマイザーなどのオプティマイザーが、学習率で決まるステップ幅で、各重みを勾配と反対方向に少し移動させます。この処理は勾配に依存するため、損失関数はほぼすべての点で微分可能である必要があります。各エポックの後に学習損失と検証損失をプロットするのが、実行状況を監視する標準的な方法です。学習損失が下がり続ける一方で検証損失が上がる場合、これは過学習の典型的な兆候です。
一般的な損失関数#
適切な損失関数はモデルの予測対象によって異なります。PyTorchなどのフレームワークには、標準的な選択肢の多くが用意されています。
- 平均二乗誤差(MSE): 予測値と正解値の差を二乗した値の平均で、回帰に使われます。二乗することで大きな誤差の影響が強くなるため、外れ値に大きく引っ張られます。
- 平均絶対誤差(L1)とHuber損失: 大きな誤差に対して線形に増加する回帰損失で、外れ値の影響を受けにくくなります。Huber損失は小さな誤差に対しては二次関数的に、大きさがしきい値を超えると線形に増加します。
- 交差エントロピー: 相互に排他的なクラスに対するsoftmax確率を用いて計算する、画像分類の標準的な損失関数です。
- 二値交差エントロピー(BCE): sigmoidを通じて各クラスを独立した二値予測として評価するため、マルチラベル問題や検出器のクラススコアに適しています。
- Focal loss: 簡単な例の重みを下げる交差エントロピーの変種です。クラスの不均衡が大きい場合に、希少で難しい例が学習を促すようにします。
- IoUベースの損失: Intersection over Union (IoU)に基づくボックス回帰損失です。DIoUやCIoUなどの変種では、中心間距離に対するペナルティが追加され、CIoUではアスペクト比に対するペナルティも追加されます。
- Dice損失: 画像セグメンテーションに使う領域重複損失です。前景が画素のごく一部しか占めない場合でも、有効な学習信号を保ちます。
- コントラスト損失: コントラスト学習で使う損失で、一致するペアを埋め込み空間で近づけ、一致しないペアを遠ざけます。
交差エントロピーでは、正解クラスに割り当てられた確率の負の対数を使います。そのため、確信を持った誤答のコストは、確信のない誤答よりはるかに大きくなり、確信を持った正解のコストはほぼゼロになります。PyTorchのCrossEntropyLossは、同じ確信度を持つ2つの予測に対する効果を示しています。
import torch
from torch import nn
# CrossEntropyLoss applies softmax to raw scores (logits) internally
loss_fn = nn.CrossEntropyLoss()
# Logits for 3 classes; the true class is index 0
target = torch.tensor([0])
confident_right = torch.tensor([[4.0, 0.5, -1.0]])
confident_wrong = torch.tensor([[-1.0, 4.0, 0.5]])
print(f"Confident and right: {loss_fn(confident_right, target).item():.4f}")
print(f"Confident and wrong: {loss_fn(confident_wrong, target).item():.4f}")確信を持った正解の損失は0.0363ですが、同じ確信度で誤ったクラスを選ぶと5.0363となり、およそ139倍になります。
物体検出における複合損失#
物体検出モデルは各物体の位置と種類を予測するため、学習損失は複数の項の加重和になります。YOLO26では、CIoUボックス損失、BCE分類損失、正規化されたボックス距離に対するL1損失を組み合わせます。このL1損失は、以前のYOLOモデルで使われていたDistribution Focal Lossを置き換えるものです。各損失にはbox、cls、dflの学習引数で重みを設定します(デフォルト値は7.5、0.5、1.5です)。また、Progressive Lossは学習の進行に合わせて、NMS不要の推論に使われる一対一ヘッドへ、一対多ヘッドから重みを移します。
損失関数と関連用語の比較#
- 評価指標: 精度や平均適合率(mAP)などの指標は、人が重視する観点から性能を報告します。しかし、ほとんどの指標は離散的に変化するため、勾配を計算できません。学習では、これらの指標の代理として微分可能な損失を最小化します。
- 正則化: モデルの複雑さを抑えるために損失へ追加するペナルティ項です。L2正則化は、重みの二乗和に係数を掛けた項を加えます。これにより、汎化性能が高まりやすい小さな重みへオプティマイザーを誘導します。
- 報酬関数: 強化学習における目的関数です。エージェントは損失を最小化するのではなく、累積報酬を最大化します。そのため、報酬は負の損失に相当します。










