查表法撞上的那堵牆
經典的表格式 Q-learning為每一組(狀態、動作)保存一個數字。當狀態只有幾百個時,這很美好。但把鏡頭對準一個 Atari 畫面,單一影格就有 210×160 個像素——可能的畫面多到以兆計。地球上沒有任何一張表能為每個畫面存一列,而且你也永遠不會看到完全相同的狀態兩次。
一个小网格,每个格子显示随智能体探索而更新的动作价值。
解方是泛化(generalization):與其死記每個值,不如學一個函數,把狀態映射到動作值,並在相似的狀態之間共享學到的東西。這就是函數近似(function approximation);當這個函數是一個深度神經網路時,我們就把整件事稱為深度強化學習(deep reinforcement learning)。
「深度」到底買到了什麼
深度網路是一個可學習的特徵抽取器。前面的卷積層會發現邊緣,接著是會動的物件,再來是與遊戲相關的概念,例如「球正往左飛」——這些都不需要任何人手寫程式碼。然後你早已熟悉的同一套Q-learning更新,就跑在這些特徵之上。
图像经过卷积和池化层变成紧凑的特征向量,再送入分类器。
Atari 這個挑戰
點燃深度 RL 的基準,是建立在街機學習環境(Arcade Learning Environment)上的 Atari 基準(Atari benchmark):約 57 款遊戲、一套網路架構,輸入只有像素和分數。不允許針對個別遊戲調參——同一個代理必須學會打磚塊、乒乓和太空侵略者。
單一影格不足以當作狀態:從一張靜止影像你分不出球往哪個方向移動。標準技巧是影格堆疊(frame stacking)——把最近 4 個影格一起餵進去,讓速度與方向對網路而言變得可見。這是一個便宜又實用的辦法,把一個近乎部分可觀測(partially observable)的問題變得像具有馬可夫性質。
陷阱:天真的深度 Q-learning 會崩掉
如果你只是把 Q 表換成網路再跑 Q-learning,它通常會發散——值爆掉、代理遺忘、訓練劇烈震盪。罪魁禍首是致命三要素(deadly triad):把函數近似、自舉(用自己的預測來學習)以及離策略更新三者結合,穩定性就不再有保證。
自举的 Q 学习目标会重用网络自身的估计——这正是让朴素深度 Q 学习发散的“致命三要素”之一。
接下來的路
- 指南 2——DQN 配方:經驗回放 + 目標網路,這兩個點子才讓深度 Q-learning 第一次穩定下來。
- 指南 3——修正高估:Double DQN、Dueling 架構,以及優先回放。
- 指南 4——超越期望值:分布式 RL(C51、QR-DQN)與噪聲網路探索。
- 指南 5——Rainbow 與循環回放:把一切組合起來,再處理記憶與部分可觀測性。