Amazon Bedrockが出ちゃったのでCartesian Genetic Programmingで文章の類似度を学習させるのは一旦止まっているけど、自前でカスタマイズできるモデルがあると用途がぐっと広がるのでまた再開したい。
{あれ K#EDD2/48A4}
t_w 「プロモーションを含みます」Amazon Bedrockが正式公開されてしまったので、いよいよknownetにベクトル検索を実装せざるを得ない。
Cartesian Genetic Programmingで文章の類似度を学習は一旦凍結とする。
{あれ K#EDD2/CE5F}
t_w 「プロモーションを含みます」ほげええええええええ
バグっとったやんけええええ絵
そりゃ学習しませんぜ旦那って案件だった
人工知能のプログラムコードのバグを発見するのはすごく大変
3日かけて学習させて出したスコアを5分の学習で上回ってきて「こいつ……いけるのでは……!?」となってる
とはいえまだスタートラインに立ったばかりだ。
{あれ K#EDD2/464B}
t_w 「プロモーションを含みます」プログラムのサイズを17MBとデカくしたら成績が良くなった。つまらん。
{あれ K#EDD2/A84F}
t_w 「プロモーションを含みます」秒間のプログラム実行数を増やしたい。ネチネチとCPUでの処理を最適化する。
WebGPUはなんかうまくいかない。
{あれ K#EDD2/02D0}
t_w 「プロモーションを含みます」WebGPUをネイティブで動かす、wgpu-nativeという得体の知れないライブラリを使っている。
WebGPUならWindowsでもMacでも動いてお得なので。
そして、それを使って遺伝的プログラミングを動かそうとしている。おそらくWebGPUで遺伝的プログラミングは世界初だろう。ニッチすぎてやる人がいない。
{あれ K#EDD2/9913}
t_w 「プロモーションを含みます」遺伝的プログラミングをWebGPUに移植すれば爆速になる予感がする。
学習結果を数式に変換してやるのだ。
{あれ K#EDD2/4160}
t_w 「プロモーションを含みます」「tokenAとtokenBの全組み合わせからEmbeddingを計算して平均を取る」方式を試してみている。まだパラメーターのチューニングお済みでないので最高スコアは良い感じに伸びない。ただ、良さそうなところまでは安定して学習してくれる。
入力となる単語ベクトルの突然変異に対して驚くほど頑健になった。再帰的構造をとっていた際には単語ベクトルの突然変異率を0.01倍程度の確率にしてやっと学習していたが、現在の方式では突然変異確率を1倍にしても学習している。突然変異による変動の範囲は「Intの最大値/10」とかいうアホみたいなことをしている。普通に考えれば学習するはずはない。
20個体で190世代目ぐらいのところで学習の処理が固まってしまう。一文が長いとだめっぽい。計算量がO(N^2)になるので、それはそう。
{あれ K#EDD2/95C6}
t_w 「プロモーションを含みます」末尾の「だ、である」調と「です、ます」調 で Sentence Embeddingが極端に変わってしまって、類似度が低くなるのは、学習データの偏りもありそう。私t_wがデライトに投稿した文章から学習させているので、「だ、である」の文章が偏って多い。
{あれ K#EDD2/059E}
t_w 「プロモーションを含みます」950世代学習させたが全然良くなってない。学習データに対する適応度は高まっているが、検証データに対する適応度が全然高くなっていない。つまり汎化性能が高くなっていないのだ。過学習してしまった可能性がある。あるいはモデルの性能に対して学習データ量が足りていない。いよいよWikipediaのデータを学習させるときが来た。ということか。
ちょこちょこ触って文章の類似度を出させてみているが、末尾の「だ、である」調と「です、ます」調によって結果が大きく異なってくる。例えば、「今日のご飯は焼肉だ」と「今日のご飯は焼肉です」は類似度が低いと判定される。おい。
いや~~~、再帰的構造でもって文章を先頭から末尾まで読み込む関係上、「文章の末尾」に引きずられてしまうらしい。
つまるところ、下記のような構造になっている。したがって、現時点での文章ベクトルを次の時点の入力としている。
正直、こいつはあまりイケてないっぽい。「再帰的入力のベクトル長を長くする」「Attention的な仕組みを取り入れる(よくわかってない)」「文章の末尾でEOF相当の値を入力する」「畳み込み積分的に計算する」「全tokenAとtokenBの組み合わせからEmbeddingを計算して平均を取る」などが考えられる。