数値のアンダーフローを回避するために対数を使用する算術の問題 (take 2)
上記を見て、softmax正規化を見たので、オーバーフローを回避しながらベクトルを正規化しようとしていました-
それは私が配列を持っている場合です
x[1], x[2] x[3], x[4], ... , x[n]
私にとっての正規化された形式は、要素の二乗和が 1.0 で、各要素を
sqrt(x[1]*x[1]+x[2]*x[2]+...+x[n]*x[n])
平方根が浮動小数点変数に収まるほど小さい場合でも、平方和がオーバーフローする可能性があるため、次のようなことができると想像しました
s=(2*log(fabs(x[1]))+2*log(fabs(x[2]))+...+2*log(fabs(x[n])))/2
そして要素を次のように計算します
exp(log(fabs(x[1]))-s), ..., exp(log(fabs(x[n]))-s
しかし
log(A+B) は log(A)+log(B) ではないため、上記は正しくありません。オーバーフローをより適切に回避するベクトル正規化を行う方法はありますか?