[心得] Learning to play Tetris
[關鍵字]:
Tetris, Reinforcement Learning, Monte Carlo Tree Search,
Temporal Difference Learning
[重點摘要]:
利用MCTS和TD實作自我學習的俄羅斯方塊機器人
1.影片 & GitHub
https://www.youtube.com/watch?v=EALo2GfZuYU
https://github.com/hrpan/tetris_mcts
2.簡介
故事起源於第一次看到 DeepMind 的 Atari 影片
https://www.youtube.com/watch?v=V1eYniJ0Rnk
當時深深覺得這東西實在太神奇了竟然可以自我學習而且達到超人類水準
覺得如果可以用到俄羅斯方塊應該蠻有趣的 就開始在閒暇時間讀相關的文章
起初以為用 DQN 或是 policy gradient 就可以輕鬆解決的問題
沒想到不管訓練多久都消不了幾條就放著生灰塵了
直到後來看到 AlphaGo 以後才又燃起了一線希望
也成功讓我的機器人成功消了超過1000條
3.關於俄羅斯方塊
相信大家應該都玩過了 對遊戲規則就不多做說明
一般人大概都不會覺得俄羅斯方塊是一款很難的遊戲
起初我也這樣想 後來仔細想想俄羅斯方塊其實需要很長遠的計畫能力
對一個完全沒有先備知識的電腦來說 每個動作都是等價的
假設電腦要消掉一條 (先假設沒有 hard drop)
他必須要往前計畫約50步才有辦法做到 (假設是 20 X 10 的版面)
這對傳統的 Q-Learning 來說難度是相當高的
因為 Q-Learning 本身對於 credit assignment 是指數遞減
也就是說你如果在第50步得到一分的話 第一步所獲得的分數只有 r^49 (0 < r < 1)
幾乎跟雜訊沒甚麼兩樣
之所以檯面上的俄羅斯方塊機器人可以有近人類水準的操作是因為他們大多用了
一些 hard-code 的額外獎勵 例: 列的高度 台面有幾個洞 平滑程度等等
這些額外獎勵可以大量縮短獎勵分配的長度 (從每消一條變成每放一塊獎勵一次)
讓這些訊號變得更顯著 不過這些獎勵只能用在特定遊戲中
一旦規則改變就必須在重新寫過 而且在一些困難的遊戲(例如圍棋)中
並不是所有人都有能力去寫出這種獎勵 所以讓機器人可以自我學習是非常重要的
詳細要如何用MCTS來解決這個問題就請看GitHub吧
4.心得
從開始解決這個問題開始到現在也過了快兩年
剛開始沒辦法消超過10條到現在可以消超過1000條看起來真的是蠻過癮的
(而且看起來還沒收斂應該可以再更高 不過因為一輪要跑太久(>10hrs)所以放棄了)
過程中也學到了不少python的技巧 可以算是蠻有收穫的吧
希望這篇文章可以啟發更多對 reinforcement learning 有興趣的人
(雖然我知道這文章沒啥組織性又打的很雜)
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 1.169.67.208
※ 文章網址: https://www.ptt.cc/bbs/DataScience/M.1545662371.A.E27.html
推
12/25 00:35,
6年前
, 1F
12/25 00:35, 1F
推
12/25 08:09,
6年前
, 2F
12/25 08:09, 2F
推
12/25 11:13,
6年前
, 3F
12/25 11:13, 3F
推
12/25 12:42,
6年前
, 4F
12/25 12:42, 4F
推
12/25 12:51,
6年前
, 5F
12/25 12:51, 5F
→
12/25 13:01,
6年前
, 6F
12/25 13:01, 6F
→
12/25 13:02,
6年前
, 7F
12/25 13:02, 7F
推
12/25 13:22,
6年前
, 8F
12/25 13:22, 8F
推
12/25 14:38,
6年前
, 9F
12/25 14:38, 9F
推
12/25 22:36,
6年前
, 10F
12/25 22:36, 10F
→
12/25 22:36,
6年前
, 11F
12/25 22:36, 11F
→
12/25 23:25,
6年前
, 12F
12/25 23:25, 12F
→
12/25 23:59,
6年前
, 13F
12/25 23:59, 13F
→
12/26 00:28,
6年前
, 14F
12/26 00:28, 14F
→
12/26 00:29,
6年前
, 15F
12/26 00:29, 15F
→
12/27 08:48,
5年前
, 16F
12/27 08:48, 16F
推
12/30 23:23,
5年前
, 17F
12/30 23:23, 17F
推
01/02 00:38,
6年前
, 18F
01/02 00:38, 18F
推
01/07 12:55,
6年前
, 19F
01/07 12:55, 19F
→
01/07 12:57,
6年前
, 20F
01/07 12:57, 20F
→
01/07 12:58,
6年前
, 21F
01/07 12:58, 21F
推
01/08 21:00,
6年前
, 22F
01/08 21:00, 22F
DataScience 近期熱門文章
PTT數位生活區 即時熱門文章