How to do it?
電腦為代理人(Agent),和環境作互動
從環境獲取狀態(State),並採取行動(Action)
環境會適時給代理人獎賞(Reward)
Agent根據與環境互動時所得到的獎勵,逐漸形成對獎勵的預期,並產生能獲得最大利益的方法。
環境:遊戲畫面
行動選擇:往左/往右/開火
獎勵:打死外星人得到分數
終止條件:遊戲結束
目標:得到盡量多的分數
困難點?
Policy-based
Learning an actor
Value-based
Learning a critic
目標:輸入一個環境狀態,輸出最好的行動
方法:查表?狀態過多?
輸入:遊戲畫面
做某些事
Left=0.7
Right=0.1
Fire=0.2
輸出要執行的動作(機率)
目標:輸入一個環境狀態,輸出最好的行動
看起來像個函數?
神經網路!
輸入:遊戲畫面
丟進神經網路
Left=0.7
Right=0.1
Fire=0.2
輸出要執行的動作(機率)
不會的可以看我做的暑訓講義
或是去機器學習放學社課
定義函數的集合
評估函數的好壞
找到最好的函數
就好像把大象放進冰箱...
讓這個Actor多玩幾次遊戲
算出得分的期望值(就是取平均啦)當作Loss
做梯度上升
(跟梯度下降類似,不過是找最大值)
目標:輸入一個環境狀態,輸出在給定某個Actor所能得到的期望分數。
一樣看Actor玩很多次後學起來,做類似迴歸
反正就跟Supervised Learning的做法差不多
不過只靠這個無法改變policy(做選擇的策略)?
Q表: 記憶矩陣,其實也是個函數啦
給定狀態與行動Q(s,a),使用當前Actor所能得到的期望分數
因為Q知道使用哪個Action會使分數最多,所以可以透過某種方法更新Q函數,使其作出更正確的判斷
著名的貝爾曼方程式
\(\alpha\): 學習率,\(\gamma\): 折價因子
Q表的內容會隨"此步的獎勵"與"未來潛在獎勵"做變動
上面兩個也可以一起用
Actor在學習時使用Critic的輸出結果當期望分數
現在最強的強化學習算法大部分是用這個方法實作
(i) Train Actor
看Critic輸出的期望得分,做梯度上升
(ii) Train Critic
看Actor玩幾次的真實得分與預測的差異,做類似迴歸的事情
最有存在感的學長黃思維
寫的RDL 2048
聽說有很多好用的RL toolkit
Actor-Critic 範例
DQN 範例
同樣是找一個函數的過程
我們希望函數們模擬天擇的過程,期待能產生適應度最佳的演算法(?
外交長兼聯課執秘大電神賴昭勳
寫的基因演算法tetris
概念都差不多
定義函數的集合
評估函數的好壞
找到最好的函數
目標:輸入一個版面,輸出該版面的好壞程度
我們可以枚舉所有方塊落下的可能,形成一些可能的版面
算出他們的好壞程度,並執行最好的行動
跟剛才的Critic有點像(?
要怎麼知道一個版面好不好?
要自己找判斷依據 如:坑洞數、凹凸程度...
需要對題目有一定理解,並且好好設計
找出判斷依據對版面好壞的相關權重
如何評估一個函數是否恰當?
多玩幾次,取得分的期望值
讓表現得好的函數可以產生後代(X
後代們由親代的參數隨機分配
偶爾會有突變的情況
禁忌檢查
類似不能近親通婚的概念
可以比較快找到最佳解同時維持準確率
迷因演算法
能力不只來自於先天遺傳,後天影響也很大
讓一些迷因在函數之間傳播,看是否能表現得更好