Choose Language
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
language choose
Abak Logo
強化学習で Abak Evolution をプレイする
強化学習は AI におけるゲームを誰にとっても変えました。私はそれを使って Abak のニューラルネットワークを訓練し、際立った結果を得ました。

2018 年、Google は AlphaGo ニューラルネットワークで GO チャンピオンを打ち破り、大きな話題になりました。さらに、家庭用 GPU を使って学習プロセスを高速化する優れたオープンソース機械学習ライブラリも利用可能になりました。

私は Abak でそれを試す決意をしましたが、始めた当初はニューラルネットワークが何かさえ、ほとんど分かっていませんでした。大学時代(1996 年)に少し誘惑はあったものの、データも GPU も目標もなく、取り組むのは難しかったのです。さらに数学的にも、ニューラルネットワークは重いテーマで、多くのひらめきが必要です。

長く激しく取りつかれたような研究の末、私はモデルを構築し、それに学習させることができました。

巨人の肩の上に立ちながら、私の最初の意図は、1990 年代に TD-Gammon を開発した Gerald Tesauro 博士から学ぶことでした。記憶が正しければ、これは強化学習アルゴリズムの最初の実用的実装でした。

しかし Abak は二次元ゲームなので、提案されたモデルは使えず、自分のものを開発しなければなりませんでした。私は一部のアルゴリズムの出力を、専門知識としてモデルの一部に組み込むことに決めました。そうすると NN の学習プロセスが楽になるのです。そうするのは少しズルのようにも感じました。

以下は両モデル、Backgammon と Abak の比較です。

Backgammon モデル

Backgammon で広く使われる TD モデルは列を記述します。盤上の各列について、それを表すために 4 つの入力が使われます。

  • チェッカーなし: [0,0,0,0]
  • チェッカー 1 個: [1,0,0,0]
  • チェッカー 2 個: [1,1,0,0],
  • チェッカー 3 個: [1,1,1,0]
  • チェッカー 3 個超: [1,1,1,1].

これを各チームごとに 28 セット(盤の各列に 1 つ)持つため、合計入力は 28*2*4 に、バー上のチェッカー数を数えるいくつかの入力が加わります。残念ながら、これは記憶だけを頼りに書いているので、正確でないかもしれません。

Abak Evolution モデル

Abak のモデルはかなり異なります。これはチェッカーを記述し、それぞれに特徴量のセットを持たせます。新しいバージョンでは補完のために簡略化した盤面記述も追加しましたが、結果はそれほど驚異的ではありませんでした。それでも特徴量群は残っています。

ゲーム記述モデルは 4 つの部分から成ります [477 inputs]:

  • チェッカー記述(14x30):チェッカーのステータス、距離、高さなどを含みます。クラス自体は含みません。クラスはモデル内の位置から継承されます。
  • チーム状態(4x2):いくつかのチェッカー数や状態特徴の集計。
  • 強さマップ(24x2)。
  • ゲーム状態:次に誰が振るか! (1).

モデルの完全な説明は以下で確認できます。

バージョン:

1.- Python Cumpy (TD-V1)。

この AI の最初のバージョンは、GPU 上で動く Numpy 風ライブラリ Cumpy を使い、純粋な Python で学習させました。ゼロから学びたかったので、Tensorflow も少し触ったものの、あえて裸で行くことに決めたのです(つまり、素晴らしい Python と Cumpy の組み合わせだけを装備して)。

特徴:

  • チーム 0 の勝率を推定する 1 つのネットワーク。
  • ポイント制に未対応。
  • 「次に誰が振るか」フラグを持っていなかった。
  • 強さマップを持っていなかった
  • 隠れ層 1 層、活性化は sigmoid。
  • 専門知識入りの旧 AI(GOFAI)に勝つまで 45.000 ゲームかかった。
  • 4.500.000 ゲーム学習し、GOFAI に対して 75% 勝った。
  • 2 年間本番稼働した。

2.- Tensorflow (TD-V2)。

Version 1 で痛かったのは、「次に誰が振るか」フラグなしで学習していたため、勝率計算が得意ではなかったことです。どういうわけか、良い手を選ぶという点では NN の結果はかなり良かったのですが、数学的には一貫していませんでした。Version 2 ではその問題を修正し、ゲームが 1、2、3 ポイントで終わる確率を計算する新たなネットワークも追加しました。

今回は新しいモデルを学習するために Tensorflow を選びました。フレームワークを学びたかったことと、良い出発点になる優れたサンプルを見つけたからです。

特徴:

  • チーム 0 の勝率を計算する 1 つのネットワーク。
  • ゲームが 1、2、3 ポイントで終わる確率を計算する 1 つのネットワーク。
  • 新しい強さマップを含む。
  • 隠れ層 2 層。活性化関数は隠れ層で Leaky RELU、出力層で sigmoid。
  • 12.000 ゲームで TD-V1 に 50% 勝つようになった。
  • 350.000 ゲーム学習し、TD-V1 に対して 80% の勝率に到達した。

3.- Version 3:保留中。

最善手を選ぶ意思決定の最後の一歩として、最良の Equity [%W*%p1+%W*%p2+%W*%p3] を探す単純なアルゴリズムがあります。

マッチの目標、各プレイヤーが勝つのに必要な点数、キューブ値に応じて、ネットワーク出力に異なる重みを与えます。

これを扱える NN を作りたいと思っています。それが V3 になります。今は開発していません。

Abak のニューラルネットワークモデル:

チェッカー記述(14 inputs x 30 checkers):

  • ホームまでの距離
    x/25
  • 上にいるチェッカー数
    x/4
  • 下にいるチェッカー数
    x/4
  • バーにいるか
    [0,1]
  • ホームにいるか
    [0,1]
  • 安全か(距離 = 0 の位置)。
    [0,1]
  • 別のチェッカーとブロックを形成しているか
    [0,1]
  • Druid に捕まえられうるか
    [0,1]
  • Druid に捕まっているか
    [0,1]
  • 拘束しているか(この入力は各 Druid にのみ適用)
    [0,1]
  • 近距離ゾーン(前方 6 ポジション)でヒットされるリスク
    [0..1]
  • 長距離ゾーン(前方 12 ポジション)でヒットされるリスク
    [0..1]
  • Druid に捕まるリスク
    [0..1]
  • 移動可能性
    [0..1]

各チームに関連するゲーム入力(4x2):

  • バー上のチェッカー数。
    x/15
  • 安全なチェッカー数。
    x/15
  • すべてのチェッカーがホームにある。
    [0,1]
  • 安全なチェッカー 0 の数。
    [0,1]

強さマップ:(24*2):

最後に、Doctor Tesauros が Backgammon に提案したものに似た、しかし簡略化された force マップがあります。各位置と各チームについて、そのブロックがどれだけ強いかを 0 から 1 の数で表します:

  • 0.0
    空なら。
  • 0.1
    チェッカーが 1 個あるなら。
  • 0.5
    そのチェッカーが Guard なら。
  • 1.0
    チェッカーが 2 個以上あるなら。

Abak Evolution Backgammon は、古典的なボードゲームに文字どおり新しい次元を加える、素晴らしいクラスベースの Backgammon バリアントです。