清華大学の博士研究員が、AlphaCode の背後にある技術的原理を 10 分かけて説明しました。プログラマーはそう簡単に置き換えられるものではないことがわかりました。

清華大学の博士研究員が、AlphaCode の背後にある技術的原理を 10 分かけて説明しました。プログラマーはそう簡単に置き換えられるものではないことがわかりました。

この記事はLeiphone.comから転載したものです。転載する場合は、Leiphone.com公式サイトにアクセスして許可を申請してください。

少し前、DeepMindチームは、競技レベルのコードを自動生成できる人工知能システム「AlphaCode」をリリースしました。「普通のプログラマーに匹敵する」と主張しており、リリースされるやいなや、国内外のAI界で大きな話題を呼びました。

- 論文アドレス: https://storage.googleapis.com/deepmind-media/AlphaCode/competition_level_code_generation_with_alphacode.pdf

- データセット: https://github.com/deepmind/code_contests

DeepMind のブログによると、AlphaCode は「世界で最も強力なアルゴリズム プラットフォーム」である Codeforces で 5,000 人のユーザーが解決した 10 の課題でテストされました。 AlphaCode は、これら 10 の課題に人間とまったく同じ形式でコードを自動的に入力し、多数の可能な回答を生成し、コードを実行して人間のプログラマーのようにチェックすることで実行可能な回答を選別し、最終的に人間のプログラマーの中で上位 54% という優れたスコアを達成しました。

言い換えれば、AlphaCode のコーディング能力は、Codeforces でテストを受けたプログラマーのほぼ半数 (2,300 人) の能力に匹敵します。ジュニアプログラマーの月収が2万元という計算によれば、AlphaCodeは世界中の人材資本家の人件費を毎年5億5200万元節約し、プログラマーの半数を失業させることになると予想されます...

しかし、DeepMind チームは当時、AlphaCode は現時点では競技プログラミング コンテストにのみ適していることも明らかにしていました。

これは、DeepMind が Alpha Go、AlphaZero、AlphaFold をリリースした後の新たな研究のブレークスルーであり、Alpha シリーズの伝説的色を大きく高めていることは否定できません。しかし、シリーズの他の作品(AlphaGoが世界囲碁チャンピオンを破ったなど)と比較すると、AlphaCodeのパフォーマンスは目立ったものではないようです。

現在、清華大学で朱軍教授のもとで博士研究員として働いているティー・ピアース氏は、AlphaCodeの技術原理に非常に興味を持っています。彼女はDeepMindの31ページの論文を注意深く読んだ後、短いビデオを作成してYouTubeに公開し、システムの概要、テスト段階、データセットの事前トレーニングと微調整、Transformerモデルのトレーニングプロセス、Transformerアーキテクチャの側面からAlphaCodeの詳細を詳しく説明しました。

ビデオリンク: https://www.youtube.com/watch?v=YjsoN5aJChA

OpenAIが開発したGPT-3と同様に、AlphaCodeもTransformerモデルに基づいていますが、前者は音声生成に重点を置いているのに対し、後者は連続したテキスト(コードなど)の解析を重視しています。

次の AI テクノロジー レビューでは、この短いビデオを簡単に要約しています。

1 AlphaCode コードの問題

現在、AlphaCode は特定の種類の競技に重点を置いたコーディング問題を対象としており、参加者は Codeforces などのサイトでコーディング チャレンジに参加します。これらのチャレンジには問題の簡単な説明とテスト ケースの例が含まれており、挑戦者には正しい期待出力に一致する入力が提供されます。

簡単に言うと、これらのチャレンジの目標は、サンプルのテスト ケースや一連の非表示のテスト ケースに対して期待される出力を提供するコードを記述することです。コードがすべてのテストに合格すれば、問題は解決したことになります。

DeepMind によると、AlphaCode は Codeforces ウェブサイトで開催されたコーディング チャレンジで一般ユーザーと同等の成功率を達成しました。

2 AlphaCodeシステムの概要

それで、AlphaCode はどのように機能するのでしょうか?

DeepMind チームが発表した論文「AlphaCode による競争レベルのコード生成」では、概要が説明されています (以下を参照)。図に示すように、AlphaCode のコアコンポーネントは依然として Transformer 言語モデルであり、残りの個々のコンポーネントも古いものです。

図1: AlphaCodeシステム図

3使用されるプロトコル

まず、テスト中に AlphaCode がどのように動作するかを見てみましょう。

最初に知っておくべきことは、AlphaCode はコード記述の問題を解決するときに非常に特殊なプロトコルを使用し、このプロトコルによってシステムの配管が決定されるということです。論文によれば、DeepMind チームには、問題に含まれるのと同じ数のサンプルテストケースへのアクセスが与えられたという。

ただし、テストは送信された非表示のテスト送信ケース 10 件に制限されました。

4テスト段階のAlphaCode

AlphaCode のテスト時間は 3 つの個別のフェーズに分かれています。

