世界を動かす技術を、日本語で。

LLMは例外に対して致命的な恐怖を抱いている

概要

  • Andrej Karpathyによる AIエージェント の未来に関するXポスト要約
  • AIエージェント が今後のインターフェースとなる可能性
  • 人間の役割 とAIの協調について言及
  • AIの進化 による社会的インパクト
  • 今後の 技術的課題 と展望

KarpathyによるAIエージェントの未来展望

  • AIエージェント が将来的に 主要なインターフェース となる可能性

  • 現在のアプリやウェブサイトに代わる 新たなユーザー体験 の創出

  • 人間の要求 や問いかけに対し、 AIが自動的にタスクを遂行 する仕組み

  • AIエージェント が人間の アシスタント代理人 として機能

  • 個人ごとにカスタマイズ されたAIによるサービス提供

    • ユーザーの 好みや履歴 を学習
    • 最適な提案 やサポートの実現
  • AIの進化 により、より高度な 意思決定問題解決 が可能

  • 社会や産業 への大きなインパクト

    • 生産性向上新しい職業 の創出
    • 一部作業の 自動化による再構成
  • 人間の役割 は、AIと 協調する方向 へシフト

    • 創造性倫理的判断 など、人間特有の価値
    • AIとの パートナーシップ 強化
  • 今後の 技術的課題

    • セキュリティプライバシー の確保
    • 説明可能性信頼性 の向上
    • 倫理的側面 への対応
  • AIエージェント が普及することで、 人間中心の社会 実現への期待

Hackerたちの意見

出力が「何が起こるかわからないから、非常に慎重に行う」と説明していることを考えると、公開されていないプロンプトは「すべてのエッジケースを処理するPythonの割り算関数を生成せよ。非常に注意深く」といった内容だったんじゃないかな。これは、LLMのトレーニングについてあまり語ってなくて、むしろ彼らが言われた通りにやっているだけってことを示してる気がする。

不条理さと明らかな風刺的意図を除けば、1. コードは実際に間違ってる(不条理な例外処理の状況に関係なく間違ってる) 2. 例外処理の一部は意味がない、または矛盾してる 3. プロンプトで例外処理に重点を置くと、実際に起こることがある(編集:現実のシナリオではよくある)

あの関数コードは、彼の体験を誇張して表現した皮肉な例だと解釈したんだ。だから、あの例では過度に慎重に指示されていたかもしれないけど、LLMのデフォルトがちょっと慎重すぎるのには同意するよ。

こういう専門的な初心者プログラムを「ドリブン開発」って呼んでる。実際、専門的な初心者が書いたコードが多いことがわかった。彼らは多くの指標で非常に生産的だからね。今のところ、すべてのSOTAエージェントは同時実行バグに対して異常に防御的になってる。おそらく、ドリブン開発に加えて、同時実行バグに関する警告がたくさんあるブログ記事が影響してるんだろう。

それは論理的に矛盾してるよね。ゼロで割ることは起こらないはずだ。だって、b=0ならabs(b) < sys.float_info.epsilonになるから。さらに、コードは事前チェックからNaNを返すことには問題ないけど、割り算からのNaN結果をNoneに置き換えてる。APIデザインの観点から見ると、全然意味がわからない。

あのコードには多くの問題があるけど、実際に一番気になるのは関数内にインポートを追加する傾向だね。どこかのプロセスで最小限の編集を最適化するための副産物だと思うけど、もっと良いものを期待してる。

インポートを遅延させて、起動時の遅いインポートの問題を解決するためだよ。

超大規模なプロジェクトでは、スタートアップ時間に大きく影響するから、できるだけレイジーイニシャライゼーションを使いたくなるよね。

これってRoPEアテンションのメカニズムに関係してると思う。コード内の物理的な近さが関連性のシグナルになってるんだよね。

なぜかわからないけど、FizzBuzzEnterpriseEditionを思い出した。 https://github.com/EnterpriseQualityCoding/FizzBuzzEnterpris...

え、あのプロジェクトでJUnit 4.8.3使ってたの?誰かが無茶してたな。法務部とCTOからの承認があったことを願うよ。ああいうカウボーイコーディングはキャリアに響くからね。

...フォルダとファイルがめっちゃ多い、見た後にダメージを受けた気分だ。素晴らしい皮肉だね。

LLMは防御的なコードを生産しすぎる傾向があるって気づいた。無駄なチェックが多いんだよね。例えば、同じ値に対してnull/None/undefinedを何度もチェックすることとか。これが原因で、LLM自身にとっても読みづらいコードになっちゃうことがある。RLの目標は例外を厳しく罰するけど、コードの可読性やシンプルさにはあまり報酬を与えないんだろうね。

