Skip to main content

normalized_free_energy

Function normalized_free_energy 

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

候補数 $K$ に対する基底エネルギー偏向を補正した、正規化ヘルムホルツ自由エネルギー (Normalized Free Energy) を算出する。

§概要

  • 単純な自由エネルギー $E(x; C) = -T \ln \sum \exp(z_i/T)$ は、候補数 $K$ が増加するだけで理論的に自然低下 (約 $-T \ln K$) する。
  • sokuto では候補数 $K \in [1, 255]$ が動的に変動するため、候補数で補正した正規化自由エネルギーを採用することで、 任意の候補数に対して単一の閾値 $\tau_{\text{energy}}$ で安定した境界判定を可能にする。
  • すべてのロジットが同一の定数 $c$ (完全な一様分布) であるとき、本関数の出力は厳密に $-c$ (ロジットが0のときは0.0) となる。

§数理仕様

$$E_{\text{norm}}(x; C) = E(x; C) + T \ln K = -T \cdot \ln\left( \frac{1}{K} \sum_{i=1}^K \exp\left(\frac{z_i}{T}\right) \right) = -z_{\max} - T_{\text{eff}} \cdot \ln\left( \frac{1}{K} \sum_{i=1}^K \exp\left(\frac{z_i - z_{\max}}{T_{\text{eff}}}\right) \right)$$

§引数

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

§戻り値

  • 成功時は正規化自由エネルギー値 $E_{\text{norm}}(x; C)$、入力不正時は CoreError::MathError を返却する。