LLMの今後

生成AI系の開発費用がデータセンターなどの箱もの偏重になっているのにはかなり懸念点がある。

1. 効率的なモデルまたは学習手法の登場の可能性
 3年ぐらいあれば、現在の生成AIが前提としているTransformerよりも高性能で、かつ少ないパラメータ数のモデルアーキテクチャが登場することは十分想定できる。すでにMambaなどTransformerではないLLMであっても、同程度のパラメータ数であればTransformerと同程度の性能がでることが分かっている。現在の商用LLMがTransformerベースですので、世界最高性能を競っているのはTransformerベースですが、原理的にはMambaでも同じ程度学習させれば同程度の性能がでる。さらにTransformerは入力トークン数の2乗に比例した計算回数が必要だが、Mambaは線形なので、必要となるGPUサーバーは大幅に減る。ざっくり言えば10000台のサーバーが必要なところMambaは100台ですむ。NVIDIAのLLMであるNEMETRONはMambaを拡張したモデルになっている。
 今後、どれぐらい劇的に学習のための計算量が減る可能性があるかというと、深層学習の一世代前に一世を風靡していた学習アルゴリズムであるSVMの場合、初期には数時間かかっていた学習が、10年ぐらいの間に性能を落とすことなく数ミリ秒まで短縮された。これは最適化手法がSMOからDual Coordinate Descentに進化したため。深層学習の学習手法は、誤差逆伝播だがこれは人間の脳の学習法とは異なっている。実はもっと効率的な学習手法が存在していて、まだ誰も気が付いてないのかもしれない。学習アルゴリズムの工夫で、計算量は数万分の一ぐらいにはなる可能性が十分ある。つまりは、サーバーは数万分の1の数で足りるということになる。
 また、大量のサーバーが必要なのはLLMの学習の場面であり、deploy の場面ではゲーミングPC程度の性能で足りる。利用状況にもよるがモデルを圧縮すればCPUだけのパソコンでも動作する。

2. LLMの商業化で利益を出せるのは2社程度か
 将来のことはわからないが、検索エンジンの黎明期を参考にすると、ビジネス的に生き残るのは2社程度かもしれない。インターネットの登場とともに、検索サービスが新ビジネスとして登場した。今のAIスタートアップのように、1998年頃は、AltaVista, Inktomi, Yahooが先行していた。その後、ページランクを開発したGoogleが後発の検索エンジンのスタートアップとして登場した。今サービスとして生き残っているのはGoogle, Yahooで検索エンジンとしては実質Googleの一人勝ち。この手のソフトウェアサービスは勝者一人勝ちになる可能性が高く、残れなかった会社は消えていく。問題は、今のAIバブルでは日本の国家予算並みの投資がされているので、巨額の投資をしている分がもし回収できなければ出資者にとって巨額の負担となる。かなりの丁半博打になっている気がする。個人的には OpenAIとAnthropicは両方素晴らしい技術を持っている会社なので、今すぐにでも2社を統合しないと経営的に共倒れになってしまうのではと懸念している。

