Flappy Birdビデオゲーム
機学習デモを含む完全な
HTML5チュートリアルを紹介します。 この実験の目的は、
ニューラルネットワークと
遺伝的アルゴリズムに基づいた
人工知能のゲームコントローラを書くこと
です 。
つまり、Flappy Birdで最適なゲームを学習できるAIロボットを作成する必要があります。 その結果、私たちの小鳥は障害物を安全に飛ぶことができます。 最良のシナリオでは、彼女は決して死なないでしょう。
このプロジェクトの背景にある理論を読んだ後、このチュートリアルの最後でソースコードをダウンロードできます。 すべてのコードは
Phaserフレームワークを使用してHTML5で記述されています。 さらに
、Synaptic Neural Networkライブラリを使用し
てニューラルネットワークを実装し、ゼロから作成しないようにしました。
デモ
始めるには、デモをチェックして、動作中のアルゴリズムを評価してください。
全画面で実行ビデオプレゼンテーション
デモに加えて、アルゴリズムの簡単な説明付きの短いビデオを見ることができます。 すぐに情報を受け取りたい人にアピールします!
機械学習アルゴリズムとは何ですか?
アーサーサミュエルが1959年に述べたように、機械学習は、明示的にプログラミングせずにコンピューターを動作させる方法です。 一般に、これはトレーニングを微調整するプロセスであり、初期ランダムシステムを徐々に改善します。
つまり、ここでの目標は、モデルパラメーターを微調整することにより、貧弱なシステムから適切なソリューションを見つけることができる人工知能を作成することです。 このため、機械学習アルゴリズムは多くの異なるアプローチを使用します。
特にこのプロジェクトでは、機械学習(機械学習アルゴリズム、ML)への主なアプローチは神経進化に基づいています。 この形式の機械学習では、遺伝的アルゴリズム(GA)などの進化的アルゴリズムを使用して、人工ニューラルネットワーク(ANN)を訓練します。
つまり、この場合、ML = GA + ANNと言えます。
人工ニューラルネットワーク
人工ニューラルネットワークは、機械学習アルゴリズムのサブセットです。 これは、生物学的ニューラルネットワークの構造と機能に基づいています。 これらのネットワークは、互いに信号を送信する多くのニューロンで構成されています。
つまり、人工脳を作成するには、ニューロンをシミュレートし、それらを接続してニューラルネットワークを形成する必要があります。
標準的な人工ニューラルネットワークは、入力データレイヤー、1つ以上の非表示レイヤー、および出力データレイヤーで構成されます。 各層にはいくつかのニューロンがあります。 入出力データのニューロンは、外部環境に直接接続されています。 非表示のニューロンはそれらの間を接続します。
このプロジェクトでは、各オブジェクト(鳥)には独自のニューラルネットワークがあり、ゲームを完了するためのAI脳として使用されます。 次の3つの層で構成されます。
- 2つのニューロンを持つ入力層は、鳥が見るものを表します。
- 最も近いギャップまでの水平距離
- 最も近いギャップとの高さの差
- 6つのニューロンを含む隠れ層
- 1つのニューロンがアクションを作成する出力層:
- 出力が0.5より大きい場合、ジャークを作成し、そうでない場合は何もしません
次の図は、この例のニューラルネットワークアーキテクチャを示しています。

遺伝的アルゴリズム
機械学習アルゴリズムについて説明したとき、遺伝的アルゴリズムを使用してニューラルネットワークを訓練および改善すると述べました。
遺伝的アルゴリズムは、自然selectionと遺伝学を複製する検索ベースの最適化手法です。 選択、交差、突然変異の同じ組み合わせを使用して、元のランダムな母集団を変更します。
遺伝的アルゴリズムを実装するための基本的な手順は次のとおりです。
- ランダムニューラルネットワークで10個のオブジェクト(鳥)の初期集団を作成する
- 独自のニューラルネットワークを使用して、すべてのオブジェクトを同時に再生する
- 各オブジェクトについて、そのフィットネス関数を計算してその品質を評価します(詳細については、フィットネス関数のセクションを参照してください)
- すべてのオブジェクトの死後、現在の世代を評価して、遺伝演算子を使用して新しい世代を作成します(詳細については、 置換戦略のセクションを参照してください)
- ステップ2に戻る
フィットネス機能
遺伝的アルゴリズム(ステージ3)に加えて、ここではフィットネス関数をさらに詳細に検討します。それは何であり、どのように決定するかです。
母集団を最適なオブジェクトから進化させるため、適合度関数を決定する必要があります。
一般に、フィットネス関数はオブジェクトの品質を測定するメトリックです。 各鳥の品質指標がある場合、最も適したオブジェクトを選択し、それらを使用して次世代を再作成できます。
このプロジェクトでは、距離に正比例して鳥に報酬を与えます。 さらに、現在の距離に最も近い間隔で彼女を罰します。 このようにして、同じ距離を飛んでいる鳥を区別できます。
要約すると、フィットネス関数は、鳥によって作られた合計距離と、最も近いギャップまでの現在の距離との差です。

交換戦略
遺伝的アルゴリズム(ステップ4)に加えて、死にかけている世代に自然進化を適用するためのステップがあります。 本質的に、最高のオブジェクトは生き残り、その子孫は次のように最悪のオブジェクトを置き換えます。
- 適合度に応じて、現在の世代のオブジェクトをソートします
- 4つの最適なオブジェクト(勝者)を選択し、それらを次世代に直接渡します
- 2人の最高の勝者の間で交差した結果として1つの子孫を作成します
- 2人のランダムな勝者のクロスオーバー結果として3つの子孫を作成する
- 2人のランダムな勝者の直接コピーとして2つの子孫を作成する
- バリエーションを追加するために各子孫にランダムな突然変異を適用する
ソースコード
そして最後に、ソースコードをダウンロードするためのリンク:
https://github.com/ssusnic/Machine-Learning-Flappy-BirdFlappy Birdの機械学習アルゴリズム-結論
このチュートリアルでは、Flappy Birdのプレイ方法を学ぶためにAIロボットを正常に実装しました。 数回の反復の結果、ほぼ不死身のプレイヤーを得ることができます。 これを達成するために、機械学習アルゴリズムに2つのアプローチを使用しました。人工ニューラルネットワークと遺伝的アルゴリズムです。
実験のために、コード内のパラメーターの一部を変更して、何が起こるかを確認できます。 たとえば、隠れ層のニューロンの数や母集団のオブジェクトの数を変更できます。 さらに、フィットネス関数を変更することもできます。 さらに、いくつかの物理的パラメーター(障害物間の距離、重力など)を変更してみてください。
他のゲームの進化にも同じアプローチを試してください。