把 DQN 放進瀏覽器後,還能像訓練時一樣玩嗎?

模型進入瀏覽器後,畫面整理、動作和遊戲流程都可能改變。本文說明怎麼檢查它真的在玩同一款 Breakout,以及展示能代表什麼。

2 分鐘閱讀
文章目錄

把模型檔案放進網頁,和讓模型在瀏覽器裡玩好打磚塊,是兩回事。模型每次需要四張小型灰階畫面,並替四種動作估分;如果瀏覽器提供的畫面、分數或動作意思不同,它就不是在原本學習過的遊戲裡做決策。

因此,搬進瀏覽器後要問的不只是「網頁能不能載入模型」,而是「它看到同一種畫面時,是否仍選出同一個動作;接上遊戲後,規則是否也相同?」

能算出分數,還不等於真的在玩

最初的瀏覽器展示只載入模型,讓它對固定畫面估計四種動作的分數。當時頁面清楚標示遊戲尚未接上。這是有用的一步:它確認瀏覽器能讀取模型並做運算,卻沒有把模型推論說成完整遊戲。

瀏覽器中模型對固定畫面計算動作分數的畫面

後來模型和 Atari 遊戲都能在瀏覽器中執行,不必把每一步畫面送回 Python 伺服器。瀏覽器可使用 WebAssembly 在一般處理器上計算,也能透過 WebGPU 使用顯示卡。不同電腦支援的方式不一樣,所以看見「支援 GPU」不代表眼前這一局一定由 GPU 執行。

瀏覽器要看見同一種畫面,才能沿用模型

訓練好的模型不是直接讀取任意圖片。它會收到最近幾張畫面,並依照固定順序估計不動、發球、往右和往左。瀏覽器必須用相同方式縮小和整理畫面,也要把模型選出的動作轉成遊戲真正能執行的動作。

遊戲開始和掉命後的發球也要說清楚。發球是遊戲流程的一部分;若由網頁自動處理,就不能把它算成模型自行學會了發球。同樣地,每次操作讓遊戲前進幾個畫面、掉命後從哪裡接續,都會改變模型後來看到的情況。

先把 60 張相同畫面交給 Python 與瀏覽器中的模型比較,這批畫面上的動作選擇全部相同。這能排除一部分轉換問題,但不能代表所有畫面都會一致,更不能取代完整遊戲測試。

能玩一整局,和每一步都相同是兩回事

遊戲中一次動作就會改變下一張畫面。如果兩種環境在某一步出現小差異,後續遊戲可能一路分岔,最後得分也不同。因此,逐步走出完全相同路線,和模型是否能正常遊玩,是兩個不同的問題。

目前可以確認的是,瀏覽器能載入模型並完成實際遊戲;但這不足以宣稱每一張處理後的畫面都與 Python 完全相同,也不能保證所有瀏覽器和電腦都會得到相同分數。要判斷模型表現,仍需看多局測試,而不是只看展示畫面。

人類玩家和模型是在同一場比賽嗎?

目前的頁面把人類與 Agent 放在同一畫面,但兩邊各自有一場獨立的 Breakout。人類用鍵盤或滑鼠控制自己的遊戲;Agent 看自己的畫面,由模型選擇動作。兩邊可以一起開始或暫停,球、磚塊、生命和分數卻不共用。

瀏覽器中人類玩家與 DQN 各自進行遊戲的畫面

你可以直接遊玩已部署的 Breakout 網頁版。它展示了模型、遊戲和網頁互動已接起來;是否比其他模型打得更好,仍要依照公平的多局比較來回答。