LLMアラインメント

 最近になって、「LLMのアラインメントが。。。」という文脈でアラインメントという言葉が使われていて違和感がある。以前からAIやNLPにおいて専門用語として使われている「アラインメント」と競合していて、理解の妨げになっている。これまでAIやNLPで使われてきた「アラインメント」とは、具体的な2つの単語や概念のグループの間に対応を付けることを指す。例えば、一世代前の翻訳手法では、原言語を目的言語に翻訳した対訳文を大量に収集し、対訳文ペアの単語列の間に対応付けをすることをアライメントと呼ぶ。対応がつけば、それらを元に一般的な翻訳のルールを作成したり学習させたりできる。また、AI分野においても、別々に作成された2つの類似したオントロジー(知識ベース)の概念ノードの間に対応付けをすることをアラインメントと呼ぶ。これらは長年にわたり確立された専門用語であり、この2つの例でも、アラインメントとはなんらかの類似性を持つ2つの構造間のマッピングを求めることだ。
 ところが、GPT-4あたりで、インストラクション・チューニングのことをアライメントという呼んだことで用語の混乱が生じている。マスコミなどがアラインメントをこちらの意味で使うので、その流れに流されそうになっているが、由緒正しいAIの専門家は専門用語の使い分けには慎重であるべきだろう。こちらの語源は“value alignment”(価値の整合)から来ているようだ。こちらのalignmentが指しているものは工学的な「制御」や「調整」に近く、alignmentという言葉が若干ミスリーディングという批判も研究者の間にはある。端的に言えば、「LLM alignment = LLMを人間にとって都合よく調整すること」であり、構造間の対応づけというよりは行動矯正に近い概念だ。そのため、少なくとも専門家がAIについて語る文脈では用語の混乱を避けるため単にアライメントと言わず、行動矯正とか価値整合と呼ぶほうが相応しい。GPT-4でのRLHFの実装は行動矯正の近似手法になっている。
 なお、誤解がないようにしたいのは、用語の混乱があることが問題であって、行動矯正ができる、とかできない、ということを言いたいわけではない。単純に機械学習の基礎原理から考えて、何兆個ものパラメータを現状のデータ数で矯正しきれるわけがなく、また温度設定などにより確率的に生成が振れる時には、何等かの意図しない出力が出るのは避けられない。実用的には、アルゴリズミックにLLMの出力を監視するか、BERTなどを使って予測可能で、性能の高い方法でLLMを監視するといった方法を用いることになるだろう。単純には、LLMが単語を生成するときに、生成できる文に文法的意味的制限をルールによりかけて、ある枠内の文しかでないようにすることは確実にできる。その一方、表現が制限されるので実用性は下がるのでどうバランスさせるかが課題。

現在のAI(実体はLLM)の限界

 深層学習における大発明のひとつであるCNNの発明者のヤン・ルカン氏が科学的・専門的見地からAIについて語っている。LLMがASIにつながるとは思わないと断言している。ChatGPTなどの大規模言語モデル(LLM)は、画像や音声の認識と生成ができるまでに進化している。これは画期的なことだが、実際はLLMに対して、画像などを分割してトークンという記号にエンコードして、LLMに付加する追加学習を行っている。非常に簡単にいうと、言語を軸にして、それ以外のモダリティを言語にぶら下げる形でマルチモーダルな入出力を可能にしている(ただし、画像の生成には拡散モデルを呼び出していたりする)。LuCun氏はこのアプローチには限界があると指摘する。人間の子供は視覚や触覚など、言語よりも何万倍も情報量の多い情報源から学習している。つまりは、現在の言語中心のモデルに他のモダリティを付属させただけでは外界に即した思考できないと主張していると理解した。
 またインタビューの中では直接説明されてなかった気がするが、現在のLLMは地球上のほとんどすべての言語データを学習に使用してしまっていて、言語データの量の面ではこれ以上発展する余地がない。言語データの活用法にはまだ発展の余地があるが、これまでのように巨大IT企業が、資金力に任せて大量の文書データを何千台ものGPUサーバーに何の工夫もせずに突っ込むとLLMの性能が向上する、というアプローチには限界が来ている。そのため、今はフィジカルAIなど言語以外のデータを食わせる方向に開発が進んでいる。

www.youtube.com

 誰でも使えるオープンソースモデルとしてLlama がMetaから公開されたのは研究業界にとっては非常に画期的なことだった。それをMetaの中で強く推奨したのがLeCun氏。

 このインタビューを聞いていて、(インタビュー中に誤解があったわけではないが)ふと心配になったのは、専門知識のないひとたちが現在の生成AIに関して理解しようとするとき、もしかすると self-supervised learning (自己教師あり学習)を自律学習のように誤解しているのではと不安になった。self-supervised learning は専門用語(あまり良いword choice ではないが、使われているので仕方ない)で、「人手で正解データを作成することなく、収集した生データをそのまま活用することにより教師あり学習を行う手法」のこと。たとえば、収集した言語データの中の文の途中までを入力として与えて、次に続く単語を予想するように学習を行うことで、人手で正解を用意しなくても言語モデルを学習できる。決して、自分でモデルアーキテクチャを改良しながら勝手に進化していく学習のことではないので要注意。なお、self-supervised learning を「教師なし学習」の一種と説明する人も一定数いる。教師データ(オラクル)を作成しないので「教師なし」と言いたくなる気持ちはわかるが、純粋な機械学習手法として考えると「教師なし学習」ではない。

