JOVANA
Explore Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

細看迴圈:狀態、動作與獎勵

打開互動迴圈,認識它的三個訊號——代理人看到什麼、做了什麼、又得到什麼回饋。

三個訊號在迴圈中流動

上一篇我們大致勾勒了互動迴圈。現在來精確地替它的三個訊號命名,因為整個領域都建立在它們之上。每一步,代理人收到一個狀態(state)、回傳一個動作(action),然後收到一份獎勵(reward)連同下一個狀態。狀態進來、動作出去、獎勵回來——這個三元組永遠重複。

三个信号循环流动:智能体发出一个动作,环境在下一步决策前回以新状态和奖励。

强化学习循环示意图:智能体经由动作连向环境,环境经由状态和奖励连回智能体。

狀態 vs 觀測:代理人實際看得到什麼

我們很容易以為代理人看得到「一切」,但真實的代理人幾乎從來不是如此。狀態(state)是處境真實、完整的描述;而觀測(observation)則是真正抵達代理人感官的、可能只是部分的切片。西洋棋引擎看得到整個棋盤——狀態與觀測一致。只有一個鏡頭的機器人,只看得到面前的東西——它得到的是觀測,不是完整的狀態。

這道落差影響極大。當觀測藏起了部分真相,同一個觀測就可能代表兩種不同情況,只憑所見行動的代理人就可能被誤導。在整個入門軌道裡,我們大多會假裝觀測等於狀態(也就是「完全可觀測」的情形),但請把這個區別放在口袋裡——後面的軌道會動用大量機制來處理「部分可觀測」的世界。

動作與動作空間

動作(action)是代理人對世界的施力桿——每一步它唯一能選擇的東西。所有可選項目的完整清單,就是動作空間(action space)。這份清單可以是離散的(一組小而固定的選項:上、下、左、右;或蓋牌、跟注、加注),也可以是連續的(某個範圍內的任意值:把方向盤打到 12.7 度、把馬達設成滿載的 0.43)。

网格世界让动作空间具体可见——在每个格子里,智能体从一小组离散的移动中做选择。

一个交互式网格世界,智能体通过在上、下、左、右之间选择来学习走向目标。

動作空間的形狀,會悄悄決定你能用哪些方法,所以值得及早辨認。在離散選項裡數清楚很容易;在無限多的連續選項中選得好,則需要不同的工具。現在,先養成對任何問題都這樣問的習慣:代理人到底能做什麼,那是多少個選項?

獎勵:定義成功的回饋

上一篇我們認識了獎勵訊號;現在把它精確地放進迴圈裡。代理人行動、世界轉移到下一個狀態之後,環境同時發出一份獎勵——一個替那一次轉移打分的數字。關鍵在於:獎勵屬於環境,不是代理人能自行設定的東西。代理人只能學會去賺取它,無法單方面宣告自己成功。

為什麼這是序列,而非單發

迴圈的每一輪看似簡單,但真正的難處在於各輪是環環相扣的。這就是序列決策(sequential decision-making):今天的動作會改變你明天面對的狀態,進而改變可選的動作,再進而改變未來的獎勵。一個現在能搶到小獎勵的動作,可能把你帶進一個之後毫無好選項的死角。代理人不是在挑一個答案——它是在替一個分岔的未來掌舵、走出一條路。

每个动作都把世界推向新状态,于是各步首尾相连——今天的选择塑造明天的处境。

一个交互式马尔可夫链,展示各状态由转移箭头相连,过程逐步推进。

state = env.reset()          # the starting situation
while not done:
    action = agent.choose(state)     # agent picks from the action space
    next_state, reward, done = env.step(action)  # world responds
    agent.learn(state, action, reward, next_state)
    state = next_state               # the loop carries forward
互動迴圈的虛擬碼——狀態進來、動作出去、獎勵回來,再把新狀態帶往下一輪。

把這段迴圈多讀幾遍。整個領域後面所有的演算法——從簡單的表格到深度神經網路——歸根究柢,都只是用更聰明的方式去填寫 `agent.choose` 和 `agent.learn`。