{『ニューロ・ファジィ・遺伝的アルゴリズム』}{Cartesian Genetic Programming}{遺伝的プログラミング}{誤差逆伝播法}(4)

{あれ K#EDD2/705F}

遺伝的プログラミング誤差逆伝播法を組み合わせるにあたって、誤差逆伝播法の具体的計算方法がウェブを見ていてもわからんので、『ニューロ・ファジィ・遺伝的アルゴリズム』を戸棚から引き出してきた。誤差逆伝播法の章にt_wの書き込みがされており、理解の道筋をたどることができる算段。

ただ、紙の書籍で取り回しが悪いので、アレしましょう。デライトに書きましょう。

{Cartesian Genetic Programming}{遺伝的プログラミング}{アイデア}{ONNX}(4)

{あれ K#EDD2/9253}

遺伝的プログラミングの学習結果をonnxにするというアイデアが降りてきた。
onnxのエコシステムに乗っけられるのが嬉しいポイント

{オーバーフロー}{Cartesian Genetic Programming}{遺伝的プログラミング}(3)

{あれ K#EDD2/FF19}

遺伝的プログラミングの計算を小数にしたら学習しなった。シット!!

整数値で計算させていた時には、数値が巨大化する問題がオーバーフローによって回避されていたらしい。

{Cartesian Genetic Programmingで生成したプログラムを誤差逆伝播で学習}{Sentence Embedding}{Cartesian Genetic Programming}{遺伝的プログラミング}{誤差逆伝播法}(5)

{あれ K#EDD2/C932}

遺伝的プログラミング誤差逆伝播法行くぞ!!!

遺伝的プログラミング(Cartesian Genetic Programming)で得られたグラフ構造に内在するパラメーターを誤差逆伝播法で学習してやるのだぁ!!

遺伝的プログラミング単体ではどうにも学習が進まないのでやってやろうじゃねぇかよとなった。

『生成 AI に必要な「基盤モデル」のメモリ使用量 98%削減につながる技術を開発 ─ 自動運転車や工作用ロボット用組み込みシステムへの搭載を目指す』も背中を後押しした。良い構造の小さいモデルで良い性能が出せることが示された。

{Cartesian Genetic Programmingで文章の類似度を学習}{再帰関数}{遺伝的プログラミング}{並列処理}{遺伝的アルゴリズム}{自動テスト}{Goroutine}(7)

{あれ K#EDD2/9DE9}

遺伝的アルゴリズムにしろ、遺伝的プログラミングにしろ、与えられた課題に有利なバグがあったら徹底活用してくるし、不利なバグがあったら徹底回避してくるので、バグの発見が難しい。内部で乱数が使われているのも輪をかけてバグの発見を難しくしてくる。

なので自動テストで一個づつ動いているか確認しようと思ったのだが、ちゃんと動いてるはずだったのに自動テスト書いたら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
}

(1){あれ}
{あれ}{遺伝的プログラミング}{深層学習}(3)
{遺伝的プログラミング}

{}