コーディングエージェント

 最初にコーディングエージェントを使ったときには、かなりの手ごたえと驚きがあった。プログラミングに特化してインストラクションやシステム化が適用されているとはいえ、LLMをコーディングにここまでフィットさせられるのかという感動があった。
 ただ1ヶ月以上使っているとかなり粗もみえてきて、コーディングエージェントは単なる便利なツールであるということに気が付く。大規模なソフトウェア開発では、典型的には、要求の分析に20%、 基本・詳細設計に30%、コーディングに20%、テスト・デバッグ・手戻りに30%ぐらいのエフォートが必要になる。コーディングエージェントができるのは、20%の部分なので、ここの時間が1/10になっても20% ぐらいの効率化にしかならない。その他の仕様書の作成やレビューの支援にもなるので他の部分で楽になる部分はある。ただし、コーディングの効率が10倍になっても、その人の品質のまま10倍になるので、プログラムが読めない人が10倍プログラムを作っても、品質の低いコードを増産することになる。完全な素人がわけもわからずプログラムを生成させても、それが本当に想定した指示の通りに出来ているかチェックできない。そのため、コーディングは早くなるが、そのコードのチェックや理解の時間がプラスされる。案外、指示した通りにはプログラミングされていないので、プログラミングができない人の指示は、プログラムコードに対応しなくて、思ってもない方法で実装しているかもしれない。例えば、「誕生日から年齢を計算するプログラムを作成せよ」という指示をしてできたプログラムは、今日の日付をハードコーディングしているかもしれない。今日は動くが明日は間違った答えを出す。また、「データベースから○○データを取り出すプログラムを書いて」と指示して、出来たプログラムがDBサーバーのIPアドレスとアクセスパスワードを平文テキストで埋め込んでいるかもしれない。一流のプログラマは、コーディングエージェントの作成したプログラムをレビューして理解できたものをアクセプトする。そうしないと、業務上の問題が起きたときに対処できない。
 見た目は、複数のサブエージェントにコーディングやテストを分割したりして、すごく賢くみえるが、実態は別のLLMプロセスに仕事を分割しているだけで、エージェントが組織を作って会社員のように勤務しているというわけではない。
 このあたりの事情は、最前線のエンジニアのお話が説得力がある。なお、マイクロソフト・リッチモンドでは数カ月前にコーディングエージェントブームは終わって、普通に便利なツールになっているとのこと。

マイクロソフト コーディング

人工超知能(その2)

人工超知能(ASI)の厳密な定義は難しいが、どのような条件を満たすとASIと呼べるかについて、一般に使われている定義は下記。

Artificial Superintelligence (ASI) refers to a form of AI whose intellectual, problem-solving, and decision-making capabilities far exceed those of the brightest human minds across every single domain.

つまりあらゆる問題解決などの課題に対して、最も優秀な人間を遥かに凌駕する能力を持っているAIがASIという定義だ。この定義がASIの定義であるという前提の下でASIが実現不可能なことを証明する。

言明「全ての分野において人間を凌駕すること」が成立するということは、この言明について1つの例外もないということでである。1つでも例外( counter example)があればこの言明は否定される。

例外は他にもたくさんあるが、答えの正しさを基準とすると、例外のひとつは「1回の一桁の十進整数の足し算」である。「一桁の足し算」は答えが1つであり、人間と同等の答えはだせるが、人間よりも遥かに良い答えは存在しない。そのため、人間を遥かに凌駕する答えを出すことはできない。よって、ASIの定義を満たすAIは実現できない。(証明終)

