618ZXW

上海交通大学が「進化型ゲームエンジン」を発表!大規模モデルによりコードの自動成長が可能になり、事前設定なしで仮想世界を進化させることができます。

子どもの頃、自分だけのポケモンを飼うことを夢見なかった人はいないでしょう? (自分で作れるタイプの!)

最近、上海交通大学とハルビン工業大学(深圳キャンパス)の共同チームが「進化型ゲームエンジン」を開発し、この子供の頃の夢を実現しました。

従来のゲーム エンジンと組み合わせた大規模モデルは、特定の条件によってトリガーされ、新しいコードを自動的に生成できます。

ポケモンを実験対象に選んだ理由は、チームメンバーのほとんどがポケモンファンだからです。関連論文はArXivプラットフォームにアップロードされています。

「制御不能なプレイヤー」が現実に

研究チームは映画「アウト・オブ・コントロール」の登場人物「ガイ」を例に挙げた。

ガイは元々、バーチャルゲームのNPCで、あらかじめ決められた人生を送り、毎日同じことを繰り返していました。しかし、運命のいたずらで、彼は人生を変え、脚本を破る力を手に入れました。

研究者たちは、他のゲームでも同様のシナリオ、つまり NPC がオンラインで進化するのを見ることを熱望しています。

たとえば、クモに噛まれたり、素晴らしい宝物を発見したりすると、まったく新しい能力が解き放たれ、ある日悪者に変身することもあるかもしれません。

しかし、彼らが空想するもののほとんどは仮想世界の脚本にはなく、実現することはできません。

そのため、彼らは仮想世界の進化特性をその基盤となるエンジンのスケーラビリティに結び付けました。現在の仮想世界エンジンはスケーラブルではなく、新しいコンテンツを含めるように拡張できないため、進化が妨げられています。

そこで彼らは、特定の条件によってトリガーされ、新しいコードを自動的に生成できるまったく新しいエンジン、 Delta-Engine を提案しました。

Delta-Engine は 2 つのコンポーネントで構成されています。

ベース エンジン: 仮想世界の初期の外観を描写し、その静的な側面を表す基本的なエンジン。

ニューラルプロキシ:ニューラルネットワークはベースエンジンの外側のラッパーとして機能し、仮想世界の可変部分を表します。特定の入力によって、ベースエンジンに基づいて新しいコードが生成されます。

研究者たちは、テキスト、画像、スクリプト言語などさまざまな種類の入力もサポートできるため、仮想世界の作成に役立つと考え、大規模な言語モデルを基礎として選択しました。

Delta-Engineのスケーラビリティに対応して、増分予測と呼ばれる効率的なスケーラビリティ手法も提案しました。

簡単に言えば、プロキシ モデルがベース エンジン上の新しいコンテンツを予測できるようになります。

彼らはまた、エージェントモデルに限って言えば、増分予測、コンテキスト学習、そしてRAGは交差する概念であることを強調しました。しかし、増分予測はDelta-Engine全体に関わる概念であり、ベースエンジンの設計と密接に関連しています。

自分だけのポケモンをDIYしよう

研究者たちはデルタエンジンをベースに、仮想世界に似たコンセプトゲームを作成した。

チームメンバーのほとんどがポケモンゲームのファンであるため、主人公を進化するポケモンにして、 「Delta-Pokémon」というゲームを作成することにしました。

従来のポケモンゲームでは、成長モードを含む各キャラクターのコンテンツが事前に設定されています。

Delta-Pokémon では、プレイヤーは基本的な未開発のポケモンから始めて、バトルを通じて進化させ、新しい能力を習得し、自分だけのユニークなポケモンを作成します。

進化はすべてプレイヤーの希望次第です。プレイヤーは自然言語を使って、自分の好みに合わせて新しい属性、特徴、スキルを自由に書き込むことができます。

研究者たちはこれをオープン ロール プレイング ゲーム(ORPG) と呼んでおり、各プレイヤーがゲーム内で異なるキャラクターを演じます。

彼らは、仮想世界におけるプレイヤーのイメージは現実世界におけるプレイヤーのイメージの反映であり、現実世界からの離脱や現実世界への没入といったプレイヤーの特定の欲求を反映していると考えています。

ORPG が提供するオープン性は、別の形の自己表現を求めるプレイヤーの欲求を大いに満たすことができます。

デルタポケモンでは、作成された各キャラクターはデルタエンジンに対応しています。

