LLMの課題、Geminiで「ソフト・シンセサイザー」を作ってみました。

 Geminiでソフトシンセサイザーを作ってみました。

多少専門知識が必要ですが、シーケンサーやエフェクターを搭載した本格的なシンセサイザーがほぼ一発で作れます。AIを利用すれば誰でも無料でシンセサイザーを入手できます。

画像をクリックするとシンセサイザーが起動します)

凄いですよねー、昔はエフェクターのリバーブだけでも単体で10万円はしましたからね。それがタダでしかもすぐに手に入ります。もちろん音もクリアーで市販品レベルのクオリティの音が鳴ります。

もちろん以前作っていた「Cardputer-Adv」のシンセに比べると音のクオリティーは格段に上です。その要因はパソコンの処理能力と小さなマイコンの処理能力の差で、音声波形をリアルタイムにシミュレーションしているので、これはどうしようもない処理能力の問題です。やはりマイコンは非力で能力的には格段に劣ります。それでも挑戦する意義はあるのですが、今回あまりにもあっさりと高級シンセが作れてしまったことで戦意を消失しています。

ただ、これまでの実験を通して現状のLLMの大きな課題に突き当たりました。
LLMは(Large Language Models/大規模言語モデル)というプログラムで、「言語」を扱うためのAIプログラムです。つまり「言語」以外は特に優秀ではないということです。端的に言えばプログラムを作るために作られたAIではないということです。

システム開発を行った事がある方ならわかると思いますが、一つのシステムを構築するためには機能要件の整理から始まって、概要設計や仕様設計、詳細設計やテスト設計等々、コーディング以前に膨大な設計の整理が必要ですし、システムを稼働させる環境設計やソフトプロダクトの選定などやることは膨大です。こういった膨大な作業をAIがやってくれたら大変助かりますが、残念ながら現状のAIモデルはこのような複雑な作業には向いていません。というかほぼ無理です。

何故ならLLMは、あくまでもお喋りするための「言語モデル」だからです。
試しにプロンプトに「オセロゲームをできるか?」と聞いてみてください。「もちろん出来ます」と返答をするので、実際にゲームをやってみてください。昔よくあった文字キャラを並べたオセロ盤を表示すると思うので、自分のコマの座標のアドレスを指定するとゲームが遊べます。

やってみるとわかりますが、3手目までは普通に進むと思います。でも4手目でほぼバグります。GeminiもGrokも4手目でバグって、オセロ盤の状態を維持することもできなくなって思考が止まりました。

LLMの構造はプロンプトに入力された文字列情報を整理して、それに関連する情報の確率マップから返信すべき文字列をサイコロを振って一番確率の高い一文字を返すということを繰り返しているだけです。つまり人間のように文章の全体を捉えて意味を理解して返信しているわけではなく、あくまでも文字列の確率の問題を1文字ずつサイコロを振って返しているだけです。これがLLMなんです。

現状のAIは一つのセッションが始まった冒頭から毎回入力したプロンプトや返信の文字列を読み返して次の一つ文字を探し続けるわけですが、オセロ盤のようなよく似た文字列が続くと段々と状況が掴めなくなって、3、4回続けると何が最新の状態なのか?何を返信すればよいのか?混乱して暴走するようです。

そのことはGeminiもGrokも正直にそんな状態になって混乱したと答えました。つまり8*8のたった64個のデータも保持して管理できないという構造的欠陥です。

実はこれが今のAIの最大の課題で、LLMは簡単なスタックメモリすら持っていないので、現状の状態を維持できないという制限があります。そのために常にプロンプトと返信を毎回読み返すことで次の一文字を探すわけですが、同じような文字列が連続で続くとその区別が難しくなるようです。

だから以前の「Cardputer-Adv」でのシンセ開発には時間もかかって苦労しました。序盤に生成したコードを無視して全然別のコードを生成するなんてことは頻繁にありました。今何をやっているのか?という認識がとても苦手だということです。なので大規模なシステム開発ではセクションを細かく区切りながら、目的を絞って使わないとうまくいかなくなります。AI動画などで途中でキャラが変わっているものをよく見かけますが、まさにあのような混乱状態に陥る可能性が高いということです。

だからAIに処理を指示するなら3手以内に収めるほうが無難だと思います。それでも途中で混乱することはあるので、できれば1発で回答を引き出すようなプロンプトが安全です。コード開発の場合は、途中で一旦成果物を保存するために「これを(成果物1)とする」といったプロンプトを間に入れておくとAIの混乱は少なくなります。

今回Javascriptで作ったブラウザで動作するソフト・シンセサイザーは、そもそものオーディオ・ライブラリーが優秀なので、簡単なパラメーターを繋ぐだけでシンセサイザーが作れます。コード的には300行ほどでシンプルです。現状は単音ですが、ポリフォニックや複数トラックにも改造は可能かと思います。



Amazon M5Stack Cardputer
M5Stack Cardputer


Amazon M5Stack Cardputer
M5Stack Cardputer


Amazon WOODEN.CITY 3D 木製機械モデルセット Willys 4x4
WOODEN.CITY 3D 木製機械モデルセット Willys 4x4


Amazon ROKR 立体パズル 木製 スチームエンジン 蒸気機関車
ROKR 立体パズル 木製 スチームエンジン 蒸気機関車


Amazon ROKR 3Dピンボールマシン
ROKR 3Dピンボールマシン


Amazon 帆船模型
帆船模型


このブログの人気の投稿

空き缶スターリングエンジンの作り方

カードサイズの小さなコンピュータ「M5Stack Cardputer ADV」でソフトシンセは作れるか?

ちっちゃなコンピュータとAIとの付き合い方 M5Stack Cardputer ADV

ファミコンゲームの作り方「X6 Game Player」

小さなシンセサイザーを作っています。M5Stack Cardputer-ADV

超簡単!お部屋で凧あげが楽しめる「マイクロ・カイト」の作り方

スケートボード用ウィングの作り方

Scratchでどこまで作れるか? ゲーム作成ツールとしての実力

ウクレレ入門♪ 簡単コード表

TIC-80で簡単なプログラムを作ってみる