機械学習モデルを訓練するとき、モデルがどれくらい「うまく」予測できているかを測る必要があります。その「うまくできているか」を数値で表すのが損失関数 (Loss Function) です。損失関数は、モデルの予測値と実際の値(正解データ)との間の「ずれ」や「誤差」を計算する関数です。
損失関数は、モデルが学習を進める上での「道しるべ」のような役割を果たします。どの方向に進めばより良い予測ができるようになるかを示してくれるのです。
代表的な損失関数
損失関数には様々な種類があり、解きたい問題の種類(回帰問題か分類問題か)によって使い分けられます。ここでは、特によく使われる代表的な損失関数をいくつか見ていきましょう。
1. 平均二乗誤差 (Mean Squared Error: MSE)
MSEは、主に回帰問題(連続値を予測する問題、例: 家賃予測、株価予測)で使われる最も一般的な損失関数の一つです。予測値と実際の値の差をそれぞれ二乗し、その平均値を計算します。
数式で表すと以下のようになります(nはデータ数、yiは実際の値、ŷiは予測値):
MSE = (1/n) * Σ(yi - ŷi)2
Python (NumPy) での計算例:
import numpy as np
# 実際の値
y_true = np.array([100, 150, 200, 250])
# モデルの予測値
y_pred = np.array([110, 140, 220, 240])
# MSEの計算
mse = np.mean((y_true - y_pred)**2)
print(f"平均二乗誤差 (MSE): {mse}")
# 出力例: 平均二乗誤差 (MSE): 150.0
2. 交差エントロピー誤差 (Cross-Entropy Error)
交差エントロピー誤差は、主に分類問題(カテゴリを予測する問題、例: 画像が犬か猫か、スパムメールか否か)で使われます。モデルが出力した各クラスに属する「確率」と、実際のクラス(正解ラベル)との間の「距離」や「ずれ」を測る指標です。
特に、ニューラルネットワークの分類タスクでは標準的に用いられます。正解ラベルに対する予測確率が低いほど、損失の値は大きくなります。
二値交差エントロピーの考え方(yは実際の値[0 or 1]、pはクラス1である予測確率):
Loss = - (y * log(p) + (1 - y) * log(1 - p))
(通常はデータ全体の平均を取ります)
カテゴリカル交差エントロピーの考え方(クラス数をC、yicはサンプルiがクラスcなら1、それ以外は0、picはサンプルiがクラスcである予測確率):
Loss = - (1/n) * ΣiΣc (yic * log(pic))
Python (NumPy) での計算例(二値交差エントロピー):
import numpy as np
# 実際のクラス (0: 陰性, 1: 陽性)
y_true = np.array([0, 1, 1, 0])
# モデルが陽性クラスと予測した確率
y_pred_prob = np.array([0.1, 0.8, 0.6, 0.3])
# 数値計算の安定性のため、微小な値を加える (log(0)を避ける)
epsilon = 1e-15
y_pred_prob = np.clip(y_pred_prob, epsilon, 1 - epsilon)
# 二値交差エントロピーの計算
bce = -np.mean(y_true * np.log(y_pred_prob) + (1 - y_true) * np.log(1 - y_pred_prob))
print(f"二値交差エントロピー: {bce}")
# 出力例: 二値交差エントロピー: 0.3043413657081038
※ 実際のフレームワーク (TensorFlow, PyTorch) では、より効率的で安定した実装が提供されています。
3. その他の損失関数
上記以外にも、特定の状況で役立つ損失関数があります。
- 平均絶対誤差 (Mean Absolute Error: MAE): 予測値と実際の値の差の絶対値の平均を計算します。MSEと異なり、誤差を二乗しないため、外れ値の影響を受けにくいという特徴があります。回帰問題で使われます。
MAE = (1/n) * Σ|yi - ŷi|
- Huber損失 (Huber Loss): MSEとMAEを組み合わせたような損失関数です。誤差が小さいときはMSEのように、誤差が大きいときはMAEのように振る舞います。これにより、外れ値に対してMAEのように頑健でありながら、誤差が小さい領域ではMSEのようにスムーズに最適化できる利点があります。回帰問題で使われます。
- Hinge損失 (Hinge Loss): 主にサポートベクターマシン (SVM) などの最大マージン分類器で用いられる損失関数です。正しく分類され、かつ十分なマージン(境界からの距離)がある場合は損失が0になります。
損失関数の選び方 🤔
どの損失関数を選ぶかは、解きたい問題の種類やデータの特性によって決まります。
問題の種類 | 主な損失関数 | 特徴・考慮点 |
---|---|---|
回帰問題 | MSE, MAE, Huber損失 |
|
二値分類問題 | 二値交差エントロピー (Log Loss) | 確率を出力するモデル(ロジスティック回帰、ニューラルネットワークなど)に適しています。 |
多クラス分類問題 | カテゴリカル交差エントロピー | 各クラスへの所属確率を出力するモデル(Softmax関数を伴うニューラルネットワークなど)に適しています。 |
特殊なケース | Hinge損失など | SVMのような特定のアルゴリズムや、不均衡データに対応した損失関数(例: Focal Loss)など、目的に応じて選択します。 |
まとめ
損失関数は、機械学習モデルの性能を測り、学習を導くための非常に重要な要素です。
- 損失関数は、モデルの予測と実際の値の誤差を計算します。
- モデルの学習目標は、この損失を最小化することです。
- MSEは回帰問題の、交差エントロピー誤差は分類問題の代表的な損失関数です。
- 問題の種類やデータの特性に応じて適切な損失関数を選ぶことが、モデルの精度向上につながります。
損失関数の役割と種類を理解することで、モデルがどのように学習していくのか、より深く理解できるようになります。次のステップでは、この損失を最小化するための「最適化手法」について学んでいきましょう! 💪
コメント