プレイヤーはまず自然言語を入力し、それを対応するキャラクタースクリプトに変換します。Delta-Engineは文字スクリプトを受け取り、対応するキャラクターコードを生成します。キャラクターが進化するにつれて、エンジンも拡張されます。

研究者らは、自分たちが設計したポケモンを例として提供し、それは次のシナリオで初期化されました。

 { "物种": "路卡利欧", "属性": [ "格斗", "钢" ], "特性": { "胜利之心": "上场时,该宝可梦的攻击和特攻数值变为1.25倍。" }, "招式": { "波导弹": { "威力": 80, "命中率": 100000, "分类": "特殊", "属性": "格斗", "效果": "该招式必定命中。" }, "加农光炮": { "威力": 80, "命中率": 100, "分类": "特殊", "属性": "钢", "效果": "10%几率令目标的特防降低1级。" } } }

Delta-Engine の出力は次のとおりです。

 class Lucario(PokemonBase): def __init__(self): super().__init__() def onswitch(self): # 登场时攻击和特攻变为1.25倍self.set_stat('atk',1.25) self.set_stat('spa',1.25) def move_1(self): # Aura Sphere damage_ret=self.get_damage() if not damage_ret['miss']: damage=damage_ret['damage'] self.target.take_damage(damage) def move_2(self): # Flash Cannon damage_ret=self.get_damage() if not damage_ret['miss']: damage=damage_ret['damage'] self.target.take_damage(damage) # 10%几率令目标的特防降低1级if not self.target.isfaint() and rnd()<10/100: self.target.set_boost('spd',-1)

よく見ると、コードと上記のスクリプトの対応関係が簡単に見つかります。

OnSwitch はポケモンのビクトリーハート能力に対応し、Move_1 と Move_2 はそれぞれオーラスフィアとビームキャノンの 2 つの技に対応します。

なお、「Heart of Victory」は研究者によって開発されたオリジナル機能であり、公式機能ではない点にご留意ください。これは、プレイヤーが独自のコンテンツを作成できるというORPGの特徴の一つでもあります。

ここで重要な部分が登場します。研究者たちは以下の情報を再度入力しました。

学习一个新招式"保护": { "威力": 0, "命中": 100000, "分类": "变化", "优先": 4, "属性": "一般", "效果": "在这一回合中,使用者将免受其他宝可梦的攻击。如果使用者在上一回合使用了此招式,则此招失败。" }

Delta-Engine の出力は次のとおりです。

 @Increment(Lucario) def move_3(self): # Protect if self['last_act'] and self['last_act']['id']=='Protect': return # 设置保护状态self.set_condition('PROTECT',counter=0) @Increment(Lucario) def _take_damage_attack(self,x): # 免受其他宝可梦的攻击if self['conditions'].get('PROTECT'): del self['conditions']['PROTECT'] return self.register_act_taken() self.state['hp']=max(0,self['hp']-x) if self['hp']==0: self.state['status']='FNT' @Increment(Lucario) def endturn(self): # 回合结束时保护消失if self['conditions'].get('PROTECT'): del self['conditions']['PROTECT']

上記はDelta-Engineによる増分予測の結果です。初期コードに3つのクラスメソッドを追加することで、新たな防御動作を実装しています。

理論上、Delta-Engine は特定の入力に基づいてそのような追加を無制限に行うことができるため、キャラクターをオープンに進化させることができます。

デルタポケモンはどうやって作られたのですか?

Delta-Engine はプロキシ モデルを導入するため、その開発プロセスはプロキシ モデルの調整と切り離せません。

このプロセスには、一定量、あるいは大量のトレーニング データが必要です。

Delta-Engine に必要なデータは、主に次の 2 つの側面から得られます。

新規性: 他のシナリオと同様に、Delta-Engine では新規かつ多様なデータが必要であり、繰り返しデータはパフォーマンスのボトルネックを引き起こします。

面白さ:プレイヤー体験を向上させるには、データコンテンツ自体も興味深いものでなければなりません。しかし、面白さを評価するのは非常に難しいため、ヒューリスティックな評価基準を採用しました。

しかし、研究者たちは、大規模言語モデルは想像力を持たないと考えています。大規模言語モデルが示す想像力は、主に指示によって提供される手がかりから生じます。したがって、大規模言語モデルに想像力を発揮させるだけでは、新しい結果は得られません。

