B. Policy Gradient
1. How to control your actor
Version 0.
- 上一課所提到重要性 ,可以使用當下獲得的獎勵 來代替
- 這樣做的問題是,actor 變得短視近利,只考慮下一刻是否得到獎勵
- 事實上,在每個 episode 中,actor 大部分行為影響的不只是當下獎勵,也會影響未來獲得的獎勵,這個現象又稱為 reward delay
- 以 space invader 為例子,如果 actor 都只考慮當下的獎勵,則他只會學到不斷開火 (因為移動在當下無法獲得任何獎勵)
Version 1.
- 除了 s, a 當下的獎勵外,也考慮了之後所有的獎勵,計算一個累積獎勵 (cumulated reward)
- 這樣做的問題是,雖然 s, a 會影響所有之後產生的獎勵,但這個影響也不是相同的。影響的大小應該是會隨著時間而變小的
Version 2.
- 除了 s, a 當下與之後所有的獎勵之外,也考慮了時間的影響 (影響大小會隨著時間而衰退)
Version 3.
- 在某些情況下,可能沒有所謂該/不該做的行為,而是要挑最好的行為
- 這時候,必須透過一個基線 b 來對獎勵正規化
- 若獎勵低於 b,則表示該行為不好;若獎勵高於 b ,則表示是好的行為
- 這時問題又來了,基線 b 該如何得到?
2. Policy Gradient
- Policy gradient 方法的過程:
- 使用參數 初始化 actor
- 使用一個 for loop,不斷地重複: 獲得數據→計算損失→更新參數
- 在 for loop 中蒐集數據,每次蒐集數據都必須經歷許多個 s, a (因此RL過程很耗時)
- 更新完參數後,就必須重新蒐集新的數據。這是因為使用參數為 的 actor 所蒐集到的數據,並不適用在參數為 的 actor 上
3. On-policy vs. Off-policy
- 當訓練時的 actor ,與蒐集數據時與環境互動的 actor 必須相同,這種方法稱為 On-policy
- 若訓練時的 actor ,與蒐集數據時與環境互動的 actor 不同時,方法稱為 Off-policy
- Off-policy 的好處是,蒐集的數據可以用在所有的 actor 上,因此不必每次更新參數後重新蒐集數據
4. Off-policy→Proximal Policy Optimization (PPO)
- 可以用別的 actor 取得的數據來訓練自己
- 前提是,必須知道自己與別人的差異,並想辦法修正這個差異
5. Collection Training Data: Exploration
- 在蒐集數據時,對各種可能性進行探索是很重要的
- 不斷嘗試才有可能找到更好的行為
- 所以通常會對 actor 輸出的行為機率分布進行取樣,而不是直接取最大值,這樣才會帶有隨機性,增加 actor 行為的多樣性
- 或是也可以在 parameter 上增加雜訊,或是將輸出的 entropy 加大