AIハードウェアとソフトウェアスタック
ソフトマックス関数exp(xi)/Σexp(xj)を計算するとき、各xiから最大値を引いてから計算することが多い理由として正しいものはどれか。
- A計算の結果を近似値に変えて速くするため
- B最大の要素を必ず0にするため
- C結果は同じまま、expの値が大きくなりすぎてあふれる(無限大になる)のを防げるから
答えと解説を見る
正解:C. 結果は同じまま、expの値が大きくなりすぎてあふれる(無限大になる)のを防げるから
expは急激に大きくなる関数で、例えばFP16ではxが11程度を超えるとexp(x)が表せる最大値を超えてしまいます。すべてのxから同じ定数mを引くと、分子も分母もexp(-m)倍になるだけで結果は変わりません。最大値を引けば指数は0以下になり、expの値は1以下に収まってあふれません。低い精度で計算するAIでは特に重要な工夫で、高速なアテンションの実装でも使われます。
- A. 結果は正確に同じです。
- B. 最大の要素の出力は最も大きくなり、0にはなりません。
- C. 正しい。分子と分母に同じ係数が掛かるだけです。