元のソース: CSDN 画像ソース:無制限のAIによって生成今年の初め、マット・ウェルシュはプログラミングが終わりに近づいていると発表しました。 彼はACMコミュニケーションズに次のように書いています。「プログラムを書く」という伝統的な考えは、実際、私たちが知っているように、非常に特殊なアプリケーションを除いて、ほとんどのソフトウェアプログラミングは訓練されたAIシステムに置き換えられると信じています。 「単純な」プログラムのみが必要な場合(結局のところ、すべてがGPUクラスターで実行されている数千億のパラメーターのモデルを必要とするわけではありません)、プログラム自体は手動でコーディングされるのではなく、AIによって直接生成されます。数週間後、スピーチで、ウェールズは彼の死の観察を拡大しました。 墓場に行くのはプログラミングの芸術だけでなく、コンピュータサイエンス全体です。 すべてのコンピュータサイエンスは「運命」にあります。 (下の画像はスピーチのスクリーンショットです。 ) これらの悲しいメッセージの配信者は、悲しみに圧倒されていないようです。 ウェールズは(ハーバード大学、グーグル、アップルなどで)コンピューターサイエンスの教師および実践者になりましたが、次のステップに進むことを熱望しているようです。 「とにかく、コードを書くのは最悪です!」 彼は宣言した。私はポストプログラミングの将来についてそれほど楽観的ではありません。 まず第一に、私は懐疑的です。 機械が興味深い計算問題を自分で解決することを学ぶためのしきい値を超えたとは思いません。 私たちはまだそれに近づいていないと思いますし、正しい方向に進んでいるとも思いません。 さらに、私の視点が間違っていることが判明した場合、私の衝動は黙認することではなく、抵抗することです。 一方で、私は私たちの新しいAIの大君主を歓迎しません。 彼らが私よりも優れたプログラマーであることが証明されたとしても、私はまだ私のコードエディタとコンパイラを使い続けます、ありがとう。 「プログラミングは最悪ですか?」 私にとって、それは長い間私にとって喜びとインスピレーションの源でした。 世界を理解するための貴重なツールでもあると思います。 アイデアをコードに減らすことができるまで、私はそれを理解しているかどうかはわかりません。 この学習体験の恩恵を受けるために、私は魔法の言葉を言ってアラジンのAIランプから魔神を召喚するだけでなく、実際にプログラムを書く必要がありました。 **大規模言語モデル**プログラマブルマシンが独自のプログラムを作成できるという考えは、コンピューティングの歴史に深く根ざしています。 チャールズ・バベッジは、分析機械の計画について話し合ったとき、早くも1836年にこの可能性をほのめかしました。 Fortranが1957年に導入されたとき、その正式名称は「FORTRAN自動コーディングシステム」でした。 その目標は、コンピュータが「自分で問題をコーディングし、人間のコーダーと同じくらい優れた(ただしエラーのない)プログラムを作成すること」です。Fortranはプログラミングのトリック(または間違い)を排除するものではありませんが、プロセスの面倒さを軽減します。 後の言語やその他のツールはさらなる改善をもたらしました。 そして、完全に自動化されたプログラミングの夢は決して打ち砕かれませんでした。 マシンは、ほとんどのマシンよりもプログラミングに適しているようです。 コンピュータは几帳面で、ルールに縛られ、潔癖で文字通りであり、これらの特性(正しいか間違っているか)はすべて、熟練したプログラマーに関連しています。皮肉なことに、プログラミングタスクを引き受ける準備ができているAIシステムは、奇妙なことにコンピューターとは異なります。 彼らの性格は、コマンダーデータよりもディアナトロイに似ています。 論理的な一貫性、因果関係の推論、細部への注意は、彼らの長所ではありません。 彼らは深い考えを熟考しているように見える信じられないほど素晴らしい瞬間を持っていますが、彼らはまた驚くべき失敗の可能性を秘めています—露骨で勇敢な理性の誤り。 彼らは私に古い冗談を思い出させます:人々は間違いを犯します、そして本当に物事を台無しにするにはコンピューターが必要です。最新のAIシステムは、ビッグランゲージモデル(LLM)と呼ばれています。 他の最近のほとんどのAI発明と同様に、それらは脳の構造に触発された多層構造である人工ニューラルネットワーク上に構築されています。 ネットワークのノードは生物学的ニューロンに似ており、ノード間の接続はシナプスとして機能し、あるニューロンから別のニューロンに信号が伝達される接続ポイントです。 トレーニングネットワークは、接続の強度や重みを調整できます。 言語モデルでは、トレーニングは大量のテキストをネットワークに強制することによって行われます。 プロセスが完了すると、結合の重みによって、トレーニング テキストの言語的特徴に関する詳細な統計がエンコードされます。 最大のモデルでは、重みの数は1,000億以上です。この場合、モデルという用語は誤解を招く可能性があります。 この用語は、スケールモデルや模型飛行機などのミニチュアモデルを指すものではありません。 代わりに、科学で一般的に見られる数学的モデルのような予測モデルを指します。 大気モデルが明日の天気を予測するのと同じように、言語モデルは文の次の単語を予測します。最も有名な大規模言語モデルは、昨年秋に公開され、大きな注目を集めたChatGPTです。 略語GPTジーピーティー:私の舌は、これらの3つの韻を踏む音節を常につまずいています。 他のAI製品には、バート、クロード、ラマなどのかわいい名前があります。 同じ精神でGPTの名前を変更できたらいいのにと思います。 私はそれをGeppettoと呼び、子音のパターンを反映しています。 GPT は 事前トレーニング済み生成トランスフォーマー を表します。 システムのチャットバージョンには、会話型HMIが装備されています。 ChatGPTは、AIを一握りの裕福なテクノロジー企業の支配から解放するために2015年に設立されたOpenAIによって開発されました。 OpenAIはこの使命を成功裏に達成し、裕福なテクノロジー企業になりました。ChatGPTは、その言葉遣い、上手に話す能力、英語の流暢さ、およびその他の言語で称賛に値すると同時に衝撃的です。 チャットボットは、有名な作家を模倣したり、ジョークを言ったり、ラブレターを書いたり、詩を翻訳したり、スパムを書いたり、宿題で学生を「助け」たり、政治的な誤った情報のために誤った情報を作成したりできます。 良くも悪くも、これらの言語能力は驚くべき技術的進歩を表しています。 かつて理解できる文章を作るのに苦労していたコンピューターは、突然言葉の達人になりました。 GPTの言うことは真実かもしれないし、そうでないかもしれないが、それはほとんどの場合よく表現されている。ChatGPTがリリースされて間もなく、その言語の習得がプログラミング言語にまで及んでいることに驚きました。 モデルのトレーニングセットには、複数の自然言語だけでなく、GitHubなどのパブリックリポジトリからの大量のプログラムソースコードも含まれているようです。 このリソースに基づいて、GPTはコマンドに基づいて新しいプログラムを書くことができます。 コンピュータは入力について非常にうるさいと執拗なので、これは驚くべきことでした。 コンピュータにはスペルミスなどの小さな間違いがありますが、人間の読者は文章を理解するのに苦労します。 しかし、コンピュータがカンマや括弧の不一致で入力を受けると、文字化けして嘔吐します。 潜在的に統計的または確率的な特性を持つ言語モデルは、数行を超えて必要な精度を維持する可能性は低いようです。私はこの問題で再び間違っていました。 大規模な言語モデルにおける重要な革新であるアテンションメカニズムは、この問題を解決します。 自分でChatGPTを試し始めたとき、不注意な文法エラーなしに実際にプログラムを生成できることをすぐに発見しました。しかし、他の問題が続きました。 **はしごを登る**座ってマシンとチャットすると、すぐに「何について話すべきか」という厄介な質問に直面します。 私はChatGPTプログラミング能力を公正に測定するトピックを探しています。 計算手段で解ける問題が欲しいのですが、これは大きな言語モデルの弱点の一つと考えられている算術演算をあまり必要としません。 私は150年前にルイスキャロルによって発明され、20世紀の90年代にドナルドE.クヌースによって詳細に分析されたアナグラムゲームを選びました。以下のトランスクリプトでは、私の側のすべての交換はBRとマークされています。 ロゼットは、ChatGPTの応答を指定するOpenAIロゴです。 これらの文章が画面上で展開されるのを見たとき(チャットボットが一語一語入力し、少し不安定で、私の考えを整理するのをやめるかのように)、私はすぐにシステムの英語力に驚かされました。 GPTは、単語のはしごのすべての基本的な機能をシンプルで強力な散文でリストします:それはあなたが一度に1文字ずつ変更することによって単語から単語へと行くゲームまたはパズルです、はしごの各段は英語の単語でなければなりません、そして目標は開始単語からターゲット単語までの可能な限り短いシーケンスを見つけることです。 私自身、それをうまく説明することはできません。 最も役立つのは、COLD-> WARMの実例です。言語能力の印象を与えるのは個々の文章だけではありません。 文は段落に編成され、それらは首尾一貫した談話を形成するために一緒に張られています。 素晴らしい!また、ファジーでずさんな入力を処理するロボットの能力も注目に値します。 私の最初のクエリは「はい」または「いいえ」の質問として定式化されましたが、ChatGPTはそれをリクエストとして正しく解釈しました:「はしごという言葉について知っていることを教えてください」。 私の2番目の指示は、LEADとGOLDが金属ではなく単語として理解されるべきであることを示す誤植の手がかりを無視しています。 チャットボットは私に錬金術のレシピを提供することになっていたが、それは欠けている引用を提供した。しかし、この言語的および修辞的な複雑さはさておき、私が本当にテストしたかったのは、単語のはしご問題を解決するプログラムの能力でした。 上記のトランスクリプトの両方の例はWeb上で見つけることができるため、ChatGPTのトレーニングデータに表示される可能性があります。 つまり、大規模な言語モデルでは、ソリューションを構築するのではなく、単にソリューションを覚えている場合があります。 だから私はさらに厳しい課題を提出しました: 一見すると、ChatGPTは再び勝利を収めたように見え、これまでに遭遇したことのないパズルを解きました。 しかし、よく見てください。 マーシュ->マリスは、パリル->4月と同様に、2文字の置換が必要です。 「有効な言葉」としてのマリスとパリルの地位も疑問視される可能性があります。 私は不平を言った: ワウ! ロボットは滑りやすい告白と謝罪を提供しますが、「正しい」はしごはこれまで以上にクレイジーです。 マザーグースの童謡でハンプティダンプティとスクラブルをプレイしているようで、「APRCHIは単語だと言います、彼は単語です!」と宣言しています。 次に、すべてのタイルを分散させます。これは、個別の固有の障害ではありません。 ChatGPTで単語のはしごを解決しようとする私の試みはすべて、常に同じ方法ではありませんが、軌道から外れました。 あるケースでは、REACHからGRASPへのはしごを依頼しました。 AIの専門家がこのソリューションを思いつきます:リーチ->教える-桃>-平和>-ペース>->パレス->解析->解析->解析->解析->公園->公園->公園->公園->パレス->把握。でこれを:ソード ->スワード ->報酬 ->リドロー ->リドリュー ->リドリュー ->リドリュー ->リドリュー ->リドロー ->返済 ->修理 -平和>今、私たちは「1、2、3、4、4、3、4、4、4、4、4、7、青、10!」と数えることを学んだばかりの小さな子供たちのようにせせらぎをしています。 "これまでに示したすべての結果は、ChatGPTバージョン3.5で文書化されています。 また、3月にリリースされた新しく改良されたバージョン4.0も試してみました。 更新されたロボットは同じ愛想の良い自信を醸し出していますが、私はそれが同じ傾向を持ち、カジュアルな矛盾に陥るのではないかと心配しています。 はしごは、すべてのルールに従って、4つのステップでうまく始まります。 しかし、その後、AIは気が散ります。 プラージュからページに移動するには、4文字の置換が必要です。 次に、PASEがありますが、これは(私が知る限り)単語ではなく、シーケンスがページからPAREに直接移動できるため、とにかくここでは必要ありません。 さらに愚かさが続いた。 それでも、PLAGEに関する情報ノートに感謝します。最近、メタ(Facebookの人々)が発行するLLMであるLlama 2を試す機会もありました。 このモデルはGPTとは独立して開発されましたが、ルールを作って無視するなど、同じ心理的な癖があるようです。 私がREACHとGRASPをつなぐはしごを求めたとき、Llama 2はこれを提案しました:リーチ->教える->桃 ->リーチ ->スピーチ ->シート ->フィート ->把握 **予言とコードモンキー**Matt Welsh 氏は、大規模な言語モデル上に構築されたコンピューティング システムの 2 つの動作モードについて言及しています。 これまでのところ、私たちは私が予言モードと呼んでいるもので作業してきましたが、質問をするとコンピューターが答えを返します。 単語のペアを指定すると、システムはそれらをつなぐはしごを見つけ、そこに到達するために必要な計算を実行します。 財務記録でいっぱいの靴箱を配達すると、コンピューターが1040フォームに記入します。 過去の気候データをコンパイルすると、コンピューターは 2050 年の全球平均気温を予測します。AIオラクルに代わるものは、AIコードモンキーです。 2番目のモードでは、マシンは質問に直接回答したり、計算を実行したりしません。 代わりに、従来のコンピューターで実行できるプログラムを作成します。 ボットからの単語のはしごの代わりに、選択したプログラミング言語で記述された単語のはしごを生成するプログラムを返します。 完全な納税申告書に記入する代わりに、税務準備ソフトウェアを入手できます。 気候モデルは気温予測を置き換えます。ChatGPT 3.5で試してみましょう。 wordLadder機能を使用して、はしごパズルを解くことができます。 使用例を次に示します。 その出力は次のとおりです。 これは基本的なデモであり、大規模なはしごやより複雑なシナリオでは、幅優先の検索など、追加の最適化またはアルゴリズムが必要になる場合があることに注意してください。ここでも、出力をざっと見ると、パフォーマンスが成功したことがわかります。 ChatGPTは英語と同じくらいJavaに堪能なようです。 if、while、forステートメントの構文、およびすべての面倒な句読点と括弧の規則を知っています。 機械で生成されたプログラムは、これらすべてのコンポーネントを組み合わせて、指定されたタスクを実行するようです。 また、多数の説明コメントにも注意を払ってください。 同様に、説明的な変数名(現在の単語、新しい単語、はしご)。ChatGPTには、特定の例(3月から4月)でプログラムを実行するための指示も積極的に含まれており、以前のやり取りで与えられた回答と一致する結果を出力します。 その出力は実際にプログラムを実行することによって生成されますか? ChatGPTはそれを明示的には言いませんが、指示どおりにプログラムを実行すると、表示された結果が得られると主張しています(すべてのばかげた栄光で)。このステートメントをテストするには、プログラムをWebブラウザーまたはその他のJava実行環境にロードします。 結論:捕まった! プログラムは実行されましたが、指定された結果は生成されませんでした。 プログラムの実際の出力は、3月-> AARCH -> APRCH -> APRIH -> 4月です。 このシーケンスは、一度に1文字だけを変更するという規則に従っており、すべての「単語」は正確に5文字であるため、それほど奇妙ではありません。 一方、英語の辞書には中間の「単語」は見つかりません。4月>3月-> AACH -> APRCH ->APRIH-シーケンスを生成する単純なアルゴリズムがあります。 開始単語を左から右に段階的に確認し、各位置の文字をターゲット単語の対応する文字と一致するように変更します。 この規則に従って、5文字の単語の任意のペアは、5つ以下のステップで段階的に配置できます。 3月〜>4月は、中央のRを変更する必要がないため、4つのステップしかかかりません。 単語のはしごを作る簡単な方法を想像することはできません-もちろん、文字の混合物を1つの単語としてカウントすることをいとわないと仮定します。ChatGPTによって作成されたプログラムは、この迅速で汚いルーチンを使用できますが、はるかに退屈なことを行います:最初の単語が開始語であるすべての可能なはしごを構築し、ターゲット単語を含むものにつまずくまでそれらのはしごを拡張し続けます。 これは無駄なブルートフォースアルゴリズムです。 開始単語の各文字は25の方法で変更できます。 したがって、5文字の単語には125の可能な後継者がいます。 5段のはしごにたどり着くと、1億9000万の可能性があります。 (3 月から > 4 月や REACH-> GRAMP など、ここで示した例では不変文字があるため、ソリューションは 4 つの手順しか実行しません)。 完全な5ステップの解決策を計算しようとすると、私の忍耐力が消耗しました。 ) **第4世代コードモンキー**ChatGPT 4 で同じコーディング演習を試してみましょう。 同じヒントを指定すると、新しいボットは次のように応答します。  プログラムの全体的な構造は同じで(内部に2つのネストされたforループがあるwhileループ)、同じアルゴリズム戦略(特定の単語とは異なるすべての文字列を1か所で生成する)を採用しています。 しかし、GPT-4バージョンには大きな目新しさがあります:単語リストの認識は不可欠です。 この変更により、私たちはついに本当の言葉のはしごを生み出す希望を持っています。GPT-4 はリストの必要性を認識していますが、上記の REACH-> GRASP の例用に構成した 10 ワードのシーケンスであるプレースホルダーのみを提供します。 この単語リストのスタブは、偽の「REACH-to-GRASP」はしごを再生成するためにさえ、ほとんど役に立ちません。 これを行おうとすると、プログラムははしごが存在しないことを報告します。 与えられた10語は、ステップごとに1文字だけを変更する効果的なパスを形成しないため、この結果に問題はありません。リスト内の単語が慎重に選択されたとしても、10の語彙は非常に重要ではありません。 より大きな単語リストを生成することは、言語モデルにとって簡単な作業のように思えます。 結局のところ、LLMはテキストの巨大なコーパスで訓練されており、ほとんどすべての英語の単語が少なくとも一度は出現する可能性が高いのに対し、一般的な単語は何百万回も出現します。 ロボットはこれらの単語の代表的なサンプルを取ることができませんか? 答えは明らかにノーです。 GPTはこのすべてのテキストを「読んだ」と言えますが、これらの単語を簡単にアクセスできる形式で保存することはありません。 (同じことが人間の読者にも当てはまります。 生涯の読書体験を振り返って、語彙の中で最も一般的な10の5文字の単語のリストを作成できますか? ChatGPT 4に単語のリストを生成するように依頼したところ、「混乱させて申し訳ありませんが、OpenAIによって開発されたAIとして、単語データベースに直接アクセスしたり、外部ソースからデータを取得したりすることはできません...」と申し訳なく反対しました。 そこで、いくつかのトリックを試して、ロボットに1000語のストーリーを書いてもらい、ストーリーの単語を頻度で並べ替えました。 トリックはうまくいきましたが、サンプルが小さすぎてあまり役に立ちませんでした。 私がそれに固執する限り、私はGPTから受け入れ可能なリストを同軸にすることができるかもしれませんが、私は近道をしています。 結局のところ、私はOpenAIによって開発されたAIではなく、外部リソースにアクセスできます。 私はKnuthが編集した5,757の5文字の英単語のリストを彼の単語のはしご実験のために流用しました。 このリストを使用すると、GPT-4で記述されたプログラムは、次の9ステップのラダー図を見つけます。リーチ ->桃 ->平和 ->場所 ->平面 ->計画 -亀頭> ->ガラス ->草 ->把握この結果は、Knuthが30年前にスタンフォードグラフベースで発表したラダープログラムの成果と完全に一致しています。この時点で、少しの外部の助けを借りて、ChatGPTがついに私の要求を満たしたことを認めなければなりません。 有効な単語のはしごを構築できるプログラムを作成します。 しかし、私はまだ予約があります。 GPT-4とKnuthは同じ出力を生成するプログラムを作成しますが、プログラム自体は同等ではなく、類似していません。Knuthはこの問題に反対の方向にアプローチし、すべての可能な5文字の文字列(1200万未満)のコレクションから始めるのではなく、5,757の一般的な英語の単語のはるかに小さなリストから始めました。 次に、各単語がノードであるグラフ(またはネットワーク)を構築し、対応する単語が1文字異なる場合にのみ、2つのノードがエッジで接続されます。 次の図は、このような図の一部を示しています。 この図では、ワード ラダーは開始ノードからターゲット ノードまでの一連のエッジです。 最適なはしごは最短パスで、最も少ない数の辺を横断します。 たとえば、リーシュからレッチへの最良のパスは、リーシュ->リーチ->リーチ->レッチですが、リーシュ->リーチ->ビーチ->ピーチ->リーチ->レッチなどの長いパスもあります。 最短経路を見つけるために、クヌースは20世紀の50年代にエドガーW.ダイクストラによって考案されたアルゴリズムを使用しました。 Knuthの単語ラダープログラムは、単純な単語リストをチャートに変換するために先行投資を必要とします。 一方、後者の要素にはなり得ない数千または数百万の5文字の文字列を無駄に生成することを回避します。 REACH-> GRASP問題を解くために、GPT-4プログラムは219,180のそのような文字列を生成しました。 そのうち2,792人(1%強)だけが本当の言葉です。私が説明するさまざまな単語のはしご手順が学生によって提出された場合、単語リストのないバージョンに不合格の成績を与えます。 リスト付きのGPT-4プログラムは合格しますが、効率と優雅さのために、Knuthプログラムにのみ最高の評価を与えます。チャットボットが劣ったアルゴリズムを好むのはなぜですか? あなたは単に手がかりを得るために「単語のはしごプログラム」をグーグルで検索することができます。 上位の結果のほとんどすべては、Leetcode、GeeksForGeeks、RosettaCodeなどのサイトからのものです。 これらのサイトは、GPTプログラムと同じように、各単語の125の1文字のバリエーションすべてを生成する必要があるソリューションを使用して、プログラミングコンテストの求職者や競合他社に対応することを明らかに意図しています。 そのようなサイトは非常にたくさんあるので(数百あるようです)、Knuthの本などの他のソースよりも重要です(テキストがトレーニングセットに表示される場合)。 これは、GPTではなく、間違ったアルゴリズムの選択についてLeetcodeを非難する必要があることを意味しますか? 代わりに、プロトコルの必然的な弱点を指摘したいと思いますが、その中で最も一般的なのはデフォルトで正しい答えです。 すべてのソフトウェアに対して大規模な言語モデルが書かれていると思うたびに、別の関連する懸念が私を悩ませます。 新しいアルゴリズムはどこから来たのですか? 大学の言語モデルは、既存のプロジェクトの要素をリミックスするのに創造的かもしれませんが、まったく新しくてより良いものを発明する方法は見当たりません。 ** はしごという言葉はもう十分です! **私は行き過ぎて、特定の(そして無関係な)問題のあまりにも多くの変種でChatGPTを拷問したことを認めます。 おそらく、大学の言語モデルは、他の計算タスクでより優れたパフォーマンスを発揮します。 私はいくつか試しましたが、結果はまちまちです。 そのうちの1つについて議論したいのですが、ChatGPTの取り組みはかなり痛烈だと思います。ChatGPT 3.5では、100番目のフィボナッチ数の値を要求します。 私の質問はOracleモードで尋ねられたことに注意してください。 私はそれを計算するプログラムではなく、この数を求めています。 それでも、ChatGPTは自発的にフィボナッチプログラムを作成し、そのプログラムの出力をレンダリングします。 このプログラムによって実装されるアルゴリズムは数学的に正しいです。 これは、{0, 1}から始まるシーケンスのメンバーであるフィボナッチ数列の定義から直接得られ、後続の各要素は最初の2つの項目の合計に等しくなります。 与えられた答えも正しいです:354224848179261915075確かに100番目のフィボナッチ数です。 では、何が問題なのでしょうか。 真ん中の文です:「このコードを実行すると、100番目のフィボナッチ数が出力されます。」 本当じゃない。 コードを実行すると、間違った値が354224848179262000000取得されます。 最近のバージョンのJavaでは、この問題を解決するためにBigIntデータ型を提供していますが、BigIntは明示的に指定する必要があり、ChatGPTプログラムでは指定されません。 この異常の理由は、Javaが整数値に対しても浮動小数点演算を使用するためです。 IEEE 浮動小数点標準によると、精度を損なうことなく表現できる最大整数は 253−1 です。 100番目のフィボナッチ数は約268です。 これは私が痛烈な思考と呼ぶものです:ChatGPTは正しい答えを与えますが、その答えを計算するために使用すると主張する方法はそれを提供しません。 ボットは他の方法で正しい値を見つけたに違いありませんが、正確な方法は明らかにされていませんでした。ChatGPT 4.0に同じタスクを与えることは、さらに奇妙な旅に私たちを連れて行くでしょう。 次の対話では、システムが記述したコードの一部をテストして実行できるようにするChatGPTプラグインであるコードインタープリターをアクティブにしました。 どうやら、ロボットはこの機能を利用して、最初に未知の理由で失敗したプログラムを考え出しました。  ここで、ChatGPTは、コードインタープリターでサポートされている主要なプログラミング言語であるPythonで記述されています。 プログラムを書く最初の試みは、フィボナッチ行列のべき乗に基づいていました。 これはよく知られた効果的な方法であり、プログラムはそれを正しく実装します。 しかし、不思議な理由により、コードインタプリタはプログラムを実行できません。 (このコードは標準のPython環境でうまく機能し、正しい答えを返します。 )この時点で、ロボットはまったく新しい方向に向きを変えて離陸し、必要なフィボナッチ値がビネーの公式と呼ばれる数学的恒等式によって計算されることを示唆しています。 それは数式を書いていましたが、その後考えを変えました。 それは数値精度の問題を正しく予見します:5の平方根の正確な値が与えられると、式は正確な結果を生成しますが、これは実行可能ではありません。 そのため、ChatGPTはバージョン3.5と同じ反復アルゴリズムを使用して、異なる戦略を採用しています。 今回は、Python(Javaとは異なり)は大きな整数を扱うのに問題がないため、正しい答えを得ました。このパフォーマンスには、正解だけでなく、システムの勇気ある粘り強さにも感銘を受けました。 ChatGPTのトラブルにもかかわらず、予期せぬ困難に戸惑いながらも、あきらめることを拒否しました。 「まあ、そのマトリックス法はうまくいくはずです。 しかし、とにかく、ビネーの公式を試してみましょう... ああ、待って、私は忘れました... とにかく、これについてそれほど派手である必要はありません。 明らかにゆっくりとした方法でそれをやってみましょう。 問題解決に対する非常に人間的なアプローチだと感じています。 マシンでこの動作を見るのは奇妙です。 **成功と失敗のスコアを記録する**私の小さな実験は、AIオラクルとAIコードモンキーが人間のプログラマーを締め出そうとしているという主張を疑わせました。 私はいくつかの成功を見てきましたが、もっと失敗しました。 この暗い記録は、その解決策がよく知られており、広く公開されている比較的単純な計算タスクに基づいて編集されました。他の人は、LLMコード生成のより広く、より深い評価をしました。 この記事の最後にある参考文献に、そのような研究を5つリストします。 報告された結果の一部を簡単にまとめてみたいと思います。 2年前、Mark ChenとOpenAIの50人以上の同僚は、コードの記述専用のChatGPT 3のフォークであるコーデックスの精度を測定することに多大な努力を払いました。 (Codex はその後、GitHub Copilot の「プログラマーのアシスタント」を動かすエンジンになりました。 )は、Pythonプログラムを書くことによって実行できる164のタスクのセットを作成しました。 これらのタスクは主に教科書の演習、プログラミングコンテスト、および就職の面接のコーディングでうまくいく方法に関する(驚異的な)文献のタイプです。 ほとんどのタスクは、わずか数行のコードで完了できます。 例:与えられた単語の母音の数を計算し、整数が素数か合成かを判断します。Chen教授のチームは、成功と失敗を定義するための基準についても考えました。 LLMプロセスは非決定論的であるため(単語選択は確率に基づいています)、モデルは最初の試行で欠陥のあるプログラムを生成する可能性がありますが、試行の続行が許可されると、最終的に正しい応答を生成します。 温度と呼ばれるパラメータは、不確実性の程度を制御します。 温度がゼロの場合、モデルは常に各ステップで最も可能性の高い単語を選択します。 温度が上昇すると、ランダム性が導入され、ありそうもない単語を選択できるようになります。 陳ら この変更の可能性を考慮して、次の 3 つの成功ベンチマークを採用します。pass@1 : LLM は最初の試行で正しいプログラムを生成しますpass@10: 生成された 10 個のプログラムのうち少なくとも 1 つが正しいpass@100 : 生成された 100 個のプログラムのうち少なくとも 1 つが正しいPass@1テストはゼロ温度で実行されるため、モデルは常に最良の推測を提供します。 pass@10およびpass@100試験は高温で実行されるため、システムはより幅広い潜在的なソリューションを探索できます。著者らは、164のタスクすべてでコーデックスの複数のバージョンを評価しました。 コーデックスの最大かつ最も強力なバージョンの場合、pass@1率は約29%、pass@10率は47%、pass@100は72%に達します。 これらの数字を見て、私たちは感銘を受けたりショックを受けたりする必要がありますか? コーデックスが最初の試みでほぼ3分の1の時間(温度がゼロに設定されている場合)に正しいことを祝う価値はありますか? または、提案された100の計画をふるいにかけて適切な計画を見つけると、成功率は4分の3近くに上昇しましたか? 私の個人的な意見はこれです:現在の世代のLLMを長期的な研究プログラムの先駆的な努力として見ると、結果は有望です。 しかし、このテクノロジーが手作業でコード化されたソフトウェアにすぐに取って代わることができると考えるなら、希望はほとんどありません。 私たちはまだ必要なレベルの信頼性にはほど遠いです。他の研究では、ほぼ同様の結果が得られています。 フレドリコ・カッサーノ他 さまざまなプログラミング言語でコードを生成する複数のLLMのパフォーマンスを評価します。 彼らは幅広いpass@1率を報告していますが、50%を超えるのは2つだけです。 Alessio Buscemi は ChatGPT 3.5 を 40 のコーディングタスクでテストし、10 の言語で記述されたプログラムを必要とし、各クエリを 10 回繰り返しました。 4,000回の試行のうち、1,833回がコンパイルおよび実行できるコードを生成しました。 劉志傑ら ChatGPTの評価は、Leetcodeのウェブサイトに投稿された質問に基づいています。 生成されたコードを自動化されたLeetcodeスコアリングプロセスに送信して、結果を判断します。 すべての質問の平均合格率は、Cで書かれたプログラムの31%からPythonプログラムの50%までの範囲でした。 劉ら もう1つの興味深い観察:ChatGPTは、2021年9月(GPTのトレーニングセットの期限)以降に公開された質問のスコアがはるかに悪かったことです。 彼らは、ロボットがトレーニング中にすでに解決策を見ているので、ロボットが以前の問題をよりよく解決できるかもしれないと推測しています。Li ZhongとZilong Wangが最近発表した論文は、プログラムの正確性の基本的な問題を超えて、堅牢性と信頼性を考慮しています。 生成されたプログラムは、存在しないファイルを開こうとしたときなど、不正な形式の入力や外部エラーに正しく応答しますか? LLMのプロンプトには、このような問題を適切に処理する方法を示す例が含まれていましたが、ZhongとWangは、生成されたコードが30〜50%の確率でそうしないことを発見しました。これらの苛立たしい結果に加えて、私自身はもっと疑問を持っています。 ほとんどすべてのテストは、短いコードスニペットを介して実行されます。 10 行のプログラムの作成が困難な LLM は、100 行または 1,000 行のプログラムの作成が困難な場合があります。 また、単純な合格/不合格の評価は、コード品質の非常に大まかな尺度です。 Chenのグループベンチマークスイートの素数性テストを考えてみましょう。 これはコーデックスで書かれたプログラムの1つです。 このコードは正しいと評価されています – 素数を合成数として誤って分類することは決してなく、その逆も同様であるため、正しいはずです。 ただし、nが大きい場合、評決を待つ忍耐力や人生がない可能性があります。 このアルゴリズムは、n を 2 から n−1 までの各整数で除算しようとします。 **LLM型破りな実用性**大規模な言語モデルはまだ始まったばかりです。 ChatGPTは1年未満前にリリースされました。 基盤となるテクノロジーはわずか約6年前のものです。 LLMはコーディングの世界を征服する準備ができていないと主張していると確信していますが、彼らが決して征服しないほど自信を持って予測することはできません。 これらのモデルは間違いなく改善され、より適切に使用します。 すべてのクエリを最大限に活用する方法として「ジャストインタイムエンジニアリング」ガイダンスを提供する新興業界はすでにあります。LLMのパフォーマンスを向上させる別の方法は、純粋な言語分析ツールではなく、論理および推論ツールを備えた別のコンピューティングシステムとのハイブリッドを形成することです。 彼の最近の死の前夜に、ダグ・レナトは、彼が構築に40年を費やした常識の巨大なデータベースであるLLMとCycを組み合わせることを提案しました。 Stephen Wolfram が ChatGPT の Wolfram への統合に取り組んでいます |アルファ版では、Wolfram|Alphaは、キュレーションされたデータとアルゴリズムのオンラインコレクションです。それでも、LLMコースの生成を妨げるいくつかのハードルは克服するのが難しいようです。言語モデルは簡単な方法で魔法を働かせます:文や段落を書く過程で、LLMは前の単語に基づいて次の単語を選択します。 それはあなたの電話でテキストメッセージを書くようなものです:「私はあなたに会います...」と入力すると、ソフトウェアは代替の継続を提案します:「明日」、「すぐに」、「後で」。 LLMでは、各候補者に確率が割り当てられ、モデルトレーニングセット内のすべてのテキストの分析に基づいて計算されます。1世紀以上前、ロシアの数学者A.A.マルコフは、この統計分析からテキストを生成するというアイデアを最初に探求しました。 彼のプロセスは現在、nグラムモデルとして知られており、nはシーケンスの次の要素を選択するときに考慮する単語(または文字またはその他の記号)の数です。 私は長い間n-gramプロセスに魅了されてきましたが、主にそのコメディの可能性のためです。 (40年前に出版された記事で、私はそれを「文学をぎこちないものに変える芸術」と呼んだ。 ")もちろん、ChatGPTやその他の最近のLLMは、nメタモデル以上のものです。 彼らのニューラルネットワークは、n個の連続する記号のシーケンスをはるかに超えた言語統計的特徴をキャプチャします。 特に重要なのは、任意の距離で選択されたシンボル間の依存関係を追跡するアテンションメカニズムです。 自然言語では、この手段は主語と動詞の一貫性を維持したり、代名詞を参照の目的語に関連付けたりするのに役立ちます。 プログラミング言語では、アテンションメカニズムにより、次のようなマルチパート構文構造の整合性が保証されます。 そうしたら。。。 それ以外の場合は、括弧を適切にペアにしてネストしたままにします。ただし、これらの改善があっても、LLMは本質的に、既存のテキストに単語が出現する確率に基づいて新しいテキストを構築するためのツールです。 私の考え方では、それは考えていません。 これは、アイデアではなく言葉に焦点を当てた、より表面的なものです。 この粗雑なメカニズムを考えると、LLMがどれだけ達成できたかに驚き、戸惑いました。何十年もの間、AIの建築家は、自然であろうと人工であろうと、真の知性には世界のメンタルモデルが必要であると信じていました。 あなたの周り(そしてあなたの内側)で何が起こっているのかを理解するためには、物事がどのように機能するか、それらがどのように組み合わされるか、次に何が起こるか、原因と結果についての直感が必要です。 Lynantは、最も重要な知識は、読み始めるずっと前に習得する知識であると主張しています。 あなたは落ちることによって重力を学びます。 ビルディングブロックタワーは取り壊すのは簡単ですが、再構築するのは難しいことがわかったら、エントロピーを理解します。 言語が根付き始める前に、幼児期の痛み、恐れ、飢え、そして愛について学びます。 箱の中の脳は、物理的または社会的宇宙に直接アクセスできないため、この経験にアクセスできません。250年前、スイスの時計職人ピエールジャケドローは、羽ペンで書くことができる機械式オートマトンを作りました。 この時計仕掛けの装置には何百ものカムとギアがあり、スツールに座っている小さな男の子に扮しています。 活性化後、少年はペンをインクに浸し、短いメッセージを書きました-特にデカルトの格言「私は思う、それゆえ私はいる」。 なんて面白い! しかし、18世紀になっても、落書き人形が本当に考えているとは誰も信じていませんでした。 LLM懐疑論者は、ChatGPTを同じカテゴリに入れています。これらの対照的なLLMメンタリティ理論のどれが正しいかをお話しします。 私は違います。 どちらの選択肢も私には魅力的ではありませんでした。 ベンダーや他の人たちが正しければ、推論や感じる能力、物質宇宙や社会的相互作用の経験、自己認識のないガジェットが大学の論文を書き、ラップソングを書き、恋人にアドバイスを与えるという事実に直面しなければなりません。 知識、論理、感情は無価値です。 滑りやすい舌がすべてです。 これは破壊的な提案です。 ChatGPTがこの無意識のショーで私たちをだますことができるなら、私たちも嘘つきであり、彼らの声と怒りは無意味かもしれません。一方、Sutskeverが正しければ、私たちが大切にしている人間の経験の多く、つまり私たちが成長し、生きるにつれてゆっくりと進化する個性の感覚は、インターネットでこれらの言葉を読むことによって学ぶことができます。 もしそうなら、私は実際に中学校の言葉では言い表せない痛みに耐える必要はありません、私はそのような心痛と困難を引き起こすすべての愚かな間違いを犯す必要はありません。 世界と衝突して自尊心を傷つける必要はありません。 私は肘掛け椅子の快適さからこれらすべてを読むことができたでしょう。 言葉だけで、私の魂を形作る谷のすべてのつまずきや痛みを経験することなく、明確な心で成熟した状態に私を連れて行くことができます。大規模な言語モデルがコンピュータサイエンスに与える影響について、私はまだ2つの意見(または2つ以上)を持っています。 )。 AI愛好家は正しいかもしれません。 これらのモデルは、プログラミングだけでなく、他の多くの種類の作業や学習を引き継ぐ可能性があります。 または、他の有望なAIイノベーションと同様に、失敗する可能性があります。 答えを得るのにそれほど長く待つ必要はないと思います。
人工知能とプログラミングの最終章
元のソース: CSDN
今年の初め、マット・ウェルシュはプログラミングが終わりに近づいていると発表しました。 彼はACMコミュニケーションズに次のように書いています。
「プログラムを書く」という伝統的な考えは、実際、私たちが知っているように、非常に特殊なアプリケーションを除いて、ほとんどのソフトウェアプログラミングは訓練されたAIシステムに置き換えられると信じています。 「単純な」プログラムのみが必要な場合(結局のところ、すべてがGPUクラスターで実行されている数千億のパラメーターのモデルを必要とするわけではありません)、プログラム自体は手動でコーディングされるのではなく、AIによって直接生成されます。
数週間後、スピーチで、ウェールズは彼の死の観察を拡大しました。 墓場に行くのはプログラミングの芸術だけでなく、コンピュータサイエンス全体です。 すべてのコンピュータサイエンスは「運命」にあります。 (下の画像はスピーチのスクリーンショットです。 )
私はポストプログラミングの将来についてそれほど楽観的ではありません。 まず第一に、私は懐疑的です。 機械が興味深い計算問題を自分で解決することを学ぶためのしきい値を超えたとは思いません。 私たちはまだそれに近づいていないと思いますし、正しい方向に進んでいるとも思いません。 さらに、私の視点が間違っていることが判明した場合、私の衝動は黙認することではなく、抵抗することです。 一方で、私は私たちの新しいAIの大君主を歓迎しません。 彼らが私よりも優れたプログラマーであることが証明されたとしても、私はまだ私のコードエディタとコンパイラを使い続けます、ありがとう。 「プログラミングは最悪ですか?」 私にとって、それは長い間私にとって喜びとインスピレーションの源でした。 世界を理解するための貴重なツールでもあると思います。 アイデアをコードに減らすことができるまで、私はそれを理解しているかどうかはわかりません。 この学習体験の恩恵を受けるために、私は魔法の言葉を言ってアラジンのAIランプから魔神を召喚するだけでなく、実際にプログラムを書く必要がありました。
プログラマブルマシンが独自のプログラムを作成できるという考えは、コンピューティングの歴史に深く根ざしています。 チャールズ・バベッジは、分析機械の計画について話し合ったとき、早くも1836年にこの可能性をほのめかしました。 Fortranが1957年に導入されたとき、その正式名称は「FORTRAN自動コーディングシステム」でした。 その目標は、コンピュータが「自分で問題をコーディングし、人間のコーダーと同じくらい優れた(ただしエラーのない)プログラムを作成すること」です。
Fortranはプログラミングのトリック(または間違い)を排除するものではありませんが、プロセスの面倒さを軽減します。 後の言語やその他のツールはさらなる改善をもたらしました。 そして、完全に自動化されたプログラミングの夢は決して打ち砕かれませんでした。 マシンは、ほとんどのマシンよりもプログラミングに適しているようです。 コンピュータは几帳面で、ルールに縛られ、潔癖で文字通りであり、これらの特性(正しいか間違っているか)はすべて、熟練したプログラマーに関連しています。
皮肉なことに、プログラミングタスクを引き受ける準備ができているAIシステムは、奇妙なことにコンピューターとは異なります。 彼らの性格は、コマンダーデータよりもディアナトロイに似ています。 論理的な一貫性、因果関係の推論、細部への注意は、彼らの長所ではありません。 彼らは深い考えを熟考しているように見える信じられないほど素晴らしい瞬間を持っていますが、彼らはまた驚くべき失敗の可能性を秘めています—露骨で勇敢な理性の誤り。 彼らは私に古い冗談を思い出させます:人々は間違いを犯します、そして本当に物事を台無しにするにはコンピューターが必要です。
最新のAIシステムは、ビッグランゲージモデル(LLM)と呼ばれています。 他の最近のほとんどのAI発明と同様に、それらは脳の構造に触発された多層構造である人工ニューラルネットワーク上に構築されています。 ネットワークのノードは生物学的ニューロンに似ており、ノード間の接続はシナプスとして機能し、あるニューロンから別のニューロンに信号が伝達される接続ポイントです。 トレーニングネットワークは、接続の強度や重みを調整できます。 言語モデルでは、トレーニングは大量のテキストをネットワークに強制することによって行われます。 プロセスが完了すると、結合の重みによって、トレーニング テキストの言語的特徴に関する詳細な統計がエンコードされます。 最大のモデルでは、重みの数は1,000億以上です。
この場合、モデルという用語は誤解を招く可能性があります。 この用語は、スケールモデルや模型飛行機などのミニチュアモデルを指すものではありません。 代わりに、科学で一般的に見られる数学的モデルのような予測モデルを指します。 大気モデルが明日の天気を予測するのと同じように、言語モデルは文の次の単語を予測します。
最も有名な大規模言語モデルは、昨年秋に公開され、大きな注目を集めたChatGPTです。 略語GPTジーピーティー:私の舌は、これらの3つの韻を踏む音節を常につまずいています。 他のAI製品には、バート、クロード、ラマなどのかわいい名前があります。 同じ精神でGPTの名前を変更できたらいいのにと思います。 私はそれをGeppettoと呼び、子音のパターンを反映しています。 GPT は 事前トレーニング済み生成トランスフォーマー を表します。 システムのチャットバージョンには、会話型HMIが装備されています。 ChatGPTは、AIを一握りの裕福なテクノロジー企業の支配から解放するために2015年に設立されたOpenAIによって開発されました。 OpenAIはこの使命を成功裏に達成し、裕福なテクノロジー企業になりました。
ChatGPTは、その言葉遣い、上手に話す能力、英語の流暢さ、およびその他の言語で称賛に値すると同時に衝撃的です。 チャットボットは、有名な作家を模倣したり、ジョークを言ったり、ラブレターを書いたり、詩を翻訳したり、スパムを書いたり、宿題で学生を「助け」たり、政治的な誤った情報のために誤った情報を作成したりできます。 良くも悪くも、これらの言語能力は驚くべき技術的進歩を表しています。 かつて理解できる文章を作るのに苦労していたコンピューターは、突然言葉の達人になりました。 GPTの言うことは真実かもしれないし、そうでないかもしれないが、それはほとんどの場合よく表現されている。
ChatGPTがリリースされて間もなく、その言語の習得がプログラミング言語にまで及んでいることに驚きました。 モデルのトレーニングセットには、複数の自然言語だけでなく、GitHubなどのパブリックリポジトリからの大量のプログラムソースコードも含まれているようです。 このリソースに基づいて、GPTはコマンドに基づいて新しいプログラムを書くことができます。 コンピュータは入力について非常にうるさいと執拗なので、これは驚くべきことでした。 コンピュータにはスペルミスなどの小さな間違いがありますが、人間の読者は文章を理解するのに苦労します。 しかし、コンピュータがカンマや括弧の不一致で入力を受けると、文字化けして嘔吐します。 潜在的に統計的または確率的な特性を持つ言語モデルは、数行を超えて必要な精度を維持する可能性は低いようです。
私はこの問題で再び間違っていました。 大規模な言語モデルにおける重要な革新であるアテンションメカニズムは、この問題を解決します。 自分でChatGPTを試し始めたとき、不注意な文法エラーなしに実際にプログラムを生成できることをすぐに発見しました。
しかし、他の問題が続きました。
座ってマシンとチャットすると、すぐに「何について話すべきか」という厄介な質問に直面します。 私はChatGPTプログラミング能力を公正に測定するトピックを探しています。 計算手段で解ける問題が欲しいのですが、これは大きな言語モデルの弱点の一つと考えられている算術演算をあまり必要としません。 私は150年前にルイスキャロルによって発明され、20世紀の90年代にドナルドE.クヌースによって詳細に分析されたアナグラムゲームを選びました。
以下のトランスクリプトでは、私の側のすべての交換はBRとマークされています。 ロゼットは、ChatGPTの応答を指定するOpenAIロゴです。
言語能力の印象を与えるのは個々の文章だけではありません。 文は段落に編成され、それらは首尾一貫した談話を形成するために一緒に張られています。 素晴らしい!
また、ファジーでずさんな入力を処理するロボットの能力も注目に値します。 私の最初のクエリは「はい」または「いいえ」の質問として定式化されましたが、ChatGPTはそれをリクエストとして正しく解釈しました:「はしごという言葉について知っていることを教えてください」。 私の2番目の指示は、LEADとGOLDが金属ではなく単語として理解されるべきであることを示す誤植の手がかりを無視しています。 チャットボットは私に錬金術のレシピを提供することになっていたが、それは欠けている引用を提供した。
しかし、この言語的および修辞的な複雑さはさておき、私が本当にテストしたかったのは、単語のはしご問題を解決するプログラムの能力でした。 上記のトランスクリプトの両方の例はWeb上で見つけることができるため、ChatGPTのトレーニングデータに表示される可能性があります。 つまり、大規模な言語モデルでは、ソリューションを構築するのではなく、単にソリューションを覚えている場合があります。 だから私はさらに厳しい課題を提出しました:
これは、個別の固有の障害ではありません。 ChatGPTで単語のはしごを解決しようとする私の試みはすべて、常に同じ方法ではありませんが、軌道から外れました。 あるケースでは、REACHからGRASPへのはしごを依頼しました。 AIの専門家がこのソリューションを思いつきます:
リーチ->教える-桃>-平和>-ペース>->パレス->解析->解析->解析->解析->公園->公園->公園->公園->パレス->把握。
でこれを:
ソード ->スワード ->報酬 ->リドロー ->リドリュー ->リドリュー ->リドリュー ->リドリュー ->リドロー ->返済 ->修理 -平和>
今、私たちは「1、2、3、4、4、3、4、4、4、4、4、7、青、10!」と数えることを学んだばかりの小さな子供たちのようにせせらぎをしています。 "
これまでに示したすべての結果は、ChatGPTバージョン3.5で文書化されています。 また、3月にリリースされた新しく改良されたバージョン4.0も試してみました。 更新されたロボットは同じ愛想の良い自信を醸し出していますが、私はそれが同じ傾向を持ち、カジュアルな矛盾に陥るのではないかと心配しています。
最近、メタ(Facebookの人々)が発行するLLMであるLlama 2を試す機会もありました。 このモデルはGPTとは独立して開発されましたが、ルールを作って無視するなど、同じ心理的な癖があるようです。 私がREACHとGRASPをつなぐはしごを求めたとき、Llama 2はこれを提案しました:
リーチ->教える->桃 ->リーチ ->スピーチ ->シート ->フィート ->把握
Matt Welsh 氏は、大規模な言語モデル上に構築されたコンピューティング システムの 2 つの動作モードについて言及しています。 これまでのところ、私たちは私が予言モードと呼んでいるもので作業してきましたが、質問をするとコンピューターが答えを返します。 単語のペアを指定すると、システムはそれらをつなぐはしごを見つけ、そこに到達するために必要な計算を実行します。 財務記録でいっぱいの靴箱を配達すると、コンピューターが1040フォームに記入します。 過去の気候データをコンパイルすると、コンピューターは 2050 年の全球平均気温を予測します。
AIオラクルに代わるものは、AIコードモンキーです。 2番目のモードでは、マシンは質問に直接回答したり、計算を実行したりしません。 代わりに、従来のコンピューターで実行できるプログラムを作成します。 ボットからの単語のはしごの代わりに、選択したプログラミング言語で記述された単語のはしごを生成するプログラムを返します。 完全な納税申告書に記入する代わりに、税務準備ソフトウェアを入手できます。 気候モデルは気温予測を置き換えます。
ChatGPT 3.5で試してみましょう。
ここでも、出力をざっと見ると、パフォーマンスが成功したことがわかります。 ChatGPTは英語と同じくらいJavaに堪能なようです。 if、while、forステートメントの構文、およびすべての面倒な句読点と括弧の規則を知っています。 機械で生成されたプログラムは、これらすべてのコンポーネントを組み合わせて、指定されたタスクを実行するようです。 また、多数の説明コメントにも注意を払ってください。 同様に、説明的な変数名(現在の単語、新しい単語、はしご)。
ChatGPTには、特定の例(3月から4月)でプログラムを実行するための指示も積極的に含まれており、以前のやり取りで与えられた回答と一致する結果を出力します。 その出力は実際にプログラムを実行することによって生成されますか? ChatGPTはそれを明示的には言いませんが、指示どおりにプログラムを実行すると、表示された結果が得られると主張しています(すべてのばかげた栄光で)。
このステートメントをテストするには、プログラムをWebブラウザーまたはその他のJava実行環境にロードします。 結論:捕まった! プログラムは実行されましたが、指定された結果は生成されませんでした。 プログラムの実際の出力は、3月-> AARCH -> APRCH -> APRIH -> 4月です。 このシーケンスは、一度に1文字だけを変更するという規則に従っており、すべての「単語」は正確に5文字であるため、それほど奇妙ではありません。 一方、英語の辞書には中間の「単語」は見つかりません。
4月>3月-> AACH -> APRCH ->APRIH-シーケンスを生成する単純なアルゴリズムがあります。 開始単語を左から右に段階的に確認し、各位置の文字をターゲット単語の対応する文字と一致するように変更します。 この規則に従って、5文字の単語の任意のペアは、5つ以下のステップで段階的に配置できます。 3月〜>4月は、中央のRを変更する必要がないため、4つのステップしかかかりません。 単語のはしごを作る簡単な方法を想像することはできません-もちろん、文字の混合物を1つの単語としてカウントすることをいとわないと仮定します。
ChatGPTによって作成されたプログラムは、この迅速で汚いルーチンを使用できますが、はるかに退屈なことを行います:最初の単語が開始語であるすべての可能なはしごを構築し、ターゲット単語を含むものにつまずくまでそれらのはしごを拡張し続けます。 これは無駄なブルートフォースアルゴリズムです。 開始単語の各文字は25の方法で変更できます。 したがって、5文字の単語には125の可能な後継者がいます。 5段のはしごにたどり着くと、1億9000万の可能性があります。 (3 月から > 4 月や REACH-> GRAMP など、ここで示した例では不変文字があるため、ソリューションは 4 つの手順しか実行しません)。 完全な5ステップの解決策を計算しようとすると、私の忍耐力が消耗しました。 )
ChatGPT 4 で同じコーディング演習を試してみましょう。 同じヒントを指定すると、新しいボットは次のように応答します。
GPT-4 はリストの必要性を認識していますが、上記の REACH-> GRASP の例用に構成した 10 ワードのシーケンスであるプレースホルダーのみを提供します。 この単語リストのスタブは、偽の「REACH-to-GRASP」はしごを再生成するためにさえ、ほとんど役に立ちません。 これを行おうとすると、プログラムははしごが存在しないことを報告します。 与えられた10語は、ステップごとに1文字だけを変更する効果的なパスを形成しないため、この結果に問題はありません。
リスト内の単語が慎重に選択されたとしても、10の語彙は非常に重要ではありません。 より大きな単語リストを生成することは、言語モデルにとって簡単な作業のように思えます。 結局のところ、LLMはテキストの巨大なコーパスで訓練されており、ほとんどすべての英語の単語が少なくとも一度は出現する可能性が高いのに対し、一般的な単語は何百万回も出現します。 ロボットはこれらの単語の代表的なサンプルを取ることができませんか? 答えは明らかにノーです。 GPTはこのすべてのテキストを「読んだ」と言えますが、これらの単語を簡単にアクセスできる形式で保存することはありません。 (同じことが人間の読者にも当てはまります。 生涯の読書体験を振り返って、語彙の中で最も一般的な10の5文字の単語のリストを作成できますか?
ChatGPT 4に単語のリストを生成するように依頼したところ、「混乱させて申し訳ありませんが、OpenAIによって開発されたAIとして、単語データベースに直接アクセスしたり、外部ソースからデータを取得したりすることはできません...」と申し訳なく反対しました。 そこで、いくつかのトリックを試して、ロボットに1000語のストーリーを書いてもらい、ストーリーの単語を頻度で並べ替えました。 トリックはうまくいきましたが、サンプルが小さすぎてあまり役に立ちませんでした。 私がそれに固執する限り、私はGPTから受け入れ可能なリストを同軸にすることができるかもしれませんが、私は近道をしています。 結局のところ、私はOpenAIによって開発されたAIではなく、外部リソースにアクセスできます。 私はKnuthが編集した5,757の5文字の英単語のリストを彼の単語のはしご実験のために流用しました。 このリストを使用すると、GPT-4で記述されたプログラムは、次の9ステップのラダー図を見つけます。
リーチ ->桃 ->平和 ->場所 ->平面 ->計画 -亀頭> ->ガラス ->草 ->把握
この結果は、Knuthが30年前にスタンフォードグラフベースで発表したラダープログラムの成果と完全に一致しています。
この時点で、少しの外部の助けを借りて、ChatGPTがついに私の要求を満たしたことを認めなければなりません。 有効な単語のはしごを構築できるプログラムを作成します。 しかし、私はまだ予約があります。 GPT-4とKnuthは同じ出力を生成するプログラムを作成しますが、プログラム自体は同等ではなく、類似していません。
Knuthはこの問題に反対の方向にアプローチし、すべての可能な5文字の文字列(1200万未満)のコレクションから始めるのではなく、5,757の一般的な英語の単語のはるかに小さなリストから始めました。 次に、各単語がノードであるグラフ(またはネットワーク)を構築し、対応する単語が1文字異なる場合にのみ、2つのノードがエッジで接続されます。 次の図は、このような図の一部を示しています。
Knuthの単語ラダープログラムは、単純な単語リストをチャートに変換するために先行投資を必要とします。 一方、後者の要素にはなり得ない数千または数百万の5文字の文字列を無駄に生成することを回避します。 REACH-> GRASP問題を解くために、GPT-4プログラムは219,180のそのような文字列を生成しました。 そのうち2,792人(1%強)だけが本当の言葉です。
私が説明するさまざまな単語のはしご手順が学生によって提出された場合、単語リストのないバージョンに不合格の成績を与えます。 リスト付きのGPT-4プログラムは合格しますが、効率と優雅さのために、Knuthプログラムにのみ最高の評価を与えます。
チャットボットが劣ったアルゴリズムを好むのはなぜですか? あなたは単に手がかりを得るために「単語のはしごプログラム」をグーグルで検索することができます。 上位の結果のほとんどすべては、Leetcode、GeeksForGeeks、RosettaCodeなどのサイトからのものです。 これらのサイトは、GPTプログラムと同じように、各単語の125の1文字のバリエーションすべてを生成する必要があるソリューションを使用して、プログラミングコンテストの求職者や競合他社に対応することを明らかに意図しています。 そのようなサイトは非常にたくさんあるので(数百あるようです)、Knuthの本などの他のソースよりも重要です(テキストがトレーニングセットに表示される場合)。 これは、GPTではなく、間違ったアルゴリズムの選択についてLeetcodeを非難する必要があることを意味しますか? 代わりに、プロトコルの必然的な弱点を指摘したいと思いますが、その中で最も一般的なのはデフォルトで正しい答えです。
すべてのソフトウェアに対して大規模な言語モデルが書かれていると思うたびに、別の関連する懸念が私を悩ませます。 新しいアルゴリズムはどこから来たのですか? 大学の言語モデルは、既存のプロジェクトの要素をリミックスするのに創造的かもしれませんが、まったく新しくてより良いものを発明する方法は見当たりません。
**
はしごという言葉はもう十分です! **
私は行き過ぎて、特定の(そして無関係な)問題のあまりにも多くの変種でChatGPTを拷問したことを認めます。 おそらく、大学の言語モデルは、他の計算タスクでより優れたパフォーマンスを発揮します。 私はいくつか試しましたが、結果はまちまちです。 そのうちの1つについて議論したいのですが、ChatGPTの取り組みはかなり痛烈だと思います。
ChatGPT 3.5では、100番目のフィボナッチ数の値を要求します。 私の質問はOracleモードで尋ねられたことに注意してください。 私はそれを計算するプログラムではなく、この数を求めています。 それでも、ChatGPTは自発的にフィボナッチプログラムを作成し、そのプログラムの出力をレンダリングします。
ChatGPT 4.0に同じタスクを与えることは、さらに奇妙な旅に私たちを連れて行くでしょう。 次の対話では、システムが記述したコードの一部をテストして実行できるようにするChatGPTプラグインであるコードインタープリターをアクティブにしました。 どうやら、ロボットはこの機能を利用して、最初に未知の理由で失敗したプログラムを考え出しました。
この時点で、ロボットはまったく新しい方向に向きを変えて離陸し、必要なフィボナッチ値がビネーの公式と呼ばれる数学的恒等式によって計算されることを示唆しています。 それは数式を書いていましたが、その後考えを変えました。 それは数値精度の問題を正しく予見します:5の平方根の正確な値が与えられると、式は正確な結果を生成しますが、これは実行可能ではありません。
そのため、ChatGPTはバージョン3.5と同じ反復アルゴリズムを使用して、異なる戦略を採用しています。 今回は、Python(Javaとは異なり)は大きな整数を扱うのに問題がないため、正しい答えを得ました。
このパフォーマンスには、正解だけでなく、システムの勇気ある粘り強さにも感銘を受けました。 ChatGPTのトラブルにもかかわらず、予期せぬ困難に戸惑いながらも、あきらめることを拒否しました。 「まあ、そのマトリックス法はうまくいくはずです。 しかし、とにかく、ビネーの公式を試してみましょう... ああ、待って、私は忘れました... とにかく、これについてそれほど派手である必要はありません。 明らかにゆっくりとした方法でそれをやってみましょう。 問題解決に対する非常に人間的なアプローチだと感じています。 マシンでこの動作を見るのは奇妙です。
私の小さな実験は、AIオラクルとAIコードモンキーが人間のプログラマーを締め出そうとしているという主張を疑わせました。 私はいくつかの成功を見てきましたが、もっと失敗しました。 この暗い記録は、その解決策がよく知られており、広く公開されている比較的単純な計算タスクに基づいて編集されました。
他の人は、LLMコード生成のより広く、より深い評価をしました。 この記事の最後にある参考文献に、そのような研究を5つリストします。 報告された結果の一部を簡単にまとめてみたいと思います。
2年前、Mark ChenとOpenAIの50人以上の同僚は、コードの記述専用のChatGPT 3のフォークであるコーデックスの精度を測定することに多大な努力を払いました。 (Codex はその後、GitHub Copilot の「プログラマーのアシスタント」を動かすエンジンになりました。 )は、Pythonプログラムを書くことによって実行できる164のタスクのセットを作成しました。 これらのタスクは主に教科書の演習、プログラミングコンテスト、および就職の面接のコーディングでうまくいく方法に関する(驚異的な)文献のタイプです。 ほとんどのタスクは、わずか数行のコードで完了できます。 例:与えられた単語の母音の数を計算し、整数が素数か合成かを判断します。
Chen教授のチームは、成功と失敗を定義するための基準についても考えました。 LLMプロセスは非決定論的であるため(単語選択は確率に基づいています)、モデルは最初の試行で欠陥のあるプログラムを生成する可能性がありますが、試行の続行が許可されると、最終的に正しい応答を生成します。 温度と呼ばれるパラメータは、不確実性の程度を制御します。 温度がゼロの場合、モデルは常に各ステップで最も可能性の高い単語を選択します。 温度が上昇すると、ランダム性が導入され、ありそうもない単語を選択できるようになります。 陳ら この変更の可能性を考慮して、次の 3 つの成功ベンチマークを採用します。
pass@1 : LLM は最初の試行で正しいプログラムを生成します
pass@10: 生成された 10 個のプログラムのうち少なくとも 1 つが正しい
pass@100 : 生成された 100 個のプログラムのうち少なくとも 1 つが正しい
Pass@1テストはゼロ温度で実行されるため、モデルは常に最良の推測を提供します。 pass@10およびpass@100試験は高温で実行されるため、システムはより幅広い潜在的なソリューションを探索できます。
著者らは、164のタスクすべてでコーデックスの複数のバージョンを評価しました。 コーデックスの最大かつ最も強力なバージョンの場合、pass@1率は約29%、pass@10率は47%、pass@100は72%に達します。 これらの数字を見て、私たちは感銘を受けたりショックを受けたりする必要がありますか? コーデックスが最初の試みでほぼ3分の1の時間(温度がゼロに設定されている場合)に正しいことを祝う価値はありますか? または、提案された100の計画をふるいにかけて適切な計画を見つけると、成功率は4分の3近くに上昇しましたか? 私の個人的な意見はこれです:現在の世代のLLMを長期的な研究プログラムの先駆的な努力として見ると、結果は有望です。 しかし、このテクノロジーが手作業でコード化されたソフトウェアにすぐに取って代わることができると考えるなら、希望はほとんどありません。 私たちはまだ必要なレベルの信頼性にはほど遠いです。
他の研究では、ほぼ同様の結果が得られています。 フレドリコ・カッサーノ他 さまざまなプログラミング言語でコードを生成する複数のLLMのパフォーマンスを評価します。 彼らは幅広いpass@1率を報告していますが、50%を超えるのは2つだけです。 Alessio Buscemi は ChatGPT 3.5 を 40 のコーディングタスクでテストし、10 の言語で記述されたプログラムを必要とし、各クエリを 10 回繰り返しました。 4,000回の試行のうち、1,833回がコンパイルおよび実行できるコードを生成しました。 劉志傑ら ChatGPTの評価は、Leetcodeのウェブサイトに投稿された質問に基づいています。 生成されたコードを自動化されたLeetcodeスコアリングプロセスに送信して、結果を判断します。 すべての質問の平均合格率は、Cで書かれたプログラムの31%からPythonプログラムの50%までの範囲でした。 劉ら もう1つの興味深い観察:ChatGPTは、2021年9月(GPTのトレーニングセットの期限)以降に公開された質問のスコアがはるかに悪かったことです。 彼らは、ロボットがトレーニング中にすでに解決策を見ているので、ロボットが以前の問題をよりよく解決できるかもしれないと推測しています。
Li ZhongとZilong Wangが最近発表した論文は、プログラムの正確性の基本的な問題を超えて、堅牢性と信頼性を考慮しています。 生成されたプログラムは、存在しないファイルを開こうとしたときなど、不正な形式の入力や外部エラーに正しく応答しますか? LLMのプロンプトには、このような問題を適切に処理する方法を示す例が含まれていましたが、ZhongとWangは、生成されたコードが30〜50%の確率でそうしないことを発見しました。
これらの苛立たしい結果に加えて、私自身はもっと疑問を持っています。 ほとんどすべてのテストは、短いコードスニペットを介して実行されます。 10 行のプログラムの作成が困難な LLM は、100 行または 1,000 行のプログラムの作成が困難な場合があります。 また、単純な合格/不合格の評価は、コード品質の非常に大まかな尺度です。 Chenのグループベンチマークスイートの素数性テストを考えてみましょう。 これはコーデックスで書かれたプログラムの1つです。
大規模な言語モデルはまだ始まったばかりです。 ChatGPTは1年未満前にリリースされました。 基盤となるテクノロジーはわずか約6年前のものです。 LLMはコーディングの世界を征服する準備ができていないと主張していると確信していますが、彼らが決して征服しないほど自信を持って予測することはできません。 これらのモデルは間違いなく改善され、より適切に使用します。 すべてのクエリを最大限に活用する方法として「ジャストインタイムエンジニアリング」ガイダンスを提供する新興業界はすでにあります。
LLMのパフォーマンスを向上させる別の方法は、純粋な言語分析ツールではなく、論理および推論ツールを備えた別のコンピューティングシステムとのハイブリッドを形成することです。 彼の最近の死の前夜に、ダグ・レナトは、彼が構築に40年を費やした常識の巨大なデータベースであるLLMとCycを組み合わせることを提案しました。 Stephen Wolfram が ChatGPT の Wolfram への統合に取り組んでいます |アルファ版では、Wolfram|Alphaは、キュレーションされたデータとアルゴリズムのオンラインコレクションです。
それでも、LLMコースの生成を妨げるいくつかのハードルは克服するのが難しいようです。
言語モデルは簡単な方法で魔法を働かせます:文や段落を書く過程で、LLMは前の単語に基づいて次の単語を選択します。 それはあなたの電話でテキストメッセージを書くようなものです:「私はあなたに会います...」と入力すると、ソフトウェアは代替の継続を提案します:「明日」、「すぐに」、「後で」。 LLMでは、各候補者に確率が割り当てられ、モデルトレーニングセット内のすべてのテキストの分析に基づいて計算されます。
1世紀以上前、ロシアの数学者A.A.マルコフは、この統計分析からテキストを生成するというアイデアを最初に探求しました。 彼のプロセスは現在、nグラムモデルとして知られており、nはシーケンスの次の要素を選択するときに考慮する単語(または文字またはその他の記号)の数です。 私は長い間n-gramプロセスに魅了されてきましたが、主にそのコメディの可能性のためです。 (40年前に出版された記事で、私はそれを「文学をぎこちないものに変える芸術」と呼んだ。 ")
もちろん、ChatGPTやその他の最近のLLMは、nメタモデル以上のものです。 彼らのニューラルネットワークは、n個の連続する記号のシーケンスをはるかに超えた言語統計的特徴をキャプチャします。 特に重要なのは、任意の距離で選択されたシンボル間の依存関係を追跡するアテンションメカニズムです。 自然言語では、この手段は主語と動詞の一貫性を維持したり、代名詞を参照の目的語に関連付けたりするのに役立ちます。 プログラミング言語では、アテンションメカニズムにより、次のようなマルチパート構文構造の整合性が保証されます。 そうしたら。。。 それ以外の場合は、括弧を適切にペアにしてネストしたままにします。
ただし、これらの改善があっても、LLMは本質的に、既存のテキストに単語が出現する確率に基づいて新しいテキストを構築するためのツールです。 私の考え方では、それは考えていません。 これは、アイデアではなく言葉に焦点を当てた、より表面的なものです。 この粗雑なメカニズムを考えると、LLMがどれだけ達成できたかに驚き、戸惑いました。
何十年もの間、AIの建築家は、自然であろうと人工であろうと、真の知性には世界のメンタルモデルが必要であると信じていました。 あなたの周り(そしてあなたの内側)で何が起こっているのかを理解するためには、物事がどのように機能するか、それらがどのように組み合わされるか、次に何が起こるか、原因と結果についての直感が必要です。 Lynantは、最も重要な知識は、読み始めるずっと前に習得する知識であると主張しています。 あなたは落ちることによって重力を学びます。 ビルディングブロックタワーは取り壊すのは簡単ですが、再構築するのは難しいことがわかったら、エントロピーを理解します。 言語が根付き始める前に、幼児期の痛み、恐れ、飢え、そして愛について学びます。 箱の中の脳は、物理的または社会的宇宙に直接アクセスできないため、この経験にアクセスできません。
250年前、スイスの時計職人ピエールジャケドローは、羽ペンで書くことができる機械式オートマトンを作りました。 この時計仕掛けの装置には何百ものカムとギアがあり、スツールに座っている小さな男の子に扮しています。 活性化後、少年はペンをインクに浸し、短いメッセージを書きました-特にデカルトの格言「私は思う、それゆえ私はいる」。 なんて面白い! しかし、18世紀になっても、落書き人形が本当に考えているとは誰も信じていませんでした。 LLM懐疑論者は、ChatGPTを同じカテゴリに入れています。
これらの対照的なLLMメンタリティ理論のどれが正しいかをお話しします。 私は違います。 どちらの選択肢も私には魅力的ではありませんでした。 ベンダーや他の人たちが正しければ、推論や感じる能力、物質宇宙や社会的相互作用の経験、自己認識のないガジェットが大学の論文を書き、ラップソングを書き、恋人にアドバイスを与えるという事実に直面しなければなりません。 知識、論理、感情は無価値です。 滑りやすい舌がすべてです。 これは破壊的な提案です。 ChatGPTがこの無意識のショーで私たちをだますことができるなら、私たちも嘘つきであり、彼らの声と怒りは無意味かもしれません。
一方、Sutskeverが正しければ、私たちが大切にしている人間の経験の多く、つまり私たちが成長し、生きるにつれてゆっくりと進化する個性の感覚は、インターネットでこれらの言葉を読むことによって学ぶことができます。 もしそうなら、私は実際に中学校の言葉では言い表せない痛みに耐える必要はありません、私はそのような心痛と困難を引き起こすすべての愚かな間違いを犯す必要はありません。 世界と衝突して自尊心を傷つける必要はありません。 私は肘掛け椅子の快適さからこれらすべてを読むことができたでしょう。 言葉だけで、私の魂を形作る谷のすべてのつまずきや痛みを経験することなく、明確な心で成熟した状態に私を連れて行くことができます。
大規模な言語モデルがコンピュータサイエンスに与える影響について、私はまだ2つの意見(または2つ以上)を持っています。 )。 AI愛好家は正しいかもしれません。 これらのモデルは、プログラミングだけでなく、他の多くの種類の作業や学習を引き継ぐ可能性があります。 または、他の有望なAIイノベーションと同様に、失敗する可能性があります。 答えを得るのにそれほど長く待つ必要はないと思います。