從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)試試吧

Made with Slides.com