Cartesian Genetic Programmingで文章の類似度を学習
あれ
遺伝的プログラミングと誤差逆伝播法を組み合わせるにあたって、誤差逆伝播法の具体的計算方法がウェブを見ていてもわからんので、『ニューロ・ファジィ・遺伝的アルゴリズム』を戸棚から引き出してきた。誤差逆伝播法の章にt_wの書き込みがされており、理解の道筋をたどることができる算段。
ただ、紙の書籍で取り回しが悪いので、アレしましょう。デライトに書きましょう。
あれ
遺伝的プログラミングの学習結果をonnxにするというアイデアが降りてきた。
onnxのエコシステムに乗っけられるのが嬉しいポイント
あれ
遺伝的プログラミングの計算を小数にしたら学習しなった。シット!!
整数値で計算させていた時には、数値が巨大化する問題がオーバーフローによって回避されていたらしい。
あれ
遺伝的プログラミングで誤差逆伝播法行くぞ!!!
遺伝的プログラミング(Cartesian Genetic Programming)で得られたグラフ構造に内在するパラメーターを誤差逆伝播法で学習してやるのだぁ!!
遺伝的プログラミング単体ではどうにも学習が進まないのでやってやろうじゃねぇかよとなった。
『生成 AI に必要な「基盤モデル」のメモリ使用量 98%削減につながる技術を開発 ─ 自動運転車や工作用ロボット用組み込みシステムへの搭載を目指す』も背中を後押しした。良い構造の小さいモデルで良い性能が出せることが示された。
GPGPUで遺伝的プログラミング
WebGPUで遺伝的プログラミング
あれ
遺伝的アルゴリズムにしろ、遺伝的プログラミングにしろ、与えられた課題に有利なバグがあったら徹底活用してくるし、不利なバグがあったら徹底回避してくるので、バグの発見が難しい。内部で乱数が使われているのも輪をかけてバグの発見を難しくしてくる。
なので自動テストで一個づつ動いているか確認しようと思ったのだが、ちゃんと動いてるはずだったのに自動テスト書いたら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
}
あれ
学習には遺伝的プログラミングというのを使っています
深層学習は面白くないので……