{Bedrock}{あれ}{Cartesian Genetic Programmingで文章の類似度を学習}(3)
{Cartesian Genetic Programmingで文章の類似度を学習}{バグ}{人工知能}(3)

{あれ K#EDD2/CE5F}

ほげええええええええ
バグっとったやんけええええ絵

そりゃ学習しませんぜ旦那って案件だった

人工知能のプログラムコードのバグを発見するのはすごく大変

3日かけて学習させて出したスコアを5分の学習で上回ってきて「こいつ……いけるのでは……!?」となってる

とはいえまだスタートラインに立ったばかりだ。

{Cartesian Genetic Programmingで文章の類似度を学習}(1)
{Cartesian Genetic Programmingで文章の類似度を学習}(1)
{Cartesian Genetic Programmingで文章の類似度を学習}{WebGPUで遺伝的プログラミング}{wgpu-native}{WebGPU}{Go言語}(5)

{あれ K#EDD2/02D0}

Go言語WebGPUしようとしてるマン。

WebGPUをネイティブで動かす、wgpu-nativeという得体の知れないライブラリを使っている。

WebGPUならWindowsでもMacでも動いてお得なので。

そして、それを使って遺伝的プログラミングを動かそうとしている。おそらくWebGPUで遺伝的プログラミングは世界初だろう。ニッチすぎてやる人がいない。

{Cartesian Genetic Programmingで文章の類似度を学習}(1)
{Cartesian Genetic Programmingで文章の類似度を学習}{あれ}(2)

{あれ K#EDD2/4160}

tokenAとtokenBの全組み合わせからEmbeddingを計算して平均を取る」方式を試してみている。まだパラメーターのチューニングお済みでないので最高スコアは良い感じに伸びない。ただ、良さそうなところまでは安定して学習してくれる。

入力となる単語ベクトルの突然変異に対して驚くほど頑健になった。再帰的構造をとっていた際には単語ベクトルの突然変異率を0.01倍程度の確率にしてやっと学習していたが、現在の方式では突然変異確率を1倍にしても学習している。突然変異による変動の範囲は「Intの最大値/10」とかいうアホみたいなことをしている。普通に考えれば学習するはずはない。

20個体で190世代目ぐらいのところで学習の処理が固まってしまう。一文が長いとだめっぽい。計算量がO(N^2)になるので、それはそう。

{Cartesian Genetic Programmingで文章の類似度を学習}{あれ}{学習データ}(3)

{あれ K#EDD2/95C6}

末尾の「だ、である」調と「です、ます」調 で Sentence Embeddingが極端に変わってしまって、類似度が低くなるのは、学習データの偏りもありそう。私t_wがデライトに投稿した文章から学習させているので、「だ、である」の文章が偏って多い。

{Cartesian Genetic Programmingで文章の類似度を学習}{tokenAとtokenBの全組み合わせからEmbeddingを計算して平均を取る}{あれ}{Attention}(4)

{あれ K#EDD2/059E}

950世代学習させたが全然良くなってない。学習データに対する適応度は高まっているが、検証データに対する適応度が全然高くなっていない。つまり汎化性能が高くなっていないのだ。過学習してしまった可能性がある。あるいはモデルの性能に対して学習データ量が足りていない。いよいよWikipediaのデータを学習させるときが来た。ということか。

ちょこちょこ触って文章の類似度を出させてみているが、末尾の「だ、である」調と「です、ます」調によって結果が大きく異なってくる。例えば、「今日のご飯は焼肉だ」と「今日のご飯は焼肉です」は類似度が低いと判定される。おい。
いや~~~、再帰的構造でもって文章を先頭から末尾まで読み込む関係上、「文章の末尾」に引きずられてしまうらしい。
つまるところ、下記のような構造になっている。したがって、現時点での文章ベクトルを次の時点の入力としている。

正直、こいつはあまりイケてないっぽい。「再帰的入力のベクトル長を長くする」「Attention的な仕組みを取り入れる(よくわかってない)」「文章の末尾でEOF相当の値を入力する」「畳み込み積分的に計算する」「全tokenAとtokenBの組み合わせからEmbeddingを計算して平均を取る」などが考えられる。