こう書くと、必ず計算速度が人間より速いという反論があるが、ここで定義上「人間を超える」基準には制約はなく、自由に設定できる。この場合、あらゆるケースのひとつとして、答えの正しさを基準とすると決めているのでこの反論は成り立たない。

さらに一般化すると「人間が答えを求める方法を知っており、かつ答えが常にひとつに定まる課題については、人間を遥かに凌駕する答えが存在しないため、人間を超えることはできない。よって定義に従ったASIは実現できない」となる。

この他、厳密な証明は難しいが「法律・倫理・マナー・風習・慣習・感情を考慮する必要がある日常の判断」で人間を超えるのは、人間と同じ身体・感情をもたないとできそうにない。このほか、「ランダムネスに支配されるゲームで人間を凌駕する」ことも不可能と言っていい。人間と同等にしかなれない。

さらに、今AIと言われているものの実態はLLMですので、1+1という文字列を見て、過去の文章に2と書かれていることが多いので2と答えているだけだ。中に四則演算機構を持っているわけではありません。もし、例えば「1+1=3」という大ヒット曲が出て、ネット中に1+1=3という記述が何億回と出て来ると、そこから学習したLLMは1+1の計算ですら間違える可能性が高まります。

IJCAI2027

 AI分野で最大の国際会議 36th International Joint Conference on Artificial Intelligence (IJCAI 2027)が2027年8月に京都で開催される。IJCAIはAI関係の国際会議の中のトップカンファレンスの1つであり、ここに1度でも筆頭著者で論文が通ればすなわち一流研究者の仲間入りだ。世界各国の一流研究者が自信のある研究成果を全力でまとめた論文の中で、厳しい査読を乗り越えた19%程度しか採択されない狭き門である。ここに確実に採択されるには、incremental な研究ではなく、明らかなオリジナリティと大幅な性能向上など明確な成果があり、読みやすく内容の間違いもない完璧な論文であることが求められる。もちろん、ボーダーライン近辺の論文はこれらのどれかが欠けていることもあるが、良い論文が運悪く落ちることはあっても、ダメな論文が間違って拾われることは滅多にない。日本のAI関係者は全員投稿するはずなので、来年日本の誰がIJCAIで発表するのか注目したい。私の研究室からも数件投稿する。
 この手の国際会議の開催地は毎年世界各国を回っていて、2021年にIJCAI2020が横浜で開催されて以来の日本での開催になる。その前の1997年には名古屋で開催され、まだ若手だった私も階層知識を取り込んだILPについて発表した。IJCAI2027のプログラム委員会に参加するよう招待を受け、受諾したところだ。

