從2048學TD learning
2018.06.22 柯筑苓
2021 更新:
投影片做得很爛,看部落格比較快喔:
https://ko19951231.github.io/2021/01/01/2048/
感恩各位
在這之前先有個數據吧
你用人腦+人手認真玩,可以玩到多高?
你設計的簡單AI可以玩到多高?
理想上,學完這些,你的AI可以高出它們非常非常多
使用AI的時機
操控玩家
- 原本使用stdin來讀入動作
- 現在要改用AI來決定動作
如何決定動作
- 累積玩遊戲的經驗,把所有經驗都當成學習的資料
- 利用訓練出模型,配合適當的準則來決定動作
Reinforcement Learning
Learning分三種
- Supervised 有label,用於分類
- Unsupervised 沒label,用於分群
- Reinforcement 一直不斷自我強化,沒有最好只有更好
暫且忘掉Mnist與
Supervised learning吧
- 忘掉tensorflow
- 忘掉類神經網路
- 忘掉activate function
- 忘掉mini batch
但請記得
- 學習就是把目前的數值往目標的數值邁出一小步
訂立明確目標
玩2048的目標是什麼
如何量化「這場遊戲玩得多好」?
可以使用的量化標準
- 這場遊戲賺到的總分
- 這場遊戲共動了幾步
- 這場遊戲結束時的最大磚(?)
選一個就好囉
假設選了「賺的總分」當成目標
那麼你的AI每一步都要選擇
「可以讓這場遊戲賺到最大總分」的走法
那機器到底要學什麼
先想想你的決策
- 你會為了賺最多總分,而在每一步都選擇能賺最多分數的走法嗎?
- 為什麼不?
Greedy母湯
- 某些動作雖然做完不會賺分數,但是可以把盤面弄得比較漂亮
- 某些動作雖然做完可以賺大分數,但是會把盤面留下爛攤子
何謂「漂亮」
何謂「爛攤子」?
這一頁不能破梗
畫白板拉
上下左右選哪個
這個「預計分數」哪裡來的
- 機器學的囉
學習步驟
1. 先玩
依照你目前的模型來決定動作
玩到死為止
記得每一步的盤面樣子、那步得到的分數,都要存起來(vector之類的)
2.來訓練囉
現在你有了一場遊戲的經驗
請藉由這個經驗讓這些盤面的值都往真相邁進一步
白板畫圖
TD
temporal difference learning
哪個當成目標最好
- 剩餘分數和
- 下一個state的分數加上這次分數
- 混合使用
哪個當成目標最好
- TD(1) 剩餘分數和
- TD(0) 下一個state的分數加上這次分數
- TD(λ) 混合使用
先從TD(0)試試吧
從2048學TD learning
By ko19951231
從2048學TD learning
- 835