AI時代系列(3) 機器學習三部曲: 📘 第三部:《強化學習 —— AI 的決策與進化》
44/100 第五週:📌 Deep Q-Network(DQN)與深度強化學習入門
44.Experience Replay 機制 🎞 學會從過去經驗中穩定學習!
_______________________________________
🎯 單元導讀
在強化學習中,如果每次學習都只根據「最新一次經驗」進行更新,容易造成學習震盪、過擬合,甚至發散。
Experience Replay(經驗回放)是一種簡單卻強大的機制,
讓智慧體可以從過去的經驗中隨機抽樣學習,達到資訊去相關化、提升學習效率與穩定性。
這個想法首次在 DQN 中引入,成為深度強化學習中不可或缺的一環。
________________________________________
🧠 一、什麼是 Experience Replay?
Experience Replay 是一個循環記憶緩衝區(Replay Buffer),專門儲存智慧體在互動過程中產生的經驗:
每一筆經驗為 (s, a, r, s', done)
當學習時,系統不再只用最新一筆,而是:
• 從 記憶池中隨機取樣 mini-batch
• 讓學習過程更穩定、更具有泛化能力
________________________________________
🎞 二、Replay Buffer 的運作流程
階段 描述
📦 儲存經驗 每次與環境互動後,將 (s, a, r, s', done) 加入記憶池
🔁 隨機抽樣 每次訓練從中抽出 batch_size 筆經驗
📘 學習訓練 使用抽樣到的經驗來計算損失並反向傳播更新網路
備註:若記憶池滿了,會用先進先出(FIFO)原則移除舊資料。
________________________________________
🧪 三、為什麼 Replay Buffer 有效?
1️⃣ 打破時間相關性(de-correlate samples)
• 即時資料高度相關,容易使模型陷入偏差
• 隨機抽樣可模擬 i.i.d. 條件,更適合神經網路學習
2️⃣ 提升資料利用率
• 每筆經驗可被重複學習多次
• 不會像線上學習一樣「用一次就丟」
3️⃣ 防止過度擬合最新經驗
• 幫助策略從整體分布學習,而非「記憶最新狀態」
________________________________________
🧠 四、重要參數與技巧
參數 說明
buffer_size 記憶池大小(常見值:10,000 ~ 1,000,000)
batch_size 每次抽取幾筆經驗(常見:32 ~ 128)
warm-up steps 記憶池須儲存滿一定數量後才開始訓練
sampling 方法 常見為「均勻隨機抽樣」;進階則使用「優先經驗回放」 (Prioritized Replay)
________________________________________
🔁 五、Prioritized Experience Replay(進階版)
在某些經驗對學習特別關鍵時,我們希望給予更高抽樣機率。
此時可引入 TD 誤差 為基礎的優先排序,抽樣概率與誤差大小成正比。
好處:
• 加速學習收斂
• 聚焦在學不到的、難學的經驗
但需注意:
• 額外的 bias 需使用重要性加權修正(importance sampling)
________________________________________
📸 六、應用範例(以 DQN 為例)
python
# 基本流程
replay_buffer = []
buffer_size = 100000
batch_size = 64
# 儲存
replay_buffer.append((s, a, r, s_next, done))
if len(replay_buffer) > buffer_size:
replay_buffer.pop(0)
# 抽樣訓練
batch = random.sample(replay_buffer, batch_size)
這段程式碼描述了 DQN 中 經驗回放(Replay Buffer) 的基本運作流程。每次智慧體與環境互動後,會將當前經驗組合 (s, a, r, s_next, done) 儲存進 replay_buffer 中,作為訓練資料。為避免記憶體爆炸,當緩衝區超過預設大小(例如 100,000 筆)時,會刪除最舊的資料,保持固定容量。當需要訓練時,從 replay_buffer 中隨機抽取一組 mini-batch(例如 64 筆)作為訓練樣本,打破資料的時間相關性,讓神經網路學習更加穩定、多樣化,也提高了訓練效率與收斂效果。這正是 DQN 比傳統 Q-Learning 更穩定的重要設計之一。
________________________________________
🔍 七、生活中的類比與反思
1️⃣ 為什麼我們要回顧過去?
👉
• 回顧過去的經驗,可以幫助我們反思曾經的成功與錯誤,讓未來在面對類似情境時,做出更好的判斷。
• 這就像強化學習裡的「經驗累積」,透過過去的回饋訊息來修正行為模式,提升長期的決策品質。
• 人生中的檢討、復盤、反思,其實都是一種「人類版的 TD 誤差修正」。
________________________________________
2️⃣ Replay Buffer 像日記?
👉
• 很像!日記幫助我們記錄每天發生的事情,當需要回顧時可以隨機抽取過去的片段,從不同時間點的經驗中學習。
• Replay Buffer 也是在隨機抽取過往的互動經驗,避免只依賴最新的資訊,讓訓練資料更全面、穩定,避免「短視近利」的偏差。
• 它幫助 AI 打破資料的時序性,像我們在看以前的日記,跳脫當時當刻的侷限,看見整體趨勢。
________________________________________
3️⃣ Prioritized Replay 像什麼?
👉
• 它像是重點筆記本或高亮重點複習本。我們回顧日記時,不會每一件小事都一樣花時間,而是把特別重要或影響大的事件(比如關鍵成功、重大失敗)多看幾次。
• Prioritized Replay 會挑出 TD 誤差大的經驗(代表還沒學好的地方),讓 AI 重複學習困難情境,加速學習收斂效率。
_______________________________________
✅ 八、小結與啟示
• Experience Replay 讓深度強化學習更穩定、更高效
• 它打破時間相關性,提升樣本利用率
• Prioritized Replay 可進一步強化學習速度與效果
• 學習不只來自「現在」,也來自「過去的智慧」!