数学的定義
予測値 \( f(x) \) と真値 \( y \) に対して、残差は \( r = y - f(x) \) と定義される。フーバー損失は次のように定義される:
\[
L_{\delta}(r) = \begin{cases}
\frac{1}{2} r^2 & \text{if } |r| \le \delta \\
\delta (|r| - \frac{1}{2} \delta) & \text{otherwise}
\end{cases}
\]
ここで、\( \delta \) は二次から線形への遷移が起こる閾値を決定する正のハイパーパラメータである。\( |r| \le \delta \) の場合、損失は二次となり、滑らかな勾配を提供し、小さな誤差をより穏やかに罰する。\( |r| > \delta \) の場合、損失は線形となり、勾配の大きさが \( \delta \) で上限に達するため、MSEと比較して大きな残差(外れ値)の影響を軽減する。この関数は \( |r| = \delta \) で連続かつ微分可能であり、滑らかな最適化を保証する。
性質と利点
フーバー損失はMSEとMAEの間のバランスを提供する。MSEは残差を二乗するため、大きな誤差が損失を支配し、外れ値に敏感である。MAEは外れ値に対して頑健であるが、ゼロ点で微分不可能であり、最適化を複雑にする可能性がある。フーバー損失は両方の問題を緩和する:至る所で滑らかであり、線形の裾が外れ値に対する罰を軽減するため、頑健性を保ちながら微分可能性を維持する。
もう一つの利点は、フーバー損失が凸であることである。これにより、線形モデルでは勾配降下法が大域的最小値に収束することが保証される。深層学習では、ネットワーク全体の凸性は保証されないが、損失関数自体は良好に振る舞う。さらに、パラメータ \( \delta \) により、実践者は外れ値への感度を調整できる:\( \delta \) が小さいほど損失はより頑健になり、大きいほどMSEに近い挙動になる。
他の損失関数との比較
回帰において最も一般的な損失関数はMSE、MAE、フーバー損失である。MSEは数学的な利便性から多くの問題でデフォルトであるが、外れ値に大きく影響される可能性がある。MAEはより頑健であるが、ゼロでの勾配が不連続であり、収束を遅くする可能性がある。フーバー損失は両方の長所を組み合わせる:滑らかで頑健である。実際には、外れ値が存在する場合、フーバー損失はMSEよりも良い汎化性能をもたらすことが多い。
もう一つの関連する損失はLog-Cosh損失であり、これも滑らかで頑健であるが、使用頻度は低い。フーバー損失は、その挙動が \( \delta \) によって解釈・制御しやすいため、多くのアプリケーションで好まれる。
機械学習における応用
フーバー損失は様々な分野の回帰タスクで広く使用されている。コンピュータビジョンでは、Faster R-CNNやSSDなどの物体検出モデルのバウンディングボックス回帰に使用され、Smooth L1損失として知られている。滑らかさは訓練の安定化に役立ち、外れ値への頑健性は、グラウンドトゥルースのボックスがノイズを含む可能性がある場合に有益である。
強化学習では、フーバー損失は価値関数の推定に使用され、特にDQNのようなアルゴリズムで、時間差誤差における外れ値の影響を軽減する。また、異常値を含む可能性のある時系列予測や、外れ値を持つデータセットを含むあらゆる回帰問題でも使用される。
深層学習フレームワークでの実装
フーバー損失は主要な深層学習フレームワークに実装されている。PyTorchでは、torch.nn.HuberLoss または torch.nn.SmoothL1Loss として利用可能である。TensorFlowでは、tf.keras.losses.Huber として利用可能である。これらの実装では、デルタパラメータを指定できる。例えば、PyTorchでは、nn.SmoothL1Loss(beta=1.0) で \( \delta = 1.0 \) を設定する。デフォルトのデルタは通常1.0であるが、残差のスケールに基づいて調整できる。
デルタパラメータの調整
\( \delta \) の選択は重要である。\( \delta \) が大きすぎると、損失はMSEのように振る舞い、頑健性を失う。小さすぎると、MAEのように振る舞い、大きな誤差を過小に罰し、収束を遅くする可能性がある。一般的な方法は、\( \delta \) を残差の標準偏差に比例する値に設定するか、交差検証を使用することである。深層学習では、\( \delta \) はデフォルトで1.0に設定されることが多いが、問題に基づいて調整できる。
拡張と変種
フーバー損失のいくつかの変種が提案されている。擬似フーバー損失は、至る所で微分可能であり、区分的定義を持たない滑らかな近似である。\( \delta^2 (\sqrt{1 + (r/\delta)^2} - 1) \) と定義され、\( \delta \) が小さくなるとフーバー損失に近づく。もう一つの変種はフェア損失であり、異なる関数形式を使用するが類似している。これらの変種は頑健回帰や一部の深層学習アプリケーションで使用される。
結論
フーバー損失は、時代を超えて生き残ってきた多用途で頑健な損失関数である。二乗誤差と絶対誤差の組み合わせにより、特に外れ値が存在する場合の多くの回帰シナリオで好ましい選択肢となっている。その滑らかさと凸性により最適化が容易であり、主要なフレームワークでの実装により広範な採用が保証されている。機械学習が進化し続ける中、フーバー損失は損失関数の武器庫における基本的なツールであり続けている。