2025.05.28 20:13
Welfordのアルゴリズムか
・ニューロンの入力を正規化したほうが良いという。でも学習時、入力データはストリームとして入ってくる。
・平均値を計算するのは割と簡単で、要は今まで入ってきた数Nと今の平均値をμ、入力データをdとすれば、新しい平均値μ0は
μ0 = (N・μ+d)/(N+1)
なんて具合でどんどん入ってくるデータに応じて求められるけど標準偏差、その元になる分散は高校数学的には
1/N×Σ(d-μ)^2
という具合に偏差の自乗の総和なので、平均値が求まっていないと計算できないし、偏差の自乗の和を求めるにはそれまでのデータが全部ないとだめ。そして自乗の和だとデータが多いと値が非常に大きくなりやすい。
・どうしたら良いのかなということで、これまたAI先生に聞いてみたらWelfordのアルゴリズムというのがあるそうだ。・データが1つ入ってくるたびに、平均値を
μ0=μ+(d-μ)/(N+1)
なんて感じで求める。μとμ0が得られるので、(d-μ)・(d-μ0)を加算していけば良いという話。
・ちょっと適当な数列で試してみたら平均がだめっぽかったので普通に計算する方法に直してやりなおしたら分散は確かに良い感じで求められる。改めてプログラムを眺めたら平均の算出の方をミスっていた。なんかボケてる。
・さて、今のやつに正規化処理を組み込んでみるかな。
この記事へのコメント
コメントを書く