<blockquote data-author-name="" data-content-utf8-length="32" data-source-title="" data-type="2" data-url=""><section><section>拡散モデルは画像やビデオの生成だけでなく、新しいプログラムの合成にも使用できることがわかりました。 </section></section></blockquote> <section><br></section><section>モデルに手描きの「5」の形のグラフィックを与えると、モデルは継続的な突然変異を通じてプログラムを修正し、最終的にターゲットのグラフィックを出力できるプログラムを取得することができます。 <a href="https://www.php.cn/link/1dfe257477e8cc749ac0a3bdcd98fca0" rel="nofollow" target="_blank"><img src="https://img.php.cn/upload/article/000/000/000/171985405722704.jpg" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></a></section><section> このモデルは、カリフォルニア大学バークレー校の研究チームによって提案された、ニューラル拡散モデルを使用して構文ツリーを直接操作するものです。 </section><section><br></section><section>論文 1 同校の博士課程の学生であるシュレヤス・カプール氏の指導教員は、同校のコンピューターサイエンス教授であるスチュアート・ラッセル氏です。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985406072994.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><ul> <li><section>論文タイトル: プログラム合成のための構文ツリーにおける拡散</section></li> <li><section>論文アドレス: https://arxiv.org/pdf/2405.20519</section></li> <li><section>プロジェクトアドレス: https://diffusion-diffusion. github.io/</section></li> <li><section>コードベース: https://github.com/revalo/tree-diffusion</section></li> </ul> <section><br></section><section>拡散モデルは、これまで画像生成の分野で大きな成功を収めてきました。研究チームは、拡散メカニズムを利用することで、モデルが構文の妥当性を確保しながらプログラムを繰り返し最適化する方法を学習できることを発見しました。この新しいアプローチの鍵は、モデルが各ステップでプログラムの出力を観察できるようにすることで、効率的なデバッグ プロセスを可能にすることです。 </section><section><br></section><section>反復する機能は、AlphaZero などのシステムで実証されており、拡散メカニズムの反復的な性質は、検索ベースのプログラム合成でも自然に使用されるでしょう。 </section><section><br></section><section>チームは、価値モデルを拡散モデルと同時にトレーニングすることで、その中のノイズ除去プロセスを、望ましい結果を出力するプログラムに導くことができることを発見しました。これにより、プログラム空間の効率的な探索が可能になり、生成プロセスの各段階でより多くの情報に基づいた意思決定が可能になります。 </section><section><br></section><section> このアプローチを実装するために、チームは、画像の描画にドメイン固有の言語が使用されることを前提とした逆グラフィックス タスクを選択しました。 </section><section><br></section><section>チームは次のように述べています。「リバースエンジニアリングのタスクは、私たちのアプローチに自然に適合しています。なぜなら、コードの小さな変更が、結果として得られる画像に意味のある変更をもたらす可能性があるからです。」例えば、 if 間違った位置にある形状が画像内に表示され、プログラム空間内で簡単に確認して配置できます。図 1 にいくつかの例を示します。 </section><section><br></section><section>この研究の主な貢献は次のとおりです: </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985406397481.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>1. 構文ツリー上で拡散を使用する新しい方法を提案する</section><section>2. 新しい方法がより優れていることを確認します。前の方法。 <br></section> <section></section><section>メソッド </section><section></section><section><strong></strong> つまり、このメソッドの核となるアイデアは次のとおりです。視覚タスク用に開発された画像拡散モデルと同様に、構文ツリーのノイズ除去拡散モデルを開発します。 </section><section><br></section><section> まず、Ellis et al. の論文「Write、execute、assess: Program Synthetic with a repl」のタスク例を見てみましょう。画像に基づいて構築ソリッド ジオメトリ (CSG2D) プログラムを生成します。 CSG2D を使用すると、加算や減算などのブール演算を使用して円や四角形などの単純なプリミティブを結合し、次の文脈自由文法 (CFG) を使用してより複雑な形状を作成できます。 図 2 の </section><section><br></section><section> 、 z₀ はターゲット プログラムです。 x₀ は z₀ のレンダリングされたバージョンです。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985406747234.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>タスクは、x₀を反転してz₀を回復することです。まず、ノイズ除去プロセスにより、y=16 が y=10 にランダムに変更されます。次に、左側の 2 つの形状を持つサブツリーを、1 つの形状だけを持つ新しいサブツリーに変換します。ここでの目標は、画像 x₀ に基づいて z₃ と x₃ から開始して、このノイズ除去プロセスを逆に実行して z₀ を取得できるニューラル ネットワークをトレーニングすることです。</section><section><br></section><section> 以下では、まず構文ツリーに「ノイズ」を追加する方法を説明し、次にこのノイズを反転するニューラル ネットワークをトレーニングする方法を詳細に説明し、最後にこのニューラル ネットワークを使用して検索を実行する方法を説明します。 </section><section><br></section><section><strong>小さな突然変異のサンプリング</strong></section><section><br></section><section>時間tにおけるプログラムをz_tとする。 p_N (z_{t+1}|z_t) を、プログラム z_t が z_{t+1} にランダムに変異する分布とします。ここで、p_N 突然変異が 2 つの点を満たすことを期待します: (1) 小さいこと、(2) 構文的に有効な z_{t+1} を取得できること。 </section><section><br></section><section> これを行うために、チームは文法ベースのファズ テストに関する大量のコンピューター セキュリティ文献を調査しました。突然変異が小さいことを保証するために、最初にプログラム z の「サイズ」を与える関数 σ(z) を定義します。実験では、CFG 内のエンドポイント (端末) のセットをプリミティブとして定義します。 </section><section><br></section><section>たとえば、CSG2D 言語で書かれた場合、上記のプリミティブは {Quad, Circle} になります。この言語を使用する場合、チームのアプローチは、プリミティブの数をカウントする σ(z) = σ_primitive (z) とすることです。 σ(z) には、深さ、ノード数などのオプションが含まれる場合もあります。 </section><section><br></section><section> 次に、厳密な制約 σ_min <section><br></section><section> 指定されたプログラム z を変更するには、まず構文ツリー内の特定の σ_small 範囲で候補ノードのセットを生成します: </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985407595515.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section> 次に、このセットから変更ノードを均一にサンプリングします:</section><section><img src="https://img.php.cn/upload/article/000/000/000/171985407721733.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"> </section><section>構文ツリーと CFG 全体を読み取ることができるため、どの生成ルールが m を取得できるかを知っており、構文的に有効な変更が取得されることを保証できます。たとえば、m が数値の場合、その置換も数値にする必要があります。 m が一般部分式の場合、任意の一般部分式で置き換えることができます。したがって、m の代理となる m' をサンプリングすることができます。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985407876182.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section><strong> 戦略 </strong></section><section><br></section><section>前方プロセス </section><section><br></section><section> チームはプログラム合成問題を推論問題として扱います。 p (x|z) を観測モデルとします。ここで、x は任意のタイプの観測になります。タスクは、この観測モデルの方向を逆にすること、つまり、観測値 x が与えられた場合にプログラム z を取得することです。 </section><section><br></section><section>まず、データセット D からプログラム z₀ を取得するか、この場合は CFG からプログラムをランダムにサンプリングします。つまり、σ(z₀) ≤ σ_max を満たす z₀ をサンプリングします。次に、s ステップを実行して、ノイズが z₀ に追加されます。ここで、s 〜Uniform [1, s_max]、s_max はハイパーパラメーターです。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985407927308.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section> 次に、次の分布をモデル化する条件付きニューラル ネットワークがトレーニングされます。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985408118442.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section> ここで、ϕ はニューラル ネットワークのパラメーター、z_t は現在のプログラム、x_t はプログラムの現在の出力、x₀ は解決する必要があるターゲット出力です。 </section><section><br></section><section>反転突然変異パス</section><section><br></section><section>グラウンドトゥルース突然変異を取得する機能により、サンプリングされた軌跡は、マルコフ連鎖 z₀ → z₁ →... という順方向プロセスを通じて簡単に反転でき、ニューラルネットワーク。一見すると、これは合理的な選択のように思えるかもしれません。ただし、最後の突然変異を元に戻すようにモデルを直接トレーニングすると、ニューラル ネットワークに対してはるかにノイズの多い信号が作成される危険があります。 </section><section><br></section><section>たとえば、より大きな構文ツリーでは、色の突然変異パスは次のようになります: </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985408270603.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>ターゲット画像 x₀ の色は赤、突然変異した画像 x₂ の色は緑です。上記のマルコフ連鎖を逆にするようにモデルを学習させるだけの場合は、ネットワークを直接トレーニングして緑を赤に変えることはできますが、緑を青に変えるようにネットワークをトレーニングすることもできます。 </section><section><br></section><section> したがって、より良いトレーニング信号を作成するために、ターゲット ツリーと突然変異ツリーの間の編集パスを計算できます。チームは、ツリー編集距離に大まかに基づいたツリー編集パス アルゴリズムを使用しました。一般化されたツリー編集距離問題により、任意のノードの挿入、削除、置換が可能になります。ただし、ここでの設定は異なります。ツリー編集は、小さな変更のみが許可されるアクション空間でのみ実現できます。 </section><section><br></section><section> 2 つのツリー z_A と z_B の場合、それらの構文構造は線形的な方法で比較できます。 ≤ σ_small を満たす変更の場合、それらは突然変異リストに追加されます。変化 > σ_small の場合、2 つのツリー間の距離を縮める最初の突然変異を探します。したがって、任意の 2 つのプログラム z_A および z_B について、突然変異パスの最初のステップは O (|z_A| + |z_B|) 時間で計算できます。 </section><section> </section><section><strong>値ネットワークと検索</strong></section><section><br></section><section>チームはまた、値ネットワーク v_ϕ (x_A, x_B) をトレーニングしました。その入力は 2 つのレンダリングされた画像 x_A と x_B であり、予測はこれら 2 つの編集距離を生成することですイメージの基礎となるプログラム間。ツリー間の編集距離はトレーニング中に計算されるため、レンダリングされたイメージの任意のペアについて、グラウンド トゥルースの手続き型編集距離が直接取得され、この値を使用して教師ありネットワークでこの値をトレーニングできます。 </section><section><br></section><section>チームが提案した上記の新しい戦略と新しい値ネットワークを使用すると、任意のターゲット画像 x₀ とランダムに初期化されたプログラム z_t のビーム探索を実行できます。各反復で、最も有望な値を持つ検索ツリー内のノードのセットが維持され、これらのノードのみが展開されます。 <a href="https://www.php.cn/link/1dfe257477e8cc749ac0a3bdcd98fca0" rel="nofollow" target="_blank"><img src="https://img.php.cn/upload/article/000/000/000/171985408416385.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></a></section><section><strong> アーキテクチャ </strong></section><section><br></section><section> 図 3 は、新しく提案されたニューラル アーキテクチャの概要を示しています。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985408813130.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>彼らのノイズ除去モデル q_ϕ (z_{t−1}|z_t, x_t; x₀) は、視覚言語モデルを使用します。画像エンコーダに関しては、Batch-Norm 使用時の時間的不安定性の問題を回避するノーマライザーのない畳み込みアーキテクチャである NF-ResNet-26 の既製の実装を使用しました。 </section><section><br></section><section>チームは、CFG のエンドポイントをトークンとして使用するカスタマイズされたトークナイザーを実装しました。編集モデルの残りの部分は、小さなデコーダ専用の Transformer です。 </section><section><br></section><section>彼らは、他の 2 つのタイプのトークンも追加しました。1 つはモデルの文開始トークンとして機能する 1 つ、もう 1 つはモデルがコンテキスト内の位置を参照できるようにするトークン 1 です。 <edit><pos x></pos></edit></section><section><br>現在の画像、ターゲット画像、現在のトークン化プログラムを考慮して、編集位置と置換テキストを自己回帰的に予測するように Transformer モデルをトレーニングします。予測を行う場合、デコード プロセスは文法によって制約されます。チームは、構文ツリー ノードを表す編集位置のみを含むように予測ロジットをマスクし、選択した編集位置に対して構文的に有効な置換のみを取得しました。 </section><section></section><section><br>ここでは σ_small = 2 に設定します。これは、ネットワークが 2 つ未満のプリミティブを含む編集のみを生成できることを意味します。トレーニング データの場合、CFG からランダムな式の無限ストリームをサンプリングします。ノイズ ステップ s については、[1, 5] からランダムに 1 つが選択されます。サンプル ρ の一定の割合は、新しい式を突然変異した式としてランダムにサンプリングすることによって完成します。彼らは 1 つの NVIDIA A6000 GPU を使用して 3 日間トレーニングしました。 </section><section> </section><section></section>実験<section><strong></strong></section><section><br> 彼らは、4 つのドメイン固有のグラフィックス言語、CSG2D、CSG2D-Sketch、TinySVG、Rainbow について実験を実施しました。 </section><section></section><section><br>選択されたベンチマーク手法は、Ellis らが提案した「Write、execute、assess: Program Synthetic with a repl」と、Sharma et al が提案した「CSGNet: Neural Shape Parser for Construction Solid Geometry」です。 </section><section></section><section><br>図 4 は、新しいメソッドのパフォーマンスをベースラインメソッドと比較しています。 </section><section></section><section><br> CSG2D および TinySVG 環境では、新しく提案されたツリー拡散戦略が以前の方法の戦略よりも大幅に優れていることがわかります。この戦略のパフォーマンスは、ビーム検索と組み合わせることでさらに向上し、他の方法よりもレンダラーへの呼び出しを少なくして問題を解決できるようになります。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985409320120.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>下の図は、新しいシステムの成功例とベンチマーク手法の出力を示しています。ご覧のとおり、新しいシステムは、他の方法では見逃される小さな問題を解決できます。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985409781833.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section>次のビデオは、CSG2D-Sketch 言語を使用したスケッチベースの回復手順の 2 つの例を示しています。これは、観測モデルが必ずしも決定論的レンダリングを必要とするわけではなく、ランダムな手描きの画像で構成することもできることを示しています。 <a href="https://www.php.cn/link/1dfe257477e8cc749ac0a3bdcd98fca0" rel="nofollow" target="_blank"><img src="https://img.php.cn/upload/article/000/000/000/171985409929163.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></a><a href="https://www.php.cn/link/1dfe257477e8cc749ac0a3bdcd98fca0" rel="nofollow" target="_blank"><img src="https://img.php.cn/upload/article/000/000/000/171985410278289.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></a></section><section> これらの新しい設計の影響を理解するために、チームは、簡略化された Rainbow 環境で小型の Transformer モデルを使用したアブレーション実験も実施しました。その結果を図 5 に示します。全体として、これらの設計選択の結果は証明されています。 </section><section><img src="https://img.php.cn/upload/article/000/000/000/171985410523844.png" alt="カリフォルニア州バークレーでは、手描きのスケッチを見るだけでグラフィックス プログラムを作成でき、普及モデルに新しいスキルを教えています。"></section><section> 詳細については、原著論文を参照してください。 </section></section>