プログラム合成 – コードが自己書きすることを実現する

プログラム合成 - 自己書きするコードの実現

バズワードから直感へ(パート⅓)

おそらく聞いたことはあるけれど、完全に理解していない用語の一つが「プログラム合成(program synthesis)」です。これはAIがコードを書くための取り組みとして位置づけられることが多いです。この記事は、この概念を解明するための3部作の第1部です。ここでは、「プログラム合成」の意味的本質に焦点を当てます。明快さと分かりやすさを目指していますが、読みやすさのために一部の技術的な詳細は省略される場合があります。

「プログラム合成」を理解するためには、まず「プログラム」という用語に取り組む必要があります。では、まずは「プログラム」とは一体何なのかを考えてみましょう。

Image by Saar Barak (Author)

プログラム

基本的に、プログラミングとはコンピュータに何をするか指示することです。スマートフォンでリマインダーを設定したり、ソーシャルメディアの写真をカスタマイズしたり、トラフィックを最適化したり、このVoAGIの記事を設定したりするのは、すべてプログラミングです。理解を共有するために、プログラミングの三要素を見てみましょう:

  • プログラマーはタスクをプログラムに変えます。
  • プログラマーが与えるプログラムは、インタープリターが理解するものです。
  • インタープリタープログラムを受け入れて処理を行います。
Image by Saar Barak (Author)

なぜプログラミングを学ぶ時間を費やすのでしょうか?それは、コンピュータが私たちには到底及ばない能力を持っているからです。一枚の写真からパノラマ写真を手動で繋ぎ合わせる必要はありませんし、私は電話のおかげで友人たちの誕生日をすべて覚えているわけではありません。ブログを直接皆さんに届けることもできません。

プログラム合成

プログラム合成は、プログラミングを容易にするシステムです。GCCはアセンブリコードの記述を不要にし、スマートフォンのオペレーティングシステムは一枚の写真からパノラマ写真を作成します。このページの上部にある小さな緑色の「公開(publish)」ボタンをクリックすると、この記事がすべて送られてきます。プログラム合成により、あなたはプログラミング言語の強化バージョンで作業することができます。それを「Program++」と呼びましょう。これは元のプログラムよりも簡単です。

Image by Saar Barak (Author)

この合成器は中間人のような役割を果たし、あなたのProgram++を元のプログラムに変換します。この合成器をインタープリターと組み合わせると、高度なインタープリター「Interpreter++」が得られます。このアップグレード版は、あなたのProgram++(一般的には仕様と呼ばれることが多い)を受け取り、タスクを実行します。このプロセスは再帰的です。合成器とインタープリターの層を追加することで、プログラミングがますます容易になります。そのため、プログラム合成は単に「簡単なプログラミング」ということです。

現代のプログラム合成

プログラム合成の技術は、プログラム++/仕様をできるだけシンプルにする芸術です。ChatGPTやCoPilotなどの最近のプログラム合成技術は、高レベルの要件からコードを生成し、「手書き」のコードの必要性を減らし、人為的なエラーを最小限に抑えることができます。

Image by Saar Barak (Author)

プログラムとプログラム合成の定義ができたら、問題についても正確に定義する必要があります

問題

さて、プログラマはどのようにプログラムを書いて、インタープリタがタスクを正しく行うようにするのでしょうか?

Image by Saar Barak (Author)

タスクとしての仕様

タスクはさまざまな方法で指定できます。例えば、サラダを作るためのさまざまなレシピをイメージしてください。プログラムの正確さを検証するには、さまざまな基準を考慮する必要があります。サラダが美味しいかどうか、健康的かどうか、見た目が良いかどうかなどです。しかし、多くの現実のタスクの微妙なニュアンスは、計算的な理解から逃れてしまうことがしばしばあります。

問題としての仕様

仕様またはspecは、人間とコンピュータがどのようなことを行う必要があるかについて合意するための方法です。入出力(単にI/Oとも呼ばれる)は、人間とコンピュータの両方に理解される形式です。

Image by Saar Barak (Author)

他の形式の仕様もあります。たとえば、最大化する目的関数、コンピュータの動作に対する制約のセット、または自然言語の文などです。ただし、そのspecをどのように書くかには多くの自由度があります。異なるspecは、異なる視点、構文、または粒度レベルで同じ問題を説明することができます。たとえば、数のリスト(L)をソートしたい場合、次のように提供することができます:

  • 一連のI/Oペア: In₁[3,2,1] Out₁[1,2,3] | In₂[0,-1,2] Out₂[-1,0,2] | In₃[5,8,100] Out₃[5,8,100] | In₄[9] Out₄[9] …
  • 1つの文:「整数のリストを昇順でソートします。」
  • 数学的な関数: f( X ) = x₁≤ x₂≤ x₃ … ≤ xₙ
  • 再帰的な定義: Sorted(L) ⇔ L[1] ≤ min⁡( L[2:n] ) ∧ Sorted( L[2:n] )

同様に、サラダを作るためのspecは次のようになります:

  • I/Oペア: In₁[レタス, トマト, キュウリ] Out₁[サラダ] | In₂[キュウリ, シーザー, トマト] Out₂[サラダ以外]
  • 自然言語: レタス、トマト、キュウリを組み合わせる
  • 制約ベース: 少なくとも1つの緑の野菜と1つのタンパク質のソースを含める必要があります。

正確さ

specがあれば、コンピュータはプログラムを実行して入力から対応する出力を生成するかどうかを自動的に判断することができます。このプロセスを検証と呼びます。

Image by Saar Barak (Author)

今、シンプルな検証ツールが簡明な回答を提供します:True または Falseis_sorted( [1,2,4] ) = True。組み合わせた要素 [tomatoes, caesar] はサラダの材料ですか? False。しかし、私たちはもう少し進化させることができます — いくつかの検証ツールは、単純なバイナリ回答を超えて、プログラムの実行結果の評価指標やスケールに入り込んでいます。

論理から学習へ

従来、プログラム合成は厳密な論理ルールやアルゴリズム的推論によって支配されている分野でした。しかし、機械学習技術の導入により、その風景は急速に変化しています。学習ベースのアプローチへのシフトは、プログラム合成の速度、精度、効率を革新しています。

Image by Saar Barak (Author)

多様なアプローチ:プログラム合成の分類 プログラム合成は一つの答えだけではありません。タスクのニーズに応じて、異なるアプローチや合成のタイプがより有利になることがあります。いくつかのタイプを探ってみましょう。

  1. 演繹合成 — 伝統的な方法。 形式手法、論理的なフレームワーク、アルゴリズム原理に依存します。高い精度を持ちますが、計算リソースを多く必要とする場合があります。信頼性が最も重要なクリティカルなシステムに適しています。
  2. 帰納的合成 — 現代的な方法。 主に機械学習技術とヒューリスティック手法によって推進されます。速度と適応性に優れていますが、演繹的な方法の厳密な精度に欠けることがあります。急速な開発サイクルとミッションクリティカルでないアプリケーションに最適です。
  3. 確率的合成 — 現実主義的な方法。 仕様や環境の不確実性に対処するために確率モデルを利用します。バランスの取れたアプローチを提供しますが、望ましい信頼性を達成するために微調整が必要な場合があります。一定の不確実性や変動が予想されるアプリケーションに適しています。

最後にいくつかの考えを述べさせてください…

人間の能力を超えたプログラム合成

私たちは制限する必要はありません。 私たちは、さらに進化し続ける合成ツールを構築することを目指しています!! 目標は、人間の能力を単に再現することではなく、現在の人類が対処できない新しい解決策を見つけ出すことです。これにより、医療、金融、そして宇宙の解読さえも新しい地平を切り拓く可能性があります…

Image by Saar Barak (Author)

さらなる読み物と参考資料

  1. 演繹合成に関するアルマンドの講義ノート ↩︎
  2. ニューロシンボリックプログラム合成に関する2021年の調査 ↩︎
  3. AlphaCodeによる競技プログラミング ↩︎
  4. コードでトレーニングされた大規模言語モデルの評価 ↩︎
  5. 機械学習と構成的意味論を結びつけるパーシー・リャンによる研究 ↩︎
  6. ニューラルセマンティックパーシングに関するACL 2018のチュートリアル ↩︎
  7. 子供はハッカーである ↩︎
  8. 認知の確率モデル ↩︎
  9. アルマンドのプログラム合成の定義と歴史に関する講義ノート ↩︎
  10. プログラム合成の最小限のガイド
  11. Microsoftのメンバーによるプログラム合成に関する2017年の調査 ↩︎

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more

データサイエンス

「新時代のAI/MLのためのソフトウェア/ハードウェアアーキテクチャをどのように共同設計するか?」

最新の生成AI技術は、コンピュータビジョン、自然言語処理などで爆発的な成長を遂げ、画期的なモデルアーキテクチャの研究に...

機械学習

「IoT企業のインテリジェントビデオアナリティクスプラットフォームを搭載したAIがベンガルール空港に到着」

毎年、約3200万人がベンガルール空港、またはBLRを通過し、世界で最も人口の多い国の中で最も忙しい空港の一つです。 このよ...

AI研究

マイクロソフトの研究者が「LoRAShear LLMの構造的な剪定と知識の回復に対する画期的な人工知能効率的アプローチ」を紹介

LLMは大量のテキストデータを処理し、関連情報を迅速に抽出することができます。これは、検索エンジン、質問応答システム、デ...

AIニュース

ChatGPTコードインタープリタープラグインの使用方法10選

「待ち望まれていたChatGPTコードインタープリタープラグインがついに展開されています以下に、それを使ってできることを紹介...

機械学習

「PDF、txt、そしてウェブページとして、あなたのドキュメントと話しましょう」

LLMsを使用してPDF、TXT、さらにはウェブページなどのドキュメントに質問をすることができるウェブと知能を作成するための完...

機械学習

「機械学習モデルからの情報漏洩を分析し、制約するための新しいAIの理論的枠組み」

機械学習アルゴリズムは、複雑で敏感な問題に適用されることから、プライバシーとセキュリティの懸念を引き起こしています。...