彼らはまず、テスト問題の説明例と問題に関するメタデータを入力として大規模な Transformer モデルを使用し、モデルからサンプリングして多数の潜在的なソリューションを生成しました。最初に多数の潜在的な解決策を生成する理由は、ほとんどのスクリプトが一部の人々、あるいはコンパイラによってさえもコンパイルできないためです。

そのため、第 2 段階と第 3 段階では、主にこれらの 100 万の潜在的なコード スクリプトに対して「減算」を実行し、特定のプロトコルの前提の下で有用であると思われる 10 のソリューションを選択しました。彼らのアプローチはシンプルでした。サンプル テスト ケース内の 100 万のコード スクリプトをテストし、テストに失敗したスクリプトの約 99% を削除して、スクリプトの数を数千に減らしました。

しかし、合意では、ソリューションを 10 個に削減し続けることが求められています。そこで彼らは非常に賢いアプローチをとりました。

彼らは、問題の説明を入力として受け取る 2 番目の Transformer モデルを使用しましたが、問題を解決するためのコードを生成しようとする代わりに、Transformer を使用してテスト ケースの入力を生成し、問題ごとに 50 個のテスト ケースの入力をサンプリングしました。今では、入力と出力のペアを生成しようとするのではなく、問題に関連する現実的な入力を生成しようとしています。したがって、AlphaCode は、問題に応じて、文字列、バイナリ、数値のリストなどを生成する必要がある場合があります。

図1: Tim PearceがAlphaCodeテストの3つのフェーズを説明する

なぜこれが良いアイデアなのでしょうか?なぜなら、生成された 50 個のテストすべてに対して 2 つのスクリプトが同じ回答を返す場合、おそらく同じアルゴリズムを使用しているため、両方のスクリプトを試して 2 つの送信を無駄にしたくないと考えるからです。

そこで、生成された 50 個の入力に対して約 1000 個のスクリプトをコンパイルして実行しました。次に、これら 50 個の架空の入力に対する出力に基づいてスクリプトをクラスター化しました。次に、各クラスターからサンプル スクリプトを選択しました。 10 個のスクリプトのいずれかがすべての隠しテストに合格した場合、それらのスクリプトは最終的な 10 個のスクリプトとなり、エンコードの問題は正常に解決されます。それ以外の場合は、不合格となります。これは、テスト時に AlphaCode が動作する方法です。

これには、以下に示す Transformer モデルのトレーニングが含まれます。

5.データセットの事前トレーニングと微調整

AlphaCode は、今日のディープラーニングではかなり標準的な事前トレーニングの微調整プロセスを使用します。

ここには 2 つのデータセットがあります。最初のデータセットは、さまざまなプログラミング言語で構成されたパブリック Github リポジトリで、715 GB の膨大なコードが含まれています。これは、コード構造や構文などの非常に一般的な知識を Transformer が学習できるようにすることを目的として、事前トレーニング段階に使用されます。

2 番目のデータセットははるかに小さく、AlphaCode の目的のみに使用され、微調整に使用されます。このデータセットは、Codeforces を含むいくつかのコーディング チャレンジ Web サイトから収集されました。その後、問題の説明テストケースと手動で記述されたソリューションで構成されるデータセットでテストします。これらがデータセットです。さて、私たちは彼らをどうするのでしょうか?

6 Transformerモデルのトレーニングプロセス

まず、事前トレーニングの段階についてお話しましょう。

彼らはいくつかの github コードをスクレイピングし、いわゆるピボット ポイントをランダムに選択しました。

ピボット ポイントより前のすべての内容がエンコーダーに入力され、デコーダーはピボット ポイントより下のコード再構築を目指します。

エンコーダーはコードのベクトル表現を出力するだけであり、これはデコード プロセス全体で使用できます。

デコーダーは自己回帰方式で動作し、まずコードの最初のトークンを予測します。損失関数は、予測されたソフトマックス出力と実際のトークン間のクロスエントロピーになります。最初の実際のトークンはデコーダーへの入力となり、デコーダーは 2 番目のトークンを予測します。デコーダーが予期しないコード トークンの終了を予測するように要求されると、このプロセスはコードの最後まで繰り返されます。

現在、これらの損失はデコーダーとエンコーダーを通じて逆伝播されますが、エンコーダーのみに 2 番目の損失を追加することが重要であることが判明しています。

これはマスク言語と呼ばれ、損失を効率的にモデル化するために使用できます。エンコーダーに入力されたトークンの一部をクリアします。補助的なタスクとして、エンコーダーはどのトークンがマスクされるかを予測しようとします。事前トレーニングタスクが完了したら、微調整タスクに進みます。

ここでは、問題の説明と入力例のメタデータをエンコーダーに入力し、デコーダーを使用して人間が書いたコードを生成しようとします。この時点で、これはエンコーダー/デコーダー アーキテクチャによって強制される構造に非常に自然に適合し、損失は事前トレーニング タスクとまったく同じであることがわかります。

テスト入力を生成するTransformerもあります。これも、同じ github 事前トレーニング タスクから初期化されますが、コードを生成するのではなく、テスト入力を生成するように微調整されています。

7トランスフォーマーアーキテクチャ

