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を返却する。