AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》
10/100 第一週:📌 強化學習概論
10.小結與測驗:動物學習模擬 🐒 用 Python 建立 RL 小遊戲!
________________________________________
🧠 本章小結:強化學習概論(單元 1~9 回顧)
單元 核心觀念
1️⃣ 什麼是強化學習?➡︎ 強化學習是一種試錯學習方式,透過回饋訊號逐步優化策略
2️⃣ 與監督學習差異 RL ➡︎ 沒有標準答案,依靠獎勵來學習;監督學習需標註資料
3️⃣ Agent 與 Environment ➡︎ 智慧體在環境中互動,根據回報學習行動策略
4️⃣ MDP ➡︎ 四元件 狀態、行動、策略、獎勵組成 RL 的基本骨架
5️⃣ MDP 數學模型 ➡︎ 透過馬可夫假設簡化未來預測,只需考慮當前狀態
6️⃣ 策略與價值函數 ➡︎ 策略 π 決定行動,價值函數評估行動與狀態的好壞
7️⃣ V(s) vs Q(s,a) ➡︎ 狀態價值看「在哪裡好」,動作價值看「做什麼好」
8️⃣ 探索與利用 ➡︎ ε-greedy 策略平衡探索新機會與利用已知經驗
9️⃣ 應用場景 ➡︎ 遊戲、自駕車、金融、機器人、醫療教育等都用得到 RL
________________________________________
✅ 本章測驗題:5 題單選題 + 3 題思考題
________________________________________
📘 單選題
Q1. 下列哪一項不是強化學習的基本元件?
A. 標籤(Label)
B. 狀態(State)
C. 行動(Action)
D. 回報(Reward)
✅ 答案:A
👉 解析:Label 是監督式學習中的核心,但強化學習依賴回饋(Reward),不需要標準答案。
________________________________________
Q2. 在強化學習中,策略(Policy)指的是什麼?
A. 分類器的權重
B. 評估函數的參數
C. 決定在某個狀態下應採取哪個行動的規則
D. 損失函數的最小值
✅ 答案:C
👉 解析:策略是智慧體依據狀態來選擇行動的規則,是強化學習的核心學習目標。
________________________________________
Q3. 動作價值函數 Q(s,a) 描述的是:
A. 一個狀態的絕對重要性
B. 該狀態的標準答案
C. 在某狀態執行某行動後,期望能獲得的總回報
D. 探索與利用的平衡程度
✅ 答案:C
👉 解析:Q 值衡量在特定狀態採取某行動後,未來可累積多少獎勵,是策略選擇的依據。
________________________________________
Q4. ε-greedy 策略的目的是:
A. 讓模型更快收斂
B. 減少參數更新
C. 平衡探索新行動與利用已有最佳行動
D. 最大化模型精確度
✅ 答案:C
👉 解析:ε-greedy 是最常見的策略選擇方法,用於兼顧嘗試新路(探索)與重複有效方法(利用)。
________________________________________
Q5. 下列哪個應用情境最適合強化學習?
A. 分辨圖片是貓還是狗
B. 預測明天是否下雨
C. 自駕車在城市中導航
D. 將文章分類為不同主題
✅ 答案:C
👉 解析:自駕車需要根據動態環境做連續決策,回饋來自於行車結果,屬於典型的強化學習應用。
________________________________________
🧩 思考題
Q1. 請設計一個你自己生活中的 MDP 問題(S, A, R)舉例說明。
情境:準備AI考試
S(狀態):目前知識熟練程度(基礎、進階、熟練)
A(行動):選擇閱讀教材、做題庫、模擬考、請教老師
R(獎勵):每次模擬考的得分提升、理解力提升、信心增加
________________________________________
Q2. 你覺得自己目前在人生決策中,是偏向「探索」還是「利用」?請說明一個具體例子。
目前我偏向「探索」。例如:在AI領域學習過程中,我會持續嘗試不同的學習資源(線上課程、實作專案、研討會、同儕討論),希望找出最適合自己的學習方式,而不是單純依賴既有的學習方法。
________________________________________
Q3. 若你設計一個簡單的 RL 小遊戲(例如猴子學抓香蕉),你會如何設計其:
S(狀態):猴子目前的位置、高度、手的角度
A(行動):向前移動、向上跳、伸手、停留
R(獎勵):成功抓到香蕉 +10 分,失敗或跌倒 -5 分,持續沒抓到 0 分
________________________________________
以下是一個用 Python 建立的 簡易強化學習小遊戲:
📌**「猴子抓香蕉」Monkey Banana Game**:使用 Q-learning 演算法,模擬猴子學習如何移動到正確位置抓到香蕉。
________________________________________
🐒 遊戲簡介:猴子抓香蕉
• 網格世界為 5x5 格子
• 猴子起點為左上角 (0,0)
• 香蕉固定在右下角 (4,4)
• 猴子每次可以選擇「上、下、左、右」移動
• 抓到香蕉(到達終點)得 +10 分,否則每步 -1 分
• 使用 Q-learning 學會最短路徑!
________________________________________
✅ 安裝套件需求(只需 numpy,無需外部環境)
pip install numpy
________________________________________
🧠 Q-learning 小遊戲完整程式碼
python
import numpy as np
import random
# 環境設定
GRID_SIZE = 5
GOAL_STATE = (4, 4)
ACTIONS = ['up', 'down', 'left', 'right']
EPSILON = 0.2 # 探索率
ALPHA = 0.1 # 學習率
GAMMA = 0.9 # 折扣因子
EPISODES = 500 # 訓練回合
# Q表初始化:狀態空間為 GRID_SIZE x GRID_SIZE,行動空間為 4 個方向
Q_table = np.zeros((GRID_SIZE, GRID_SIZE, len(ACTIONS)))
def take_action(state, action):
x, y = state
if action == 'up': x = max(x - 1, 0)
if action == 'down': x = min(x + 1, GRID_SIZE - 1)
if action == 'left': y = max(y - 1, 0)
if action == 'right': y = min(y + 1, GRID_SIZE - 1)
return (x, y)
def choose_action(state):
if random.random() < EPSILON:
return random.choice(ACTIONS) # 探索
else:
x, y = state
return ACTIONS[np.argmax(Q_table[x][y])] # 利用
def train():
for episode in range(EPISODES):
state = (0, 0) # 起點
while state != GOAL_STATE:
action = choose_action(state)
next_state = take_action(state, action)
reward = 10 if next_state == GOAL_STATE else -1
# Q-learning 核心公式更新
x, y = state
nx, ny = next_state
a_idx = ACTIONS.index(action)
best_next_q = np.max(Q_table[nx][ny])
Q_table[x][y][a_idx] += ALPHA * (reward + GAMMA * best_next_q - Q_table[x][y][a_idx])
state = next_state
print("🎉 訓練完成!Q表已建立。")
def play():
print("🐒 模擬猴子抓香蕉的路線:")
state = (0, 0)
path = [state]
while state != GOAL_STATE:
x, y = state
a_idx = np.argmax(Q_table[x][y])
action = ACTIONS[a_idx]
state = take_action(state, action)
path.append(state)
print("➡️ 路徑:", path)
# 執行訓練與展示
train()
play()
這段程式透過 Q-Learning 演算法,模擬猴子學習如何在 5x5 的網格環境中移動,目標是從起點 (0,0) 走到終點 (4,4) 取得香蕉。
首先,環境定義了四個行動(上下左右),以及探索率(EPSILON)、學習率(ALPHA)、折扣因子(GAMMA)等基本參數。
核心部分在 train() 函式中,每一回合從起點開始,猴子依據 ε-greedy 策略選擇「探索」或「利用」行動:探索時隨機選擇方向,利用時選擇目前 Q 表中該狀態下預估最高價值的行動。每次移動若成功抵達目標則獲得 +10 獎勵,否則獲得 -1 懲罰,並透過 Q-learning 公式即時更新 Q 值。經過 500 次回合訓練後,Q 表學會最佳策略。play() 函式則展示猴子利用訓練好的 Q 表,從起點一步步依照學習到的最佳行動前往終點,完整呈現強化學習「試錯學習」的運作邏輯。
________________________________________
🔍 執行結果範例:
🎉 訓練完成!Q表已建立。
🐒 模擬猴子抓香蕉的路線:
➡️ 路徑:[(0, 0), (1, 0), (2, 0), (3, 0), (4, 0), (4, 1), (4, 2), (4, 3), (4, 4)]
________________________________________
📦 教學延伸:
你可根據此遊戲進一步加入:
• 障礙物(牆壁)
• 多個香蕉,隨機位置
• 模擬環境圖形化(使用 pygame 或 matplotlib)
• 使用 OpenAI Gym 進行標準化環境設計










