上で書いたのはエネルギー関数(評価関数) E の
最小化(評価関数なら普通は最適化=最大化かも)
のアルゴリズムです。
>> T が 0 になれば、最適解になってる。
> divided by zero が気になるのですが、
実際に 0にすると言う意味ではなくて、
T-> 0 の極限で最適解になると言う意味です。
>> 大きくなった場合には、確率 exp(-dE/T) で
上では書いてませんでしたが、 dE はパラメータ
を変化させた場合の E の増分です。
T が大きい(無限大)と、
dE にかかわらず、 確率は 1(=exp(0)) になりますので
基本的にはランダムウォークするけれども、
T が小さくなってくると E が大きくなる方向へは、
移動しにくくなります(0≒exp(-∞))。
で、T が十分に小さくなっていれば、E が最小となるところ
に落ち着くと言う感じです。
T は時間経過とともに徐々に小さくするようにします。
このスケジューリングの仕方は知りません。(^-^;
気になるところ (スコア:1)
2.個体数の確保
適合度って何を基準に出しているのかしらん?処理時間?
あと一つのPCで複数の個体を保持しているのかなぁ。
1PC1個体にして、ネットワーク経由で交配、とか妄想してみたけど違うみたいですね。そうだったら正に「ネットは広大」という事でかなりアレゲなんですが。
Re:気になるところ (スコア:1, 余計なもの)
また個体は1台のPC内に複数保持しないと交配できないため、もちろんそのようになっています。
「ネットワーク越しで交配」というのは本来の意味が失われてしまいます。
なぜならばその「PC」という環境に適合するようにチューニングすることが目的であるのですから。
ネットワーク上にはまったく同じ環境を持つPCのみが存在するようなシステムでは話は別かもしれませんが。
Re:気になるところ (スコア:1)
きっとあるはず。
なにがしかの値が変数として評価関数のなかに
取り込まれるとして、似た環境の(つまり変数に入る
なにがしかが近い)PCのパラメータ値を取り込んでくると、
比較的有効な初期パラメータとして収束するまでの
時間を短縮できるんじゃないかなぁと思ったりしました。
Re:気になるところ (スコア:1)
GA っぽいですが、 一つのコンピュータ上で進化するなら、
Simulated Annealing [google.com] が 良いのでは?
実際には、試してみないと分からないでしょうが。
Re:気になるところ (スコア:1)
ただ、連続・・・ですかね?
パラメータの微小変化に対してその結果が連続的に変化するのかどうかです。
コンピュータ内部事情には詳しくないので分かりませんが、
単純に「スケジューリング問題」として捉えれば切った貼ったのGAが良いように思えます。
もちろんおっしゃる通りやってみないことには分かりませんが、
何というか心をくすぐられる話題ですね。
Re:気になるところ (スコア:1)
惹かれてしまふ。
SA は局所解脱出方法だよなと考えてるので、システムの
チューニングとに対してはどうだろうかという思いと、
モデルをそのような式で表現できたらおもしろいなという
思いが交錯しておりまする。
いやいや、ほんとおもしろい話題だな。
Re:気になるところ (スコア:1)
パラメータ更新まで間隔が開きそうなんで、
どうなんだろうと思ったのが大きいです。
ただ、GA の方が各個体のテストを複数回行うことで
誰もユーザーの使ってない状況に最適化しちゃうとか、
状況依存には強かったりするのかな?
なんて、無責任に妄想しております。
Re:気になるところ (スコア:1)
ですから、「GAよりもSAのほうが良い」というのは奇妙な感じです。
--kwbt
Re:気になるところ (スコア:1)
エネルギー関数が小さくなった場合には確率1 で、
大きくなった場合には、確率 exp(-dE/T) で
新しいパラメータを受理する。
で、徐々に T を小さくする。
T が 0 になれば、最適解になってる。
っていうものじゃないでしょうか?
Re:気になるところ (スコア:0)
divided by zeroが気になるのですが、 逆にdivided by zeroが起きると最適解なのでしょうか?
何も知らない素人考えですが。
Re:気になるところ (スコア:1)
最小化(評価関数なら普通は最適化=最大化かも)
のアルゴリズムです。
>> T が 0 になれば、最適解になってる。
> divided by zero が気になるのですが、
実際に 0にすると言う意味ではなくて、
T-> 0 の極限で最適解になると言う意味です。
>> 大きくなった場合には、確率 exp(-dE/T) で
上では書いてませんでしたが、 dE はパラメータ
を変化させた場合の E の増分です。
T が大きい(無限大)と、
dE にかかわらず、 確率は 1(=exp(0)) になりますので
基本的にはランダムウォークするけれども、
T が小さくなってくると E が大きくなる方向へは、
移動しにくくなります(0≒exp(-∞))。
で、T が十分に小さくなっていれば、E が最小となるところ
に落ち着くと言う感じです。
T は時間経過とともに徐々に小さくするようにします。
このスケジューリングの仕方は知りません。(^-^;
Re:気になるところ (スコア:1)
SA(Simulated Annealing)とGA(Genetic Algorithm)は最適化問題を解くための
まったく異なるアルゴリズムであり、互いに包含関係なんかはないです。
SAよりもGAの方が局所解に陥りにくいってことで、SAからGAへって流行があったものだから
「GAはSAの改良版」って感じでとらえられることが多いですけど
Re:気になるところ (スコア:0)
Re:気になるところ (スコア:1)
んな、当たり前でんがな。GAの適合度は普通、評価関数から算出しますし。
tunedとはどう定義されてるのかなぁ、という事ですね。処理速度なのか?メモリ占有率なのか?安全性なんかもあるかもしれませんし。GAの良し悪しは大体、評価関数で決まりますから。
> 「ネットワーク越しで交配」というのは本来の意味が失われてしまいます。
おおっ、確かにそのとおりですね。
> また個体は1台のPC内に複数保持しないと交配できないため、もちろんそのようになっています。
プロセスが起動した度に個体が発生するか、同じプロセスが同時に動いているような感じでしょうか?
元記事だけではちょっと理解できませんでした。
Re:気になるところ (スコア:1)
すみませんでした。
リンク先のサイトを(ざっとですが)見てみたところ、あらかじめパラメータセットを大きなテーブルに用意しておいて、それを一つ一つ試して全てのパラメータセットを試し終わった後で適合度を計算し、・・・(以下一般的なGAの手順)という感じです。
つまりスケジューリングプロセスは一つですね。
#所々言い切っていますが、間違っていたらごめんなさい
Re:気になるところ (スコア:1)
>
>すみませんでした。
>
>リンク先のサイトを(ざっとですが)見てみたところ、あらかじめパラメータセットを大きなテーブルに用意しておいて、それを一つ一つ試して全てのパラメータセットを試し終
>わった後で適合度を計算し、・・・(以下一般的なGAの手順)という感じです。
いや、疑問とされているのは、
「評価に用いる適合度は、どういった要因をどう組み合わせて定義しているのでしょう?」
ということですよね。それがGAのキモ。
Re:気になるところ (スコア:1)
> 失われてしまいます。
> なぜならばその「PC」という環境に適合するように
> チューニングすることが目的であるのですから。
より広範囲で交配する種の方が多様性を持つため
より生き残るんで良いのでは、という素人の疑問が・・・。
ああそうか、その多様性ゆえに、使いにくい PC を
「種」のためにがまんして使わなきゃいけないユーザが
出ちゃうって事か。
ということは、ひとつのPC という狭い範囲で交配し続けた
遺伝的アルゴリズムカーネルは、なんらかの破壊的パラダイム
シフトにきわめて脆弱になる・・Σ(゚Д゚
閾値は 0 で
Re:気になるところ (スコア:1)
これが、実行コード(実マシンコード)の動的最適化迄進むと、「破壊的パラダイムシフトへの脆弱」と言う懸念が本当の物になると思うので慎重に進めないとまずいですが…
Re:気になるところ (スコア:1)
> 収まってるので、心配するような状況は極めて
> 限られるのではないかと。
実マシンコードとは独立した、
ポータブルな進化結果なんですね。
素人のたとえ話で申し訳ないですが、
いいなぁ、象の鼻、と思ったら
その遺伝子だけもらって組み換えちゃえば
いいとかそんな感じかな。
待てよ、そこで勘違いした一般消費者の
遺伝子組み換え OS 反対運動が勃発して
・・・・・Σ(゚Д゚
閾値は 0 で
Re:気になるところ (スコア:1)
Linuxマシンを沢山沢山繋いで、「同じ(少なくとも対称な)」仕事をさせる、という最近よく聞く話の場合は、
有効かも知れないってことですね。
Grid(ってんだっけ)なLinuxスパコンが、自ら勝手にパフォチューしてくれる、みたいな?
あ。でも、与える課題(走らせるプログラムとかデータ傾向とか)を変えるたびに
天変地異になっちゃうわけですね。
こりゃ、色々あるプログラムやデータを、どうやって「同じor違う」と見なすか、という問題に
帰着するのかな。