あれ
遺伝的アルゴリズムにしろ、遺伝的プログラミングにしろ、与えられた課題に有利なバグがあったら徹底活用してくるし、不利なバグがあったら徹底回避してくるので、バグの発見が難しい。内部で乱数が使われているのも輪をかけてバグの発見を難しくしてくる。
なので自動テストで一個づつ動いているか確認しようと思ったのだが、ちゃんと動いてるはずだったのに自動テスト書いたらpanicで全然動かへん。
なんで動いてるんだこいつ……
いや、なんかgo run
で動かすとバグんないんだけど、go test
するとバグる。なんだこれ、goroutine分からん。
やっぱりgoroutineというか並列処理みたいなことを再帰関数でやるってのは辞めた方が良い予感。ワシには難しすぎる問題になる。
func node_exec(node *Node, program Program, inputs *[constant.EMBEDDING_LENGTH + 1]int, input_map *map[int]int) int {
if node.Executed {
return node.Value
}
if node.Function < program.Static_functions_index_max {
node.Executed = true
node.Value = program.Functions[node.Function](inputs, input_map, &program.Queue, &program.Stack, 0, 0)
return node.Value
}
wg := sync.WaitGroup{}
node.Executed = true
arg1 := 0
arg2 := 0
wg.Add(2)
go func() {
arg1 = node_exec(&program.Nodes[node.Index1], program, inputs, input_map)
defer wg.Done()
}()
go func() {
arg2 = node_exec(&program.Nodes[node.Index2], program, inputs, input_map)
defer wg.Done()
}()
wg.Wait()
node.Value = program.Functions[node.Function](inputs, input_map, &program.Queue, &program.Stack, arg1, arg2)
return node.Value
}
あれ
GO言語で並列処理させてCPUぶん回してるから廃熱で暑い。
機械学習とか夏にやるもんじゃない。
あれ
あれ
Amazon Bedrockが出ちゃったのでCartesian Genetic Programmingで文章の類似度を学習させるのは一旦止まっているけど、自前でカスタマイズできるモデルがあると用途がぐっと広がるのでまた再開したい。
あれ
ほげええええええええ
バグっとったやんけええええ絵
そりゃ学習しませんぜ旦那って案件だった
人工知能のプログラムコードのバグを発見するのはすごく大変
3日かけて学習させて出したスコアを5分の学習で上回ってきて「こいつ……いけるのでは……!?」となってる
とはいえまだスタートラインに立ったばかりだ。
学習には遺伝的プログラミングというのを使っています
深層学習は面白くないので……
あれ
帰ったら遺伝的プログラミングのチューニングをする。残念ながら望む学習結果には未だ至っていない。むしろ学習させるほどに望む結果から離れてしまう。何かが間違っているのは間違いない。
データ量が足りてないのだろうか?いや、むしろ少データで学習のテストをすべきだろう。段階的にデータの規模を大きくしたい。
あれ
末尾の「だ、である」調と「です、ます」調 で Sentence Embeddingが極端に変わってしまって、類似度が低くなるのは、学習データの偏りもありそう。私t_wがデライトに投稿した文章から学習させているので、「だ、である」の文章が偏って多い。
あれ
遺伝的プログラミングで生成したプログラムの入力データとして、単語ベクトルを遺伝的アルゴリズムで学習させていた。単語ベクトルの変化量を乱数で決めているつもりだったが、定数の固定値になってしまっていた。つまり常に単語ベクトルの値が線形増加/線形減少していたのだった。そりゃ学習しませんぜ旦那。
それはそれとして、このバグを修正してもいまだ学習しないのである。
あれ
間抜けなのでプログラムでindex2と書くところをindex1と書いていた。そりゃ学習しませんぜ。