AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》
30/100 第三週:📌 蒙地卡羅方法(Monte Carlo Methods)
30.小結與測驗:MC 方法優缺點對比 📘 理論與實務的對話!
_______________________________________
🧠 一、本週重點整理
在本週的單元中,我們學習了「蒙地卡羅方法(Monte Carlo, MC)」作為一種不需環境模型、完全依賴經驗樣本的強化學習方式。以下是重點回顧:
________________________________________
🧩 單元統整對照表:
單元 主題 關鍵學習內容
21 蒙地卡羅方法概述➔ 用樣本估期望,從 episode 推算 V 值
22 First vs Every Visit➔ 兩種 MC 記錄方式,收斂特性各異
23 從遊戲中學策略➔ AlphaGo 初期訓練核心概念:MC + 自我對弈
24 使用隨機軌跡估值➔ 不用模型也能學策略,靠 Gt 統計更新
25 採樣與重要性修正➔ Off-policy 策略學習的關鍵橋梁
26 O-policy vs Off-policy➔ 自己學 vs 學別人,實務應用互有優勢
27 蒙地卡羅控制策略➔ ε-Greedy 引導策略進化,邁向最優解
28 ε-Greedy 策略應用➔ 探索與利用的智慧平衡方式
29 Blackjack 實作➔ 模擬環境中練習策略估計與控制的實踐
________________________________________
📘 二、MC 方法優缺點對比
蒙地卡羅控制方法具備許多優缺點。其優點在於不需要事先了解環境的轉移機率模型,實作概念直觀、容易上手,並能直接利用實際互動過程中完整的 episode 進行學習,具備一致性保證,理論上可收斂至正確的價值估計,特別適合模擬環境與回合制任務。
然而,其缺點也相對明顯:需要完整 episode 才能更新,無法即時學習,回報變異性大,收斂速度可能較慢;在狀態空間較大時,若未搭配函數逼近技術,記憶體需求與計算成本也會迅速攀升。因此,蒙地卡羅控制較適合用在中小型、具終止條件的任務中,若應用於大型或連續性問題,需結合更進階的方法才能有效發揮。
________________________________________
🧪 三、測驗題組:MC 方法理解評估
1️⃣ MC 方法需在何種條件下才能更新狀態價值?
A. 每執行一步即可更新
B. 只要採取動作就能更新
✅ C. 必須等到 episode 結束
D. 任意時刻皆可更新
📘 解析:
蒙地卡羅方法必須等一整個 episode 結束後,才能依據整體回報來更新狀態價值。這是它與時序差分(TD)法最大不同之處。TD 可以每一步更新,而 MC 依賴完整軌跡。
________________________________________
2️⃣ 下列何者是 MC 方法的一項優勢?
A. 不需要使用任何獎勵函數
B. 可直接預測所有 Q 值
✅ C. 不需知道環境的轉移機率
D. 能即時處理時間差異更新
📘 解析:
MC 方法是典型的 model-free 強化學習方法,能在不需要知道環境轉移機率(如 P(s'|s,a))的前提下運作,只依靠觀察得到的經驗(sample trajectories)進行學習。
________________________________________
3️⃣ 使用 First-Visit MC 的優點為何?
A. 更新次數最多
B. 會立刻學習
C. 更容易處理連續任務
✅ D. 避免重複樣本導致偏差
📘 解析:
First-Visit Monte Carlo 方法只在狀態第一次出現在某次 episode 中時進行更新,可減少重複樣本對學習造成的偏差,提升穩定性。相比之下,Every-Visit MC 會對所有出現次數進行平均,可能引入更多方差。
________________________________________
4️⃣ MC 方法若用於策略控制,通常搭配哪種策略改進機制?
A. Q-learning
B. SARSA
✅ C. ε-Greedy
D. TD(λ)
📘 解析:
當 MC 被應用於學習 Q 值並進行策略改進時,會搭配 ε-Greedy 策略:以高機率選擇當前最佳行動,但保留少量機會隨機探索其他動作,以避免陷入局部最優。
________________________________________
5️⃣ 加權重要性修正的特點是?
A. 無偏且變異小
✅ B. 有偏但變異小
C. 無偏且回報穩定
D. 不適用於 Off-policy
📘 解析:
加權重要性修正是 Off-policy MC 方法常用技術,雖會引入一點偏差(bias),但可顯著降低變異性(variance),從而提升學習的穩定性與效率。這是一種實務中常見的權衡手段。
________________________________________
📝 簡答題
1️⃣ 請說明 MC 方法為什麼不適合即時學習(如遊戲即時反應任務)?
✅ 參考答案:
因為 MC 方法需要等到完整 episode 結束才能計算 G<sub>t</sub>,因此無法在每一步即時更新價值,只適用於有限步驟的回合制任務。
________________________________________
2️⃣ 請舉出一個 Off-policy 學習場景與其應用價值。
✅ 參考答案:
在醫療診療紀錄中,我們只能使用既有的歷史行為策略(醫生過去的處置方式)來預測新的策略(例如新的藥物治療)可能的效果。這種情況下就需要 Off-policy 學習與重要性修正。
________________________________________
3️⃣ 若你設計一套 MC 控制演算法訓練遊戲 AI,你會如何設定 ε 值以平衡探索與利用?
✅ 參考答案:
可設初期 ε 值高(如 1.0),讓 AI 大量探索,隨著訓練進行逐步下降(如 ε ← ε × 0.995),最終趨近於較小值(如 0.05),讓策略穩定利用。
________________________________________
四 🃏 Blackjack 環境下的 Monte Carlo 每次-訪問法(Every-Visit MC)
這裡提供一個簡單的 蒙地卡羅方法(Monte Carlo) 實作範例,採用 OpenAI Gym 中的 Blackjack-v1 環境,用來訓練 AI 預估每個狀態的期望報酬(值函數 V(s))。
python
import gymnasium as gym
import numpy as np
from collections import defaultdict
# 初始化環境
env = gym.make("Blackjack-v1", sab=True)
# 建立狀態-值函數:預設為 0
value_table = defaultdict(float)
returns_sum = defaultdict(float)
returns_count = defaultdict(int)
# 訓練參數
num_episodes = 500_000
# 每次-訪問蒙地卡羅法
for _ in range(num_episodes):
episode = []
state, _ = env.reset()
done = False
while not done:
# 隨機策略:以等機率選擇 action(0=不要牌, 1=要牌)
action = env.action_space.sample()
next_state, reward, terminated, truncated, _ = env.step(action)
episode.append((state, reward))
state = next_state
done = terminated or truncated
# 計算總報酬並更新 V(s)
G = 0
visited_states = set()
for state, reward in reversed(episode):
G += reward
if state not in visited_states:
returns_sum[state] += G
returns_count[state] += 1
value_table[state] = returns_sum[state] / returns_count[state]
visited_states.add(state)
# 顯示其中幾個狀態的估值
for state, value in list(value_table.items())[:10]:
print(f"狀態 {state} 的估計價值 V(s) = {round(value, 2)}")
這段程式碼利用蒙地卡羅控制(MC-Control)搭配 ε-greedy 策略來訓練 Blackjack 智慧體。每次完整執行一場遊戲,記錄所有 (state, action, reward) 序列,並透過回溯累加回報 G 來更新 Q 值。採用 First-Visit 策略,避免重複更新同一回合內的相同行為,並用多次觀察到的回報平均值來穩定 Q 值估計。透過 ε-greedy 策略平衡探索與利用,AI 逐漸學會在不同手牌與莊家資訊下,什麼時候該要牌、什麼時候該停牌,最終形成穩定的決策策略。
________________________________________
✅ 解釋重點:
• env = gym.make("Blackjack-v1", sab=True):建立 Blackjack 環境。
• 蒙地卡羅方法不需要模型,只透過與環境互動來學習。
• 這是 Every-Visit MC:即使狀態在一回合中出現多次,仍會多次更新。
• 隨著迭代次數增加,估算的 V(s) 會逐漸接近真實的期望值。
• 採用的是隨機策略,可進一步結合 ε-Greedy 作為控制方法(下一步)。
________________________________________
🎯 延伸建議:
• 可修改 env.action_space.sample() 為 ε-Greedy 策略提升效果
• 可擴展為 MC 控制演算法,學習 Q(s,a) 與最優策略 π(s)
________________________________________
✅ 五、小結與啟示:
• 蒙地卡羅方法強調「從經驗學習」,是強化學習入門的重要技術
• 無需環境模型,但需要完整 episode,適合模擬環境與離線訓練
• 理論簡單但實務中有高變異與延遲更新的挑戰
• MC 方法是深入 TD 學習與 Actor-Critic 演算法前的重要橋樑!