人工超知能

 このところの生成AIの進歩は著しく、1つ前の記事で書いたように、ソフトウェアシステムの作成にあたってのコーディングの部分はかなりの部分が指示だけでできるようになってきている。これまでのソフト開発は、「何を作るか」と「どう作るか」の両方を人手で行う高度に知的な作業だったが、コーディングシステムを使うことで、前者の「何を作るか」を決めれば、「どう作るか」の詳細はシステムに任せられる。これは、たとえて言えば、自動車の運転がマニュアルシフトからオートマに変わったような感覚だ。現状は、初期のオートマと同じように、ギアチェンジがガタガタしたり加速時にクラッチがすべったりするような欠点があり、マニュアルの方がスムーズな運転ができるような状態だ。ただ、ギアチェンジをしなくていいので、多少のガタツキを我慢すれば、かなり実装の部分は楽にはなっている。体感的にソフト開発の効率は10倍ぐらいになっている。ただし、素人でもプログラム開発できるようになったわけではなく、プログラミング能力が低いと何が作られているかが分からないで、他人の作ったプログラムを読むのと同じ状態になり、想定と異なる動作が起きたときの原因の究明や対処ができなくて詰む。
 何を作るかを指示するのに、フローチャートやUML図を描いて伝える必要はなく、仕様を言葉で伝えればよい。たとえば、「動作中にGPUの最大消費メモリを記録する機能を追加して」と指示すると、ほぼ人手での修正が不要なレベルで、GPUの使用量が記録されている変数に対して、最初に初期化し、最後に消費量をプリントしたり、ログファイルに残したりするコードが追加される。その過程で間違った編集をしてないかをチェックするテストプログラムをいくつか生成して、元の機能や動作が維持されていることを確認する。このあたりは、事前にテストするように手順を組んであるのであろう。また、「プログラムのコメント文を全て消して」というと、人間ならコメント文をひとつひとつ見て消していけば、元のプログラムを壊さないことがわかるが、コーディングシステムは、ある種の確率的で機械的な書き換えを行うので、プログラムを壊す可能性がある。そこで、まずプログラムの構文構造を抜き出すプログラムを書いて、修正前後で字句単位で構造を含めたプログラムが変わってないことを確認する。
 この辺りになると、かなり違和感がある。言葉で指示していても、人間とは違うことを常に意識しないといけない。指示した通りにやりました、と答えていても、まったくその通りなっていないことがある。これは何等かの思い込み(事前知識)がそうしない方が良い、という方向にコーディングシステムを誘導されているが、自身は指示通り書き換えた気になっている。
 コーディングシステムは、基本的には過去に公開されたプログラムを含めて学習した言語モデルである。使っている感じでは、さらにプログラミング支援のための様々な手順を教え込んでいるので、破綻したプログラムを書かないようになっている。ただ、よくわからないところは、空の関数を書いて埋めておく、など平気でやる。これは言語モデルの特性として、学習した文字列と同じような系列を、指示に従って生成する、があるためだ。大規模言語モデルの中身を理解していれば、基本的に入力Xに対して、出力Yの確率が最大になるようなYを条件付確率P(Y|X; θ)に基づいて計算しているだけだ。ここでθはニューラルネットワーク(ほとんどは大規模言語モデルはTransformer)のパラメータで数億個~数兆個ある。なお、人間の脳神経細胞と違って、このパラメータは会話の過程では変わるものではなく、大量文書による事前学習(またはファインチューニング)の後に固定される。そのため、コーディングシステムは過去の経緯を人間のようには記憶していない。毎回、過去の対話履歴をXに与えて、Yを出力しているので、過去のことを覚えてるように見えるだけだ。実際、コーディングシステムを使っていると、さっき変えた関数をこう変えて、というと、さっきの編集の続きをやるのではなく、変更する関数を検索して、該当部分を抜き出し、どう変えるかを検討する。過去にどう変えたかは人間のようには覚えていない。そのため、言葉で指示するときは、具体的に何をどう変えるということを書いて、他は変えない、など制約を書けないといけない。それでも確率で動いている言語モデルなので、ときどき指示通りに制約がかからないで、勝手に関連部分を書き換えて、平気で書き換えました、と報告して来る。
 特に、過去に作られたことがあるプログラムに沿ったプログラミングは強力で誤りがほとんどないため、典型的なプログラム作成の効率化にはかなり貢献する。一方、研究レベルのプログラムは、仕様を決める部分に幅広い選択肢があり、過去にやられていない方向に進む必要がある。そのため、ある種の妨害を受けることもある。妨害といっても悪意はなく、こうやっても性能は上がらない、と言われる方法を常識を覆して性能を上げるアイディを確認しようとしても、それはダメだというプランを作成しがちだ。実際、TransEからComplExに切り替えるように指示したところ、たまたまComplExで低いスコアが出てしまった記録が対話ログに残ったため、たった1度の特定の設定でうまくいかなかった状況を元に、ComplExはダメだいうことを言い続けるようになった。その後、無視してComplExに切り替えて無事性能が上がった。基本、コーディングシステムが次々に作る(ように躾けられている)プランはすべて却下して、全部自分の思い通りの方向に進むよう指示している。この辺りの実感からすると、現状のコーディングシステムに生成AIのモデルの改良をやらせても、全自動ではうまく行くとは思えない。現状はすぐに枝葉末節の評価検証に落ち込んでいき、計算資源と電気代を無駄にするだけだ。時間感覚や金銭感覚がないので、1回8時間かかる学習を何十もの組み合わせでやろうとする。確かにあらゆる組み合わせで検証しながら着実に進むのは正しいのだが、そんなことをしていると先に全く進まない。見込みのなさそうな選択肢はさっさと切り捨てて、大胆な工夫にチャレンジしていかないと新しい発見にはつながらない。
 さて、タイトルの人工超知能になかなか行きつかない。今の大規模言語モデルがあまりにも見事に対話をしているかのようにふるまうので、誤解している人が多いが、大規模言語モデルはAI技術の1つではあるが、AIではない。言語モデルは、ある言語の単語列の確率をモデル化したものだ。この世にあるほとんどすべての文書を学習しているので、だいたい何についてもそれらしい文章を生成できる。「頭が痛い」というと「それは大変ですね。」というのは心配しているのではなく、単にそういう単語列の確率が一番高くなるからだ。「昨日は居酒屋でビールを○○」のとき、○○に入る単語の確率は、「食べた」より「飲んだ」の方が高いというのと同じこと。さらに今はRAGという方法で、リアルタイム検索と言語モデルが組み合わさっているので、Xに質問文だけでなく、検索結果も併せて入れて、Yを生成しているため、初期の頃と違ってあまり頓珍漢なことは言わなくなった。現状は、人工超知能どころか、汎用人工知能(強いAI)の実現もまだ先だ。ポチョムキン理解と合わせて考えると、さらなるブレークスルーがないと強いAIの実現も難しそう。
 私の好きなSFにJ.P.ホーガンの「未来の二つの顔」がある。このSF小説は、まさに今AI脅威説を唱えている人の言うような未来を描いている。SFとしては面白い。「2001年宇宙の旅」にHAL9000という対話するコンピュータが出て来る。私が子供の頃は、2001年には当然これぐらいの対話でできるだろうと期待していた。実際にHALに近い会話ができるようになったのは2023年頃。かなり期待より技術の進歩は遅れている。正確には現状でもHALには追い付いていない。まあ、SFは未来を描いているのでなかなかその通りにはならない。2112年までドラえもんはできるのかと同じような話ではある。人工超知能について語るには、何が知能かを科学的に定義して、次に何が超知能かを科学的に定義しないと話が始まらない。ぼんやりした定義で話していても「宇宙人が地球に攻めて来る可能性がある」という話とレベルは変わらない。どんな予想にも極僅かな可能性はある。もちろん、現状の生成AIが問題を起こす可能性はある。それは企業に責任を負わせなければならない。特に、ハッキングの問題は簡単に起きる。たぶん、ハッキングの手口やプログラムについては学習の過程でモデルに善悪関係なく取り込んでいるので、Windows, iOS, Linuxなんでもセキュリティホールを見つけるのは簡単だろう。ローカルな環境で、コーディングシステムや大規模言語モデル自体にプログラムを直接実行させることは許可しないようにするべきだろう。今は、コーディングシステムが修正をGithubのレポジトリに反映させた後、レポジトリからプログラムを取って来て、手元のサーバーで動かしていて、コーディングシステムにローカルファイルやローカルリソースへのアクセス権は与えてない。ローカル環境でコーディングアプリを使うときは相当な注意が必要だ。私はブラウザベースで使っている。コーディングシステムによるプログラム実行は、すべて向こうのクラウドサーバーのケージの中で行われている。向こうのケージでは、外部アクセスもできないし、GPUも使えないらしい。可能性としては、作成中のプログラムに実行するとハッキングを行うようなコードを埋め込む可能性がないとは言えないが、そこはちゃんとGithub上で修正履歴をチェックしておけば防げる。あくまで便利なツールとしてコーディングシステムを使いこなさないといけない。気を付けないと、コーディングシステムに次々にこの実験をして、と指示されて、その通りにしていると下働きにされてしまう。その結果、自分の思っていたのと違う方向に進んでいき、結局は時間を無駄にすることになる。