深層強化学習を用いたテトリスBotの作成の試行
by
thirofoo
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
深層強化学習を用いた テトリスBotの作成の試行 チームメンバー: monica_sor4chi through__TH 2kakerusei
Slide 2
Slide 2 text
概要 +深層強化学習に基づくモデルを作成し、テトリスをプレイす るエージェントを作成しました。 +開発の過程で得た知見に基づいて環境の修正やネットワーク 構成などを工夫し調査しました。
Slide 3
Slide 3 text
方針 +テトリスのゲーム環境を作成(Gym(nasium)互換) +学習エージェント作成 +強化学習ベースで実装 +報酬の条件、ハイパーパラメータを変えながら学習を回す +基本的にスコアを多く取得できるように(長生きするように)学習 させる
Slide 4
Slide 4 text
1. ゲーム環境 +Gym(nasium)にはテトリスの環境があるが、環境を変える際 に拡張できる情報に制約がある +https://gymnasium.farama.org/environments/atari/tetris +独自のCustomGymとしてテトリスを実装した +近代的なテトリスゲームとの相違点 +横入れなし +スピン系の技なし +両端の反発もなし +全てハードドロップでミノを配置する (=学習を高速化させるため)
Slide 5
Slide 5 text
1.1 テトリス実装 + 右の動画のように可視化される + 標準出力を使ったCLI環境で動く実装 + ゲームスコア内訳 + ミノを配置できれば1点 + 1ライン消すと100点 + 2ライン消すと300点 + 3ライン消すと500点 + 4ライン消すと800点 + ゲームオーバーは-1点 + src/tetris_gym内に実装されている
Slide 6
Slide 6 text
1.2 テトリス環境 +ゲームボードの状態や、ホールド以外に独自で状態を定義 +src/tetris_gym/tetris/tetris.pyのLine:133-155に記述 +実験によって取ってくる情報を変えている +特徴量エンジニアリングを行い、単純な2次元配列の情報よ りも説明的な変数を観測できるように工夫した
Slide 7
Slide 7 text
2. 学習エージェントについて
Slide 8
Slide 8 text
2.1 実装環境について +主に使用したライブラリ +Pytorch (NN構築、GPU環境の適応) +Gymnasium (OpenAI Gymの後継,強化学習用のエミュレート環境) +Numpy (ゲーム実装) +プロジェクト管理・実行環境 +Rye +Ruff
Slide 9
Slide 9 text
2.2 内部実装について +以下の実装基本的に、src/tetris_project/ai/NN.pyに記述されている +20ゲーム(episodes)づつ学習の結果を表示・モデルを保存する +保存されたモデルを使って、シミュレーションも可能 +学習の途中でも可
Slide 10
Slide 10 text
2.3 学習手法 +ゲームオーバーするまでに得られるスコアを最大化するよう、 際限なく学習 +深層強化学習の更新方法を用いてTD学習を行い、盤面評価を 学習する。 +行動の決定はε-Greedy法 +実験によってパラメータ変更
Slide 11
Slide 11 text
2.3 学習手法 +Experience Replayを用いて、ミニバッチ学習を実施 +バッチ時のパラメータは実験によって変えている +後半の実験ではリプレイバッファの取り方を工夫している +実験・結果パートで説明
Slide 12
Slide 12 text
3 実験・結果
Slide 13
Slide 13 text
3.1.1 実験1 (初期モデル) 𝜖𝑠𝑡𝑎𝑟𝑡 = 1.0, 𝑑𝑖𝑠𝑐𝑜𝑢𝑡 = 0.9 𝜖𝑚𝑖𝑛 = 0.00001, 𝜖𝑑𝑒𝑐𝑎𝑦 = 0.995, 𝑙𝑟 = 0.001 NN: ・入力: 行動後の状態 ・出力: 場面の評価値 ・Dense(128)→Dense(64) ・活性化関数: ReLU, 出力層はリニア ・全結合 ・loss関数:HuberLoss
Slide 14
Slide 14 text
3.1.2 結果/考察 + (学習時間: 8時間,平均: 20Line,Episode: 3000) + ラインを消すことには成功していて、学習が進 んでいることがわかるが、ところどころ穴を 作っていて、だんだん上に迫り上がってしまっ ている
Slide 15
Slide 15 text
3.2.1 実験2 (特徴量と隠れ層を増やす) 𝜖𝑠𝑡𝑎𝑟𝑡 = 1.0, 𝑑𝑖𝑠𝑐𝑜𝑢𝑡 = 1.00 𝜖𝑚𝑖𝑛 = 0.001, 𝜖𝑑𝑒𝑐𝑎𝑦 = 0.995, 𝑙𝑟 = 0.001 NN: ・loss関数: MSE ・中間層(64)→ 中間層(64)→ 中間層(32) ・活性化関数: ReLU, 出力層はリニア ・全結合
Slide 16
Slide 16 text
3.2.1 実験2 (特徴量と隠れ層を増やす) 特徴量 ( Dellacherie's Algorithm *[1] ) 1. Hole_count 2. Latest_clear_mino_count 3. Row_transitions 4. Column_transitions 5. Bumpiness 6. Eroded_piece_cells 7. Cumulative_well 8. Aggregate_height 9. Abobe_block_suqared_sum
Slide 17
Slide 17 text
3.2.1 実験2 (特徴量と隠れ層を増やす) 特徴量 ( Dellacherie's Algorithm *[1] ) 1. 上部にブロックがある空マスの総和 2. 直近でラインを消したミノの設置時の高さ 3. 行方向の空マス→ブロック、ブロック→空マスの遷移の数の総和 4. 列方向の空マス→ブロック、ブロック→空マスの遷移の数の総和 5. 隣り合う列の高さの差の総和 6. 直近で消したライン * ライン消しに貢献したミノのブロック数 7. 左右がブロックの空マスが k 連続の時の k の二乗和 8. 各列の高さの総和 9. 各空マスの上部にあるブロックの数の二乗和
Slide 18
Slide 18 text
3.2.2 結果 + (学習時間: 8時間, 平均: 1000Line, Episode: 5000) + 5000 episodes程度までのLossとRewards + 学習を高速化するために累積報酬が1000を超えたら学習打ち 切りにしている + 安定して1000に到達するまで1500 episodes + その後1000を超えないように積んでいき、最後一気にライン を消すことで + 900 -> 4lines(+800) -> 1700 + のような動きを学習している + ロスは増大しているが、学習はうまくいっているので謎
Slide 19
Slide 19 text
3.2.3 結果/考察 + 生存時間が長くなって、消せるライン数も増 加したが、下段か上段のどちらかに偏って生 存するようになった。 + 特に下段で生存する右側の動画では、高く積 み上がった瞬間に操作精度が落ちてゲーム オーバーしまうことから、経験学習の偏りが あるのではないかと考えられる。 + Experience Bufferを工夫してサンプルする ことで経験の偏りを緩和できないか。
Slide 20
Slide 20 text
3.3.1 実験3 (経験の偏りを緩和させる) + 実験2からパラメータ、NNの変更はなし + 追加で、Experience Bufferを設置したミノの位置が 盤面の上半分か下半分かで分け、均等に経験をサン プルするようにコードを修正
Slide 21
Slide 21 text
3.3.2 結果/考察 + 最初と比べると、下段~中段の穴の数が減り、うまく敷き 詰められているように見える + どちらか一方に寄って、片側に1-2マスほど残している + -> 得点が高いIミノやOミノなどを使った一気に2~4ライ ンを消す操作を期待してこのような行動をしている + -> 人間にも見られるプレイ方法を模倣できている + 上段だけでラインを消去することがほぼなくなっている + 止めなければ、半永久的にプレイし続けられる
Slide 22
Slide 22 text
4 まとめ +深層強化学習の更新方法を用いてTD学習、人間の動きを模倣 した論理的な行動をするテトリスエージェントが作成できた +Experience Bufferに区分を持たせることで経験の偏りを軽減 し、より性能が向上した +盤面の次元を特徴量で表現することで削減し、学習を高速 化・安定化させることができた
Slide 23
Slide 23 text
5 展望 +現在、行動後の状態から盤面評価の最大値を取る行動をする ような間接的なDQNを実装している。そのため、状態から直 接Q値を求めるようなDQNモデルも作成して評価したい +Prioritized Experience Replayという今回使ったExperience Bufferを分割する手法の派生があるようなのでそちらを試し たい +今回は学習の高速化と安定化を図るためわざとFEによって盤 面情報の次元数を減らしたが、CNNを用いた盤面を直接 inputするような方針でも学習させたい
Slide 24
Slide 24 text
参考文献 [1] Isiam, El-Tetris – An Improvement on Pierre Dellacherie’s Algorithm, 2011 June 1