Skip to main content

free_energy

Function free_energy 

Source
pub fn free_energy(logits: &[f64], temperature: f64) -> Result<f64>
Expand description

ロジット列からヘルムホルツ自由エネルギー (Free Energy) を算出する。

§概要

  • Softmax 正規化前の全ロジットの絶対的な発火強度を測定し、未定義カテゴリや未知の入力 (Out-of-Distribution: OOD) を検知するための指標である。
  • 数値安定性を担保するため、最大値減算 (Max-trick) を適用して指数関数の浮動小数点オーバーフローを物理的に排除する。
  • ヒープ割り当てを一切行わないゼロアロケーション走査で計算する。

§数理仕様

$$E(x; C) = -T \cdot \ln \sum_{i=1}^K \exp\left( \frac{z_i}{T} \right) = -z_{\max} - T_{\text{eff}} \cdot \ln \sum_{i=1}^K \exp\left( \frac{z_i - z_{\max}}{T_{\text{eff}}} \right)$$ ここで、有効温度 $T_{\text{eff}} = \max(T, 10^{-4})$、最大ロジット $z_{\max} = \max_{1 \le i \le K} z_i$ である。

§引数

  • logits: 未正規化の生ロジットスライス (f64)。
  • temperature: 較正温度パラメータ $T$。正の有限実数。

§戻り値

  • 成功時は自由エネルギー値 $E(x; C)$、入力不正時は CoreError::MathError を返却する。