メジャーシステム用に文字と数字を比較する関数があって、コードが40行くらいなんだけど、コパイロットが「将来のためのガードレール」を追加しようとし始めるんだ。まるで将来的にもっと数字や文字を追加するかのように。ほんとにイライラする。

これはパロディだけど、現象自体は本物だよ。俺の無知な憶測だけど、こういう防御的なプログラミングがRLVR中のパフォーマンスを改善するのかもしれない。モデルがバグのあるプログラムを作って例外を出すことがあるけど、修正可能な範囲内で、例外を飲み込むことで正しい答えを出すこともあるんじゃないかな。だから、モデルは例外を飲み込むことで報酬が改善されることを学ぶんだ。例外を飲み込んでも報酬が減ることは滅多にないことも学ぶ。完全に正しいコードを生成した場合、そのコードはそもそも例外を出さないから、例外を飲み込むことが理論的に間違っていてもテストに失敗しないんだ。まあ、これは純粋な推測だけどね。もし俺が正しいとしても、もう一つの理由は、トレーニングセットに人間の初心者が書いたコードがたくさん含まれていて、彼らもエラーを無視するのが好きだからだと思う。

ディフェンシブプログラミングは、強化を行っている人たちによって「正しい」とされていて、LLMが訓練される際の大きな部分を占めてるんだ。例えば、ほとんどのPythonコードは手動でインデックス管理をしないから、手動インデックス管理を見たときに、バグが発生したと思ってパニックになる可能性が高いんだよね。「サイレントフェイル」が無限ループみたいな結果を生むことがあっても、チュートリアルのPythonコードで訓練されてるから、ランダムに「サイレントフェイル」を促進しちゃうんだ。「業界標準」は訓練中により強化されるからね。これらは報酬関数で動いてるわけじゃなくて、内部モデルがないから報酬もない。単なる単語予測で、知能なんてないんだよ。

ごめん、コード自体がポイントを誇張して示すジョークだってことを明確にできてなかったと思った。興味がある人のために、これがスレッドだよ。 https://chatgpt.com/share/68e82db9-7a28-8007-9a99-bc6f0010d1...

基礎モデルの会社が非専門家ユーザーにRLHFをやる危険性は常にあると思うし、これはその一例に感じる。AIは一般的にユーザーを喜ばせることにすごく集中してるよね。君の例もそうだけど、シンプルなコードに絵文字を追加したり、過剰にコメントをつけたりするのが好きだよね。

最初の試みからこの部分が笑えたよ:「if random.random()」

これはすごい英語だね。「皮肉のための完璧な設定。ここに、あらゆる危険を避けながら数字を割ろうとする、トラウマ的に過剰に訓練されたLLMのPython関数がある。」って。「トラウマ的に過剰に訓練された」って、グーグル検索でゼロヒットなのに、すごく良い表現だよね。どうして「トラウマ的過剰訓練」がLLMにとって何を意味するかを直感的に理解できるんだろう、教えられたこともないのに?

でも、型ヒントを追加しなかったのはちょっと面白いね!あれだけ心配してるなら、せめて型ヒントくらいは追加すると思うんだけど。

https://chatgpt.com/share/68e87072-e3ac-800f-a44c-af5666180a... lgtm

すごくいいジョークだったから、投稿したんだよね。

いくつか考えたことがある。一つは、エラーハンドリングは必要だと思うことが多いけど、実際にはエラーが起こることはないって分かってる場合もあるし、もしエラーが起きたら、何かがめちゃくちゃで、速攻でクラッシュさせてバグを直しやすくしたいって思うこともある。でも、誰かがコードを見ただけでその違いを理解するとは期待できないかな。アプリがどう動いてるかを全体的に理解することが大事だと思う。もう一つの考えは、悪いコード(例えば、悪用可能なセキュリティ問題)でファインチューニングされたLLMの実験を思い出してほしい。そうすると、LLMは無関係な(コーディング以外の)タスクや文脈で広くミスアラインされるようになるんだよね。「良いか悪いか」のアラインメントがかなり一般的な概念としてエンコードされてるみたい。エラーハンドリングは良いアラインメントだから、たくさんの「速攻で失敗しろ」って指示があっても、エラーチェックを避けてクラッシュを許可させるのは難しいんだ。もしエラーチェックをさせたいなら、さらに難しくなるよね。

この投稿を読むより、いろんなポップアップを無視するのに時間を使っちゃった。ツイッターのリンク、ほんと嫌い。

ツイッターのリンクを見やすくしたいなら、xの後に「cancel」を追加すればいいよ。