これに対処するため、彼らはプロトタイプと呼ばれる、エンティティに関する説明文をプロンプトに導入するという解決策を提案しました。プロトタイプは、大規模言語モデルに関連付けを行う方法を明示的に指示します。

たとえば、Claude3 がティラノサウルス・レックスをベースにしたポケモンをデザインするように依頼された場合、Claude3 は「エースプレデター」と「タイタンバイト」の能力を持つまったく新しいポケモンを作成します。

興味深いことに、プロトタイプは現実世界だけでなく、様々な仮想生物からも取得できます。例えば、トレーニングデータの一部は、ゲーム「モンスターハンター」に登場するアイスウルフドラゴンに基づいています。

さらに、研究者らは、サンプルの面白さを定量化するために、ヒューリスティックな手法を使用しました。

彼らは、楽しさは、プレイヤーが興味深いと感じる可能性のある一連の潜在的な「楽しさの要素」として定量化できると考えています。楽しさの要素が多ければ多いほど、プレイヤーが興味深いと感じる可能性が高くなります。

彼らはこれらの興味深い因子を「関心タグ」と呼び、サンプルにこれらのタグをラベル付けするにはラベリングモジュールが必要です。サンプルのこれらのタグはすべてブールベクトルで表すことができ、関心に関する彼らの仮定によれば、ベクトルの大きさが大きいほど関心度が高くなります。

そこで研究者たちは、ライフスティール、回復、強化など、約50個の興味深いタグを含むポケモンのタグセットを設計しました。ポケモンの設計にあたっては、興味深いタグ値が一定の閾値を下回るサンプルは除外されました。

これら 2 つの要件を満たすために、人間と大規模言語モデルの共同設計パイプラインも採用されました。

彼らは、大規模言語モデルが関連データを自動的に合成できるようになったとはいえ、AIは構築されるデータの新規性、興味深さ、正確さという点で人間の設計者に取って代わることは決してできないと考えている。さらに、合成されたデータに潜む大きなバイアスもまた、大きな潜在的な危険性である。

最後に、研究者らはデルタエンジンの性能を総合的に評価するための3つの評価基準を示しました。

単純な評価: エンジンの正確性を評価し、2 つのメトリックが含まれます。

精度 (Acc): 生成されたコードが意図した機能を正しく実装しているかどうかを示します。

実行率(Exe):これは、生成されたコードがコンパイル可能かどうか(正しいかどうかは関係ありません)を指します。Exeはユーザーエクスペリエンスにとって非常に重要です。多くの場合、正しく実行できないことは、機能の不一致よりもネガティブなエクスペリエンスになります。

この目的のために、彼らは「簡単」と「難しい」の 2 つのテスト セットも特別に作成しました。

イージーセクションには、公式に認定されたポケモンのサンプルが43個収録されています。ハードセクションは、専門家が作成したオリジナルポケモンで構成されており、既存のポケモンとはデータ分布が大きく異なります。合計70個のサンプルが含まれています。

研究者は約 500 個の高品質なトレーニング サンプルを使用して CodeGemma-7b を微調整し、さまざまなトレーニング データ量でのエンジン パフォーマンスの変化を観察しました。

増分評価: Delta-Engine のパフォーマンスとコンテンツ量の関係を評価します。

エンジンのコンテンツが拡大し続けると、コンテキストはますます長くなり、パフォーマンスに課題が生じます。

研究者たちは、100匹の「ポケモン」をランダムに縫い合わせることで、エンジン性能チャートを入手した。

青い縦線は、学習に使用された最大入力長を表しています。ポケモンが20進化するとコンテキスト長は5kに達し、40進化すると10kに達することがわかります。しかし、約10進化すると、エンジンの増分予測性能は段階的に低下し始めます。

研究者は、代理モデルの長さのスケーラビリティが Delta-Engine にとって非常に重要であると指摘しています。

敵対的評価: ユーザーからの非標準的な入力に応答します。

Delta-Engineは高いオープン性を備えているため、ほとんどのユーザー入力が許可されています。そのため、好奇心や娯楽から、エンジンをテストするために、奇妙で珍しいコンテンツを入力しようとするユーザーもいます。

研究者たちはこれを十分に理解しており、こうした入力すべてを総称して敵対的入力と呼んでいます。敵対的入力のほとんどには正解がないため、エンジンの実行速度は敵対的評価において特に重要です。