DeepMind チームはさまざまなサイズのモデルを試しました。実験的には、モデルが大きいほどパフォーマンスが向上する傾向があります。エンコーダーとデコーダー自体はマルチヘッド アテンション レイヤーで構成されており、これらのレイヤーは非常に標準的です。

8その他のヒント

この論文は多くの進歩を遂げている。ここですべてを説明するつもりはありませんが、私が本当に素晴らしいと思う点の 1 つ、つまりラベルと評価の強化、および質問の説明について取り上げたいと思います。

メタデータは常に Transformer への入力として渡されます。これには、質問のプログラミング言語の難易度レベルが含まれます。トレーニング中に、いくつかの問題のラベルと解決策は正しいですか?彼らは明らかにそれらのフィールドの値が何であるかを知っていますが、テスト時に彼らが知らないのは、実際にテスト時にそれらのフィールドに異なるものを入力して、生成されたコードに影響を与えることができるということです。たとえば、システムが生成するプログラミング言語を制御し、このソリューションに影響を与えることもできます。

動的プログラミングアプローチを試すか、徹底的な検索を行うかなどの回答を生成しようとします。テストの際に役立つとわかったのは、最初の 100 万のソリューションのプールをサンプリングしたときに、多くのフィールドをランダム化したことでした。この初期プールの多様性を高めることで、コード スクリプトの 1 つが正しい可能性が高くなります。

9結論

上記は、Tea Pearce による AlphaCode の仕組みの説明です。 AlphaCode の作業から始めて、彼は自身の考えを語りました。なぜ DeepMind チームがこれらのコーディング問題で達成したパフォーマンス レベルは、囲碁 (AlphaGo) や StarCraft (AlphaZero) のゲームの超人的なレベルのシステムよりもはるかに低いのでしょうか?ティー・ピアース氏の分析によれば、自然言語による記述からコードを書くことは、ゲームをプレイすることよりも本質的に難しいが、これはゲーム内で利用できるデータがはるかに少ないためでもある可能性がある。必要なだけ多くのデータをシミュレートでき、エンコードの問題の数は制限されます。最後に、Tea Pearce 氏は、「AI がコードを書くのが難しい理由は何だろうか?」という疑問を提起しました。将来、AI のコーディング レベルはどのようにして人間の最適レベルを超えることができるのでしょうか?

<<:  北京冬季オリンピックと人工知能が出会うと、どんな火花が散るのでしょうか?

>>:  3Dの名の下、「インテリジェント製造」の包囲はAIビジョンユニコーンの新たな戦場です

ブログ    
ブログ    
ブログ    

推薦する

7,000万以上の店舗と10億以上の商品を持つWeidianは、どのようにAIシステムを構築しているのでしょうか。

[51CTO.com からのオリジナル記事] AI テクノロジーは電子商取引にとって不可欠ですが、...

自動運転のためのリアルタイム測位技術の詳細説明

1 概要自動運転車 (AV) が安全で効率的な運転を実現するには、リアルタイムで正確かつ堅牢な位置特...

2020年のディープラーニング開発のレビュー

近年の傾向に倣い、ディープラーニングは 2020 年も最も急速に成長している分野の 1 つであり続け...

2,000 ドル相当のコースノートをオープンソース化しました。講演者はKaggleの元チーフサイエンティストです!

数日前、fast.ai の創設者であり、Kaggle の元主任科学者である Jeremy Howar...

2021年以降、AIが研究技術を向上させる4つの方法

研究テクノロジーは、現代のビジネス環境に人工知能と機械学習を適用するための優れた方法を提供します。 ...

...

没入型環境向けロボットの開発における3つの課題

[51CTO.com 速訳] 最近、FacebookはMessengerプラットフォーム上のチャット...

Google の大きな動き!新しくリリースされた Cloud AutoML により、コードを書かずに AI トレーニングを完全自動化

これは大問題だ! Google が大きな動きを見せました!昨日、フェイフェイ・リーとジェフ・ディーン...

Facebook がアルゴリズム コード ライブラリ PySlowFast をオープンソース化、最先端のビデオ理解モデルを簡単に再現

Facebook AI Research は近年、ビデオ理解研究において多くの素晴らしい成果を上げて...

Photonics 3DバーチャルアンカーチームがJD.comと提携し、11.11の最新の戦闘レポートをリアルタイムで放送

毎年恒例の11.11グローバルショッピングフェスティバルが近づいており、JD.comは再び歴史を刻み...

...

教師なし学習のための最も重要な12のアルゴリズムとその使用例

教師なし学習は、教師あり学習とは対照的に、もう 1 つの主流の機械学習方法です。教師なし学習では、デ...

...

2019 年の AI、セキュリティ、IT 運用、IoT に関する主な予測

次の技術変化が始まる前に、将来の発展の方向を予測・判断し、技術変化に伴う可能性のある困難を軽減する必...

人工知能の導入は、より費用対効果の高い臨床試験の新しい時代を告げるだろう

臨床試験はここ数年で大きく変化しました。医薬品や医療機器、そしてそれらが影響を与える対象となる症状が...