Game AI

簡介(X

講幹話(O

Game AI?

How to do it?

強化學習

沒有最強,只有更強

概念

概念

電腦為代理人(Agent),和環境作互動

從環境獲取狀態(State),並採取行動(Action)

環境會適時給代理人獎賞(Reward)

Agent根據與環境互動時所得到的獎勵,逐漸形成對獎勵的預期,並產生能獲得最大利益的方法。

範例

環境:遊戲畫面

行動選擇:往左/往右/開火

獎勵:打死外星人得到分數

終止條件:遊戲結束

目標:得到盡量多的分數

困難點?

  • 獎勵往往很少且會有延遲
  • 需要讓函數多嘗試不同可能

範例

方法

Policy-based

Learning an actor

Value-based

Learning a critic

Learning an actor

目標:輸入一個環境狀態,輸出最好的行動

方法:查表?狀態過多?

輸入:遊戲畫面

做某些事

Left=0.7

Right=0.1

Fire=0.2

輸出要執行的動作(機率)

f(x)

RDL=RL+DL

目標:輸入一個環境狀態,輸出最好的行動

看起來像個函數?

神經網路!

輸入:遊戲畫面

丟進神經網路

Left=0.7

Right=0.1

Fire=0.2

輸出要執行的動作(機率)

相信大家都會機器學習

不會的可以看我做的暑訓講義

或是去機器學習放學社課

定義函數的集合

評估函數的好壞

找到最好的函數

就好像把大象放進冰箱...

要怎麼做

讓這個Actor多玩幾次遊戲

算出得分的期望值(就是取平均啦)當作Loss

做梯度上升

(跟梯度下降類似,不過是找最大值)

Learning a critic

目標:輸入一個環境狀態,輸出在給定某個Actor所能得到的期望分數。

一樣看Actor玩很多次後學起來,做類似迴歸

反正就跟Supervised Learning的做法差不多

不過只靠這個無法改變policy(做選擇的策略)?

Q-Learning

Q表: 記憶矩陣,其實也是個函數啦

給定狀態與行動Q(s,a),使用當前Actor所能得到的期望分數

因為Q知道使用哪個Action會使分數最多,所以可以透過某種方法更新Q函數,使其作出更正確的判斷

Q-Learning

著名的貝爾曼方程式

newQ(s,a)=(1-\alpha )Q(s,a)+\alpha [R(s,a)+\gamma maxQ'(s',a')]

\(\alpha\): 學習率,\(\gamma\): 折價因子

Q表的內容會隨"此步的獎勵"與"未來潛在獎勵"做變動

Actor-Critic

上面兩個也可以一起用

Actor在學習時使用Critic的輸出結果當期望分數

現在最強的強化學習算法大部分是用這個方法實作

Actor-Critic

(i) Train Actor

看Critic輸出的期望得分,做梯度上升

(ii) Train Critic

看Actor玩幾次的真實得分與預測的差異,做類似迴歸的事情

專題欣賞

最有存在感的學長黃思維

寫的RDL 2048

聽說這裡有很多好東西

聽說有很多好用的RL toolkit

如果想要了解更多可以參考

Actor-Critic 範例

DQN 範例

休息時間~

基因演算法

生物的演化法則

在幹嘛

同樣是找一個函數的過程

我們希望函數們模擬天擇的過程,期待能產生適應度最佳的演算法(?

先來欣賞一下專題

外交長兼聯課執秘大電神賴昭勳

寫的基因演算法tetris

How?

概念都差不多

定義函數的集合

評估函數的好壞

找到最好的函數

函數的長相

目標:輸入一個版面,輸出該版面的好壞程度

我們可以枚舉所有方塊落下的可能,形成一些可能的版面

算出他們的好壞程度,並執行最好的行動

跟剛才的Critic有點像(?

函數的長相

要怎麼知道一個版面好不好?

要自己找判斷依據 如:坑洞數、凹凸程度...
需要對題目有一定理解,並且好好設計

找出判斷依據對版面好壞的相關權重

如何評估一個函數是否恰當?

多玩幾次,取得分的期望值

找到最好的函數

讓表現得好的函數可以產生後代(X

後代們由親代的參數隨機分配

偶爾會有突變的情況

流程

表現得不夠好?

禁忌檢查

類似不能近親通婚的概念

可以比較快找到最佳解同時維持準確率

表現得不夠好?

迷因演算法

能力不只來自於先天遺傳,後天影響也很大

讓一些迷因在函數之間傳播,看是否能表現得更好

The end

Made with Slides.com