AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》
28/100 第三週:📌 蒙地卡羅方法(Monte Carlo Methods)
28.Epsilon-Greedy 策略應用 🎯 加點隨機,避免陷入局部最優!
_______________________________________
🎯 單元導讀:
在強化學習中,AI 常會遇到這個難題:
「到底要繼續做目前最好的行動(利用),還是試試看新的選項(探索)?」
這是強化學習裡的核心抉擇——探索 vs 利用(exploration vs exploitation)。
為了解決這個矛盾,我們引入了最簡單也最實用的策略:
✅ Epsilon-Greedy 策略:大部分時間做最好的行動,但偶爾隨機試一下別的。
這種「加點隨機」的智慧,讓 AI 不會卡在次優策略中無法自拔!
________________________________________
🧠 一、什麼是 Epsilon-Greedy 策略?
ε-Greedy 是一種帶有機率性探索的決策機制:
• 以 1−ε 的機率選擇目前 Q 值最高的動作(exploit)
• 以 ε 的機率從所有動作中隨機選一個(explore)
這樣能確保 AI 有機會接觸新行動,發掘潛在更優解。
________________________________________
📦 二、公式與範例
假設一個狀態下有 4 個動作,Q 值如下:
Q(s) = [5.0, 3.0, 2.0, 0.5]
若 ε = 0.1,則:
• 有 90% 機率選擇 Q 最大的動作(a = 0)
• 有 10% 機率隨機從 4 個動作中選一個(平均每個動作約 2.5% 機率被探索)
________________________________________
🔁 三、實作片段(Python)
python
import numpy as np
def epsilon_greedy(Q, state, n_actions, epsilon):
if np.random.rand() < epsilon:
return np.random.randint(n_actions) # 探索
else:
return np.argmax(Q[state]) # 利用
這段程式碼實作了ε-greedy 策略,用來平衡探索與利用。在每次決策時,先用 np.random.rand() 產生一個 0 到 1 之間的隨機數,若小於 epsilon,則執行「探索 (exploration)」,隨機選擇一個動作(使用 np.random.randint(n_actions));否則執行「利用 (exploitation)」,從 Q 表中選擇當前狀態下擁有最高 Q 值的動作(使用 np.argmax(Q[state]))。其中 Q 是紀錄每個 (state, action) 對應價值的表格,通常會用字典搭配 np.zeros() 動態擴充,例如:Q = defaultdict(lambda: np.zeros(n_actions))。這個方法常被應用在 Q-learning、蒙地卡羅控制等離線學習過程,讓 agent 既能利用已有知識,又能持續探索新路徑,避免過早陷入次優策略。
此方法在 MC Control、Q-learning、SARSA 等演算法中廣泛使用。
________________________________________
📊 四、ε 該如何設定?
ε-greedy 策略有多種設計方式。固定 ε(如 0.1)在整個學習過程中維持固定的探索率,實作簡單且穩定,但可能收斂較慢。隨時間遞減(如 ε = 1/t)則在初期保留大量探索,隨學習次數增加逐步專注利用,能提高學習效率,但需設計合理的遞減速度避免太快陷入次優解。ε-Greedy with decay 方式(如 ε ← ε × decay_rate,例如 0.995)則讓 ε 平滑地指數下降,是目前許多實務應用中最常見的做法,兼具穩定性與效率,讓 agent 在學習前期廣泛探索,後期能逐漸集中學習最佳策略。
________________________________________
🎮 五、生活中的例子
情境 探索 vs 利用
餐廳選擇 常去同一家(利用) vs 嘗試新店(探索)
投資策略 一直用過去穩定策略 vs 投資新標的
學習方式 固定讀書方法 vs 嘗試不同的學習工具(影片/群組討論)
📌 若只依賴舊經驗,可能錯失潛力更大的選項!
________________________________________
🧩 六、挑戰與反思任務
1️⃣ 若 ε 設定過大會有什麼風險?反之,太小又會怎樣?
• ε 過大(如接近 1):
o 代表幾乎每次都在隨機探索,學習過程中很難累積穩定知識。
o 雖然可以避免卡在次優解,但學習效率低,收斂速度慢,尤其在後期可能一直在無意義的亂試。
• ε 過小(如接近 0):
o 幾乎總是利用現有 Q 值,缺乏探索新策略的機會。
o 可能在早期錯誤估計時快速陷入次優解,之後很難跳脫。
• 理想平衡:
o 初期適當偏高,讓 agent 先認識環境;
o 後期適當降低,聚焦在最佳策略的穩定學習上。
________________________________________
2️⃣ 如何動態調整 ε,讓 AI 初期探索多、後期專注最優策略?
常見的動態調整方法:
ε 的動態調整方式有多種設計。線性遞減(如 ε = ε₀ - k·t)實現簡單直觀,適合入門實驗,但收斂可能不夠平滑。指數衰減(如 ε = ε₀ * exp(-k·t) 或 ε ← ε × decay_rate)讓探索比例平滑下降,是實務應用中最常見的穩定方法。
分段遞減則每過固定次數手動調降 ε,具備高度靈活性,方便依學習進度微調。自適應調整則根據 Q 值變動幅度或任務成功率自動調整 ε,是最智能且高效的方法,但需要額外設計監控與調整邏輯。選擇哪種方法,通常需依任務特性與實驗需求權衡。
這樣可避免 ε 下降至完全沒有探索,確保系統長期仍有微量嘗試新路徑的能力。
________________________________________
3️⃣ 嘗試用 ε-Greedy 改寫 Q-Learning 或 MC-Control 程式碼,觀察學習收斂的變化
改寫範例(以 Q-learning 為例):
1. python
2. 複製編輯
3. import numpy as np
4. from collections import defaultdict
5.
6. Q = defaultdict(lambda: np.zeros(n_actions))
7.
8. def epsilon_greedy(Q, state, n_actions, epsilon):
9. if np.random.rand() < epsilon:
10. return np.random.randint(n_actions)
11. else:
12. return np.argmax(Q[state])
13.
14. for episode in range(num_episodes):
15. state = env.reset()
16. done = False
17. while not done:
18. action = epsilon_greedy(Q, state, n_actions, epsilon)
19. next_state, reward, done = env.step(action)
20. best_next_action = np.argmax(Q[next_state])
21. Q[state][action] += alpha * (reward + gamma * Q[next_state][best_next_action] - Q[state][action])
22. state = next_state
23.
24. epsilon = max(0.05, epsilon * 0.995) # 動態衰減
觀察重點:
• 若 ε 不衰減,長期仍會有許多無意義的探索;
• 適當衰減後,收斂速度加快,學到穩定的好策略;
• 完全不探索(ε = 0)則可能會早早卡死在次優解。
__________________________________
✅ 七、小結與啟示:
• Epsilon-Greedy 策略是強化學習中平衡探索與利用的關鍵技巧
• 透過簡單的「加點隨機」,讓 AI 避免陷入次優區域
• ε 的設定需根據任務性質、學習進度、資料分布做動態調整
• 是所有強化學習演算法的入門級策略選擇方法!