間抽象從回報(bào)中自動(dòng)涌現(xiàn)的層次強(qiáng)化學(xué)習(xí)架構(gòu))
2017年前后是深度強(qiáng)化學(xué)習(xí)最熱鬧的幾年但也是大家開始產(chǎn)生懷疑的幾年。深度Q網(wǎng)絡(luò)證明了像素輸入可以直接學(xué)出策略各種“模型玩游戲”的工作層出不窮可這些模型到底是在“解決任務(wù)”還是在“背下任務(wù)”誰也說不清楚。一個(gè)很多人認(rèn)同的判斷是機(jī)器缺少人處理長(zhǎng)任務(wù)時(shí)那種“拆成子目標(biāo)、分時(shí)間尺度決策”的能力。Option-Critic就是在那個(gè)時(shí)間點(diǎn)出現(xiàn)的。它做的事情一句話能講完把原本需要手工設(shè)計(jì)的“選項(xiàng)/技能”option變成一個(gè)能完全端到端訓(xùn)練、自動(dòng)從回報(bào)里涌現(xiàn)出來的架構(gòu)。它同時(shí)學(xué)三樣?xùn)|西——每個(gè)選項(xiàng)內(nèi)部的低級(jí)策略、選項(xiàng)之間的選擇策略、以及選項(xiàng)何時(shí)終止——而且三者用同一個(gè)價(jià)值函數(shù)串聯(lián)全部靠策略梯度聯(lián)合優(yōu)化。如果你在研究層次強(qiáng)化學(xué)習(xí)或者想在項(xiàng)目里引入“時(shí)間抽象”的能力這篇論文值得仔細(xì)拆。下面我把這套架構(gòu)的來龍去脈、關(guān)鍵公式怎么來的、以及復(fù)現(xiàn)時(shí)那些文檔里不會(huì)寫的坑全部攤開講一遍。1. 項(xiàng)目概述與核心思路拆解1.1 先搞清楚Option到底是個(gè)什么東西Option一般翻譯成“選項(xiàng)”但我更愿意叫它的本名“時(shí)序擴(kuò)展動(dòng)作”temporally extended action。普通強(qiáng)化學(xué)習(xí)的動(dòng)作是單步的這一幀移動(dòng)一格、這一次往前走、這一拍發(fā)一個(gè)指令。而Option是一段被命名好的行為序列比如“從當(dāng)前房間走到門口”“走到目標(biāo)房間”“繞開障礙物”。人的行為組織方式本來就是分層的我“去廚房”是一個(gè)高層動(dòng)作里面包含了站起來、邁步、轉(zhuǎn)彎一大堆底層動(dòng)作但我規(guī)劃的時(shí)候只思考“去廚房”這一條不會(huì)去摳每一步怎么邁。在這個(gè)語境里一個(gè)option有三個(gè)組成部分它允許在哪些狀態(tài)下啟動(dòng)初始集I、被選中后內(nèi)部如何執(zhí)行內(nèi)部策略π、以及每一步結(jié)束后以多大概率把這個(gè)option交還給高層終止函數(shù)β。經(jīng)典框架里這三個(gè)部分要么手工設(shè)計(jì)要么靠很別扭的方式單獨(dú)學(xué)而Option-Critic做的是把π和β的梯度都算出來讓它們和價(jià)值函數(shù)一起聯(lián)合訓(xùn)練。換句話說你不再需要告訴模型“什么是好的option”只需要告訴它“我給你N個(gè)option的名額”至于每個(gè)option具體長(zhǎng)成什么樣、在什么狀態(tài)下該激活、什么情況下該結(jié)束全部交給回報(bào)信號(hào)自己去長(zhǎng)。1.2 為什么要?jiǎng)印皶r(shí)間抽象”這個(gè)念頭最直接的理由是稀疏回報(bào)。拿論文里反復(fù)出現(xiàn)的四房間網(wǎng)格環(huán)境舉例一個(gè)11x11的格子世界被墻壁分成四個(gè)房間每面墻上有門通向隔壁目標(biāo)固定在某個(gè)格點(diǎn)到達(dá)才給獎(jiǎng)勵(lì)。對(duì)一個(gè)隨機(jī)游走的平坦策略來說想在上百步的無頭探索里正好踩中那個(gè)目標(biāo)格點(diǎn)概率非常低。更糟糕的是就算僥幸到過一次它也記不住“先到門口、再穿門、再去目標(biāo)”這種規(guī)律因?yàn)槌俗詈笠桓衩坎降募磿r(shí)獎(jiǎng)勵(lì)都是零。層次化思路是在兩個(gè)尺度上做決策高層只在房間之間選擇“我去哪個(gè)門口”低層負(fù)責(zé)把“走向那個(gè)門口”執(zhí)行成幾十步的動(dòng)作。這樣一來規(guī)劃深度從上百步壓縮到幾步探索也從瞎走變成了有方向性的探索。Option-Critic真正貢獻(xiàn)的不是這個(gè)思想——這個(gè)思想九十年代末就有了——而是把“選擇哪個(gè)門、腳步怎么邁、什么時(shí)候算到達(dá)門口”這三層結(jié)構(gòu)全部變成可微參數(shù)直接用一個(gè)統(tǒng)一的目標(biāo)端到端訓(xùn)練。1.3 與經(jīng)典選項(xiàng)框架的根本區(qū)別經(jīng)典選項(xiàng)框架的核心操作是“只學(xué)習(xí)高層策略”給定一組設(shè)計(jì)好的option比如“向上走到頂”“向左走到邊”然后用Sarsa或Q-learning去學(xué)在什么狀態(tài)下應(yīng)該選哪個(gè)option。這個(gè)路線的問題在于option本身是任務(wù)相關(guān)的知識(shí)換個(gè)環(huán)境就得重新設(shè)計(jì)而設(shè)計(jì)一個(gè)能用的option往往比學(xué)一個(gè)策略還難。Option-Critic的變革在于它把option內(nèi)部策略、終止函數(shù)、option選擇策略看成同一個(gè)計(jì)算圖的三條分支價(jià)值函數(shù)critic作為中間的監(jiān)督信號(hào)用兩個(gè)梯度定理把信號(hào)分別傳導(dǎo)給三條分支。為了更直觀我把三種方案的差別列成一張表方案動(dòng)作粒度需要人工設(shè)計(jì)什么端到端學(xué)到什么平坦策略單步獎(jiǎng)勵(lì)函數(shù)狀態(tài)到動(dòng)作的映射經(jīng)典選項(xiàng)框架多步option內(nèi)部策略、終止函數(shù)狀態(tài)到option選擇的映射Option-Critic多步只指定option數(shù)量?jī)?nèi)部策略、終止函數(shù)、選擇策略表格里最后一行就是這篇論文的核心買賣把人工設(shè)計(jì)的部分砍到只剩一個(gè)“數(shù)量”超參數(shù)剩下的全部交給優(yōu)化。2. 原理拆解關(guān)鍵公式與推導(dǎo)直覺2.1 從MDP到Option半馬爾可夫視角先把標(biāo)準(zhǔn)設(shè)定擺出來。一個(gè)馬爾可夫決策過程由狀態(tài)集、動(dòng)作集、轉(zhuǎn)移概率、獎(jiǎng)勵(lì)函數(shù)和折扣因子組成策略輸出每個(gè)狀態(tài)下選動(dòng)作的概率目標(biāo)是最小化長(zhǎng)期折扣累計(jì)回報(bào)的負(fù)期望。普通策略梯度定理說的是回報(bào)的期望對(duì)策略參數(shù)的梯度等于在軌跡上對(duì)“選這個(gè)動(dòng)作的log概率”乘以“這個(gè)動(dòng)作后續(xù)的回報(bào)”求期望。Option-Critic把“一個(gè)動(dòng)作”替換成“一個(gè)時(shí)序擴(kuò)展動(dòng)作”——也就是option。這樣一來整個(gè)過程的視角拉長(zhǎng)了高層看到的不是一個(gè)“狀態(tài)→動(dòng)作”的馬爾可夫過程而是一個(gè)“狀態(tài)→option”的半馬爾可夫過程因?yàn)橐粋€(gè)option的決策效果要跨越多個(gè)時(shí)間步才能顯現(xiàn)。但真正棘手的問題在于option本身不是一個(gè)黑盒它的內(nèi)部策略、終止函數(shù)都是有參數(shù)的梯度需要穿過option內(nèi)部。2.2 選項(xiàng)的三元組定義與符號(hào)約定一個(gè)option由三部分構(gòu)成。初始集I規(guī)定了option在哪些狀態(tài)下可以被選擇內(nèi)部策略π_o(a|s)規(guī)定了這個(gè)option被選中后在每個(gè)狀態(tài)下以多大概率執(zhí)行哪個(gè)原子動(dòng)作終止函數(shù)β_o(s)是一個(gè)0到1之間的概率表示到達(dá)狀態(tài)s后這個(gè)option是否結(jié)束、把控制權(quán)交還給高層。執(zhí)行節(jié)奏需要格外注意在狀態(tài)s處高層按π_Ω(o|s)選一個(gè)option然后agent執(zhí)行內(nèi)部策略產(chǎn)生的動(dòng)作a轉(zhuǎn)移到達(dá)s拿到獎(jiǎng)勵(lì)r。到s之后才裁定以概率β_o(s)決定option終止并重新選擇或者以概率1?β_o(s)繼續(xù)執(zhí)行同一個(gè)option?!敖K止發(fā)生在轉(zhuǎn)移之后”這個(gè)時(shí)序后面會(huì)反復(fù)用到也是很多錯(cuò)誤實(shí)現(xiàn)的根源。一個(gè)重要特例是如果β_o(s)恒等于1這個(gè)option退化成了一步即終止的單步動(dòng)作。也就是說選項(xiàng)集合是原子動(dòng)作集合的自然擴(kuò)展而不是替代。這保證了Option-Critic的表達(dá)能力不會(huì)比普通策略更弱至少?gòu)慕Y(jié)構(gòu)上講。2.3 三個(gè)價(jià)值函數(shù)怎么互相嵌套為了給三條分支提供監(jiān)督信號(hào)需要三個(gè)價(jià)值函數(shù)。第一個(gè)是option價(jià)值Q_U(s,o)表示從狀態(tài)s開始執(zhí)行option o直到它終止為止的期望折扣回報(bào)。第二個(gè)是Q_U(s,o,a)表示在option o被選中的情況下先執(zhí)行動(dòng)作a、之后繼續(xù)遵循option內(nèi)部策略的期望回報(bào)。第三個(gè)是高層狀態(tài)價(jià)值V_U(s)表示從狀態(tài)s開始、按照當(dāng)前高層策略π_Ω選擇option的期望回報(bào)。三者關(guān)系如下Q_U(s,o) Σ_a π_o(a|s) · Q_U(s,o,a)Q_U(s,o,a) r(s,a) γ Σ_{s} P(s|s,a) · [ (1?β_o(s)) · Q_U(s,o) β_o(s) · V_U(s) ]V_U(s) Σ_o π_Ω(o|s) · Q_U(s,o)中間那個(gè)方括號(hào)是關(guān)鍵如果option在s處不終止那么未來繼續(xù)由同一個(gè)option兜著價(jià)值是Q_U(s,o)如果終止了控制權(quán)回到高層價(jià)值變成V_U(s)。這其實(shí)就是把“是否終止”這一個(gè)隨機(jī)決策嵌進(jìn)了標(biāo)準(zhǔn)Bellman方程里。實(shí)際寫TD更新時(shí)目標(biāo)就是target r γ · [ (1?β(s)) · Q_U(s,o) β(s) · V_U(s) ]這個(gè)target既用來更新價(jià)值函數(shù)本身也用來構(gòu)造后面各種advantage。2.4 兩個(gè)核心梯度定理內(nèi)部策略梯度和終止梯度論文最實(shí)質(zhì)的貢獻(xiàn)是兩個(gè)梯度定理。第一個(gè)是內(nèi)部策略梯度定理近似寫成?_θ Q_U(s,o) E[ Σ_t γ^t · Q_U(s_t,o_t,a_t) · ?_θ log π_θ(a_t|s_t,o_t) ]用大白話說option內(nèi)部策略更新時(shí)把“在這個(gè)option下執(zhí)行這個(gè)動(dòng)作之后的價(jià)值”當(dāng)作評(píng)價(jià)走的是標(biāo)準(zhǔn)策略梯度。所以option內(nèi)部并不是在憑空學(xué)技能它是在學(xué)習(xí)如何最好地實(shí)現(xiàn)頂層的選擇。實(shí)際實(shí)現(xiàn)里會(huì)再扣一個(gè)baseline降方差于是評(píng)價(jià)量變成advantage而不是原始Q值。第二個(gè)是終止函數(shù)梯度定理形式上更反直覺?_θ Q_U(s,o) ?E[ Σ_t γ^t · (Q_U(s_t,o_t) ? V_U(s_t)) · ?_θ log β_θ(s_t) ]這里的負(fù)號(hào)特別重要。令A(yù)(s,o)Q_U(s,o)?V_U(s)它表示“當(dāng)前這個(gè)option比高層平均水平好多少”。如果優(yōu)勢(shì)為正說明這個(gè)option正在做正確的事應(yīng)該讓它繼續(xù)跑下去也就是終止概率要下降——負(fù)號(hào)保證了這一點(diǎn)。反過來如果優(yōu)勢(shì)為負(fù)說明這個(gè)option拖后腿應(yīng)該提高終止概率把它換掉。落到最小化loss的實(shí)現(xiàn)層面終止函數(shù)對(duì)應(yīng)的loss是L_β A(s,o) · log β(s)A為正時(shí)最小化它會(huì)把log β往負(fù)方向壓也就是β變小、option不容易終止A為負(fù)時(shí)則推著β變大、加速終止。終止函數(shù)的學(xué)習(xí)信號(hào)不是獎(jiǎng)勵(lì)本身而是“當(dāng)前option比平均好多少”的優(yōu)勢(shì)這是整個(gè)架構(gòu)最核心的直覺。2.5 別被公式嚇住它本質(zhì)上是一條鏈?zhǔn)椒▌t從直覺上理解option級(jí)過程構(gòu)成一個(gè)半馬爾可夫決策過程動(dòng)作是“option執(zhí)行一整段”時(shí)間步是“從選option到終止”。目標(biāo)對(duì)β參數(shù)和內(nèi)部策略參數(shù)的梯度本質(zhì)上是在問兩件事改變終止概率會(huì)怎樣改變option的持續(xù)時(shí)間進(jìn)而怎樣改變回報(bào)分布改變內(nèi)部動(dòng)作選擇會(huì)怎樣改變option在執(zhí)行過程中的即時(shí)回報(bào)分布。這兩個(gè)問題和普通策略梯度問的是一模一樣的事只不過這里的“決策”分成了兩個(gè)層次——每一步是否終止、每個(gè)時(shí)刻選哪個(gè)動(dòng)作。需要說明的是論文給出的定理是在比較規(guī)范的條件下證明的但一旦上了深度網(wǎng)絡(luò)和函數(shù)近似實(shí)際訓(xùn)練效果主要由標(biāo)準(zhǔn)的actor-critic技巧控制比如value是否正確detach、advantage要不要?dú)w一化、學(xué)習(xí)率怎么配。定理保證了更新方向的合理性卻不保證網(wǎng)絡(luò)不會(huì)在某個(gè)局部行為里抽搐。所以看公式時(shí)記住“終止看優(yōu)勢(shì)、內(nèi)部看價(jià)值”這兩個(gè)方向就夠了真正的功夫在實(shí)現(xiàn)細(xì)節(jié)里。3. 實(shí)操過程與核心實(shí)現(xiàn)要點(diǎn)3.1 網(wǎng)絡(luò)結(jié)構(gòu)一個(gè)共享主干四個(gè)輸出頭Option-Critic的實(shí)現(xiàn)不復(fù)雜常見的網(wǎng)絡(luò)結(jié)構(gòu)是一個(gè)共享特征層負(fù)責(zé)把狀態(tài)轉(zhuǎn)成向量然后分出四個(gè)輸出頭。高層選擇策略π_Ω在option集合上做softmaxcritic頭輸出每個(gè)option的Q_U值內(nèi)部策略頭為每個(gè)option分別輸出動(dòng)作概率也就是N個(gè)option就對(duì)應(yīng)N個(gè)softmax動(dòng)作頭終止函數(shù)頭為每個(gè)option輸出一個(gè)sigmoid概率。一個(gè)能跑通四房間的最小配置是兩層全連接、每層128個(gè)隱藏單元、激活函數(shù)用ReLU或者tanh。如果狀態(tài)是像素輸入就把主干換成卷積層后面再接同樣結(jié)構(gòu)的頭。option數(shù)量N是先驗(yàn)超參數(shù)四房間這種有四個(gè)門的環(huán)境取4完全沒頭緒的任務(wù)先取4到8不要貪多后面我會(huì)解釋為什么option太多反而容易壞事。一個(gè)小建議不同option的內(nèi)部策略頭不要共享初始化。給每個(gè)option的最后一層加不同的偏置能讓它們?cè)谟?xùn)練初期就各自偏向不同的動(dòng)作方向避免“長(zhǎng)得一模一樣”的可悲開局。3.2 訓(xùn)練流程A2C風(fēng)格的單步更新下面是我常用的單步更新偽代碼每個(gè)環(huán)境step都執(zhí)行一遍# 輸入狀態(tài)特征 phi_s q_values critic(phi_s) # 每個(gè)option的Q_U(s,o)形狀[N] v_s (pi_options(phi_s) * q_values).sum() # 高層價(jià)值 V_U(s) option sample(policy_over_options(phi_s)) # 高層選option action sample(intra_policy(phi_s)[option]) # 內(nèi)部策略選動(dòng)作 phi_s2, reward, done env.step(action) # 關(guān)鍵到了s之后才算終止概率 beta_s2 termination(phi_s2)[option] dial Bernoulli(beta_s2).sample() option2 sample(policy_over_options(phi_s2)) if dial or done else option # 1) critic更新用期望beta構(gòu)造TD目標(biāo) q_next (1 - beta_s2) * critic(phi_s2)[option] beta_s2 * (pi_options(phi_s2) * critic(phi_s2)).sum() target reward gamma * (1 - done) * q_next critic_loss (target.detach() - q_values[option]).pow(2) # 2) 高層option選擇策略更新 adv target.detach() - v_s.detach() option_loss -log_pi(phi_s, option) * adv # 3) 內(nèi)部策略更新評(píng)價(jià)當(dāng)前option內(nèi)的動(dòng)作 intra_loss -log_pi(phi_s, option)[action] * adv # 4) 終止函數(shù)更新最小化 A * log beta A (q_values[option].detach() - v_s.detach()) termination_loss A * torch.log(beta_s2 1e-8) total_loss critic_loss option_loss intra_loss termination_loss total_loss.backward()這里有三件事必須解釋清楚。第一構(gòu)造TD target時(shí)用的是期望beta而不是伯努利采樣出來的那個(gè)0/1開關(guān)因?yàn)锽ellman方程里算的就是期望真正的采樣開關(guān)只用來決定下一個(gè)時(shí)刻到底執(zhí)行哪個(gè)option。第二所有作為監(jiān)督信號(hào)傳給別的頭的估計(jì)值都要detach否則價(jià)值函數(shù)和策略會(huì)互相咬尾巴訓(xùn)練很容易發(fā)瘋。第三嚴(yán)格來說內(nèi)部策略梯度的理論上界應(yīng)該用Q_U(s,o,a)減去baseline但工程實(shí)現(xiàn)里直接用單步TD advantage效果也穩(wěn)定而且方差更小。先按這個(gè)簡(jiǎn)單版本跑通再往上加GAE也不遲。3.3 超參數(shù)與調(diào)參經(jīng)驗(yàn)把我在四房間和各種小控制任務(wù)上試過的經(jīng)驗(yàn)參數(shù)整理成表格超參數(shù)建議范圍說明option數(shù)量N4~8與任務(wù)天然子結(jié)構(gòu)數(shù)量同量級(jí)學(xué)習(xí)率1e-4~3e-4Adam為主終止函數(shù)頭單獨(dú)用小學(xué)習(xí)率β初始化logit?0.5~0對(duì)應(yīng)β約0.38~0.5防止崩向0或1內(nèi)部策略熵系數(shù)0.01~0.05保證option內(nèi)部有探索終止函數(shù)熵系數(shù)0.01~0.1防止過早鎖死在“永遠(yuǎn)不終止”折扣γ0.99長(zhǎng)回報(bào)路徑任務(wù)步數(shù)n5步累計(jì)回報(bào)單步TD容易方差大5步通常夠值得注意的是終止函數(shù)的更新對(duì)學(xué)習(xí)率非常敏感。我給終止函數(shù)頭單獨(dú)配一個(gè)優(yōu)化器學(xué)習(xí)率通常是主網(wǎng)絡(luò)的十分之一效果明顯比全家桶一起更新穩(wěn)定。另外每跑幾百個(gè)episode就把各option的β均值打出來看一眼如果所有option都穩(wěn)定在0.5附近沒動(dòng)說明優(yōu)勢(shì)信號(hào)沒進(jìn)來多半是critic出了問題而不是策略問題。3.4 復(fù)現(xiàn)基準(zhǔn)四房間環(huán)境里該看到什么四房間是最好的調(diào)試場(chǎng)因?yàn)樗Y(jié)果直觀、算力開銷極小。訓(xùn)練結(jié)束后應(yīng)該看到兩類現(xiàn)象。第一終止函數(shù)的熱力圖明顯集中在門口附近——這意味著option“走到門口”正是它們認(rèn)為該結(jié)束的地方。第二option內(nèi)部策略呈現(xiàn)空間分化比如某個(gè)option的軌跡集中在上方門附近另一個(gè)集中在下門高層策略則學(xué)會(huì)按目標(biāo)位置編排這些option的先后順序。如果訓(xùn)練完看不到門口附近的終止集中先別懷疑算法先問三件事option數(shù)量是不是太多導(dǎo)致每個(gè)option都分?jǐn)偛坏矫鞔_的子任務(wù)β是不是已經(jīng)崩到0或1終止函數(shù)的優(yōu)勢(shì)是不是被錯(cuò)誤地detach掉了。彈球環(huán)境也是論文里用過的連續(xù)域示例里面有若干擋板option-critic能學(xué)出“貼近擋板、蓄力、朝目標(biāo)彈出”這類的技能結(jié)構(gòu)終止點(diǎn)恰好落在擋板附近。四房間跑通了再上彈球這類連續(xù)環(huán)境你會(huì)對(duì)“時(shí)間抽象”這四個(gè)字有真正的體感。4. 常見問題與排查技巧實(shí)錄4.1 選項(xiàng)退化所有option變成單步動(dòng)作最常遇到的問題是β快速逼近1每個(gè)option選擇之后執(zhí)行一個(gè)動(dòng)作就終止層次結(jié)構(gòu)徹底消失訓(xùn)練曲線和普通平坦強(qiáng)化學(xué)習(xí)一模一樣。原因是多方面的β初始化太靠近1、終止函數(shù)學(xué)習(xí)率過大、優(yōu)勢(shì)沒有做歸一化導(dǎo)致偶爾的大梯度把β推過頭。解決的思路也很直接。β的logit初始值設(shè)成?0.5甚至更低讓訓(xùn)練從“傾向于持續(xù)執(zhí)行”開始。給β的logit加一點(diǎn)熵正則防止概率鎖死在邊界。更穩(wěn)的辦法是把終止函數(shù)的優(yōu)化器和主網(wǎng)絡(luò)分開把它的學(xué)習(xí)率壓到主網(wǎng)絡(luò)的十分之一。最后一定記得對(duì)優(yōu)勢(shì)做標(biāo)準(zhǔn)化至少也要做一個(gè)裁剪不然終止信號(hào)忽大忽小很容易把β拍向極值。4.2 另一個(gè)極端選項(xiàng)永不終止和上面相反β也可能一路掉到接近0第一個(gè)選中的option從此陪跑到回合結(jié)束高層決策形同虛設(shè)。這種情況在稀疏回報(bào)任務(wù)里尤為常見。原因通常是所有option的價(jià)值估計(jì)差不多優(yōu)勢(shì)長(zhǎng)期處于零附近終止梯度根本沒有有效的推動(dòng)力。一個(gè)實(shí)在的救法是把β的初始化往上抬一點(diǎn)比如logit設(shè)為0.2同時(shí)在終止logit上保留較大的熵正則逼它不要靜止不動(dòng)。另一個(gè)辦法是加一個(gè)很小的、恒定的“終止傾向”項(xiàng)讓每個(gè)option在每個(gè)狀態(tài)都有最低限度的終止概率相當(dāng)于給層次結(jié)構(gòu)一條呼吸的縫。如果某個(gè)option長(zhǎng)期不終止還有一個(gè)歪招單獨(dú)把這個(gè)option的終止熵系數(shù)調(diào)大讓它在猶豫中分化出更多的終止行為。4.3 所有option長(zhǎng)得一模一樣option數(shù)量設(shè)得過大或者初始化完全對(duì)稱會(huì)出現(xiàn)所有option的內(nèi)部策略收斂到同一個(gè)分布高層選誰都一樣整個(gè)架構(gòu)退化成一個(gè)帶冗余頭的平坦策略。我自己踩過這個(gè)坑N16時(shí)四個(gè)房間的實(shí)驗(yàn)里16個(gè)頭全學(xué)會(huì)了向右走看著既好笑又心疼。破法從易到難排先減少N四房間用4就夠別貪心再給每個(gè)option的內(nèi)部策略頭和終止函數(shù)頭加不同的偏置初始化破壞對(duì)稱性然后給內(nèi)部策略加熵正則鼓勵(lì)每個(gè)頭自主探索出不同的行為。如果這些都試過還是同質(zhì)化就需要上一點(diǎn)顯式的多樣性約束了比如讓option內(nèi)部策略的分布彼此拉開距離但這類方法比較復(fù)雜我建議先把它當(dāng)成最后的手段。4.4 復(fù)現(xiàn)結(jié)果不穩(wěn)定、跑不出論文的熱力圖如果代碼邏輯看起來都對(duì)但訓(xùn)練結(jié)果忽好忽壞大概率是幾個(gè)隱蔽的細(xì)節(jié)問題。我列一張排查表現(xiàn)象可能原因建議全是噪聲熱力圖無結(jié)構(gòu)TD target里用了采樣的0/1開關(guān)而不是期望β確認(rèn)target用的是β(s)本身訓(xùn)練開始就發(fā)散監(jiān)督信號(hào)沒detach所有advantage和target作為監(jiān)督時(shí)都要detachβ很快鎖死在0或1學(xué)習(xí)率太大或熵正則缺失終止頭單獨(dú)低學(xué)習(xí)率加熵正則結(jié)果依賴隨機(jī)種子環(huán)境獎(jiǎng)勵(lì)尺度太大歸一化獎(jiǎng)勵(lì)或做advantage標(biāo)準(zhǔn)化不穩(wěn)定單步TD方差大改用5步累計(jì)回報(bào)或GAE另外提醒一句論文報(bào)告的結(jié)果往往是多次隨機(jī)實(shí)驗(yàn)里的代表性曲線不是每次都能復(fù)現(xiàn)一模一樣的熱力圖。多跑幾個(gè)隨機(jī)種子看中位數(shù)趨勢(shì)比盯著某一次實(shí)驗(yàn)的曲線更靠譜。4.5 一個(gè)反復(fù)出現(xiàn)的時(shí)序理解錯(cuò)誤最后這點(diǎn)值得單獨(dú)拿出來說。β(s)的s是轉(zhuǎn)移之后到達(dá)的新狀態(tài)不是轉(zhuǎn)移之前的老狀態(tài)s。執(zhí)行順序是在s處選option執(zhí)行動(dòng)作a到s拿獎(jiǎng)勵(lì)r然后才在s處決定“這個(gè)option還繼不繼續(xù)”。TD target里那個(gè)β參數(shù)應(yīng)該來自s。我見過不少實(shí)現(xiàn)把β(s)放在轉(zhuǎn)移前的位置看起來公式差不多實(shí)際價(jià)值計(jì)算全錯(cuò)而且很難查出來因?yàn)閘oss照樣會(huì)下降只是訓(xùn)練出的行為完全不符合理論。判斷你的實(shí)現(xiàn)有沒有踩這個(gè)坑只需要檢查TD target一行的狀態(tài)符號(hào)如果β取的是下一個(gè)狀態(tài)的特征那就對(duì)了如果取的是當(dāng)前狀態(tài)的特征請(qǐng)立刻改掉。5. 延伸思考與個(gè)人體會(huì)5.1 從Option-Critic長(zhǎng)出來的研究方向這篇論文之后層次強(qiáng)化學(xué)習(xí)的研究方向分出去好幾條線。一條是把“終止”這個(gè)動(dòng)作賦予成本讓終止函數(shù)在“繼續(xù)執(zhí)行”和“終止重選”之間學(xué)會(huì)一種經(jīng)濟(jì)的平衡高層決策不再免費(fèi)從而更接近真實(shí)系統(tǒng)里規(guī)劃成本高昂的設(shè)定。另一條是把優(yōu)勢(shì)函數(shù)換成興趣函數(shù)只學(xué)習(xí)那些“值得專門為之啟動(dòng)一個(gè)option”的狀態(tài)避免在無關(guān)緊要的狀態(tài)上白費(fèi)option維度。還有一條影響更大的線是徹底改變訓(xùn)練方式先離線預(yù)訓(xùn)練一組技能skill凍結(jié)之后高層只學(xué)技能之間的組合調(diào)度不再端到端回傳梯度。這些后續(xù)工作你都會(huì)看到Option-Critic的影子尤其是“終止函數(shù)由優(yōu)勢(shì)驅(qū)動(dòng)”這個(gè)設(shè)定幾乎成了所有skill-based方法的標(biāo)準(zhǔn)組件。換句話說理解了這篇論文后面很多分層RL論文你都能一眼看出它們?cè)谀睦锔牧私K止規(guī)則、在哪里換了訓(xùn)練信號(hào)。5.2 我的親測(cè)體驗(yàn)Option-Critic什么時(shí)候真能用說點(diǎn)扎心的大實(shí)話。我先后在幾個(gè)環(huán)境里復(fù)現(xiàn)過這個(gè)架構(gòu)結(jié)論是它不是一個(gè)開箱即用的提分機(jī)器。在連續(xù)控制的標(biāo)準(zhǔn)benchmark上一個(gè)調(diào)好的平坦策略常常更快更強(qiáng)因?yàn)檫@類任務(wù)沒有明顯的瓶頸狀態(tài)層次結(jié)構(gòu)反而成了束縛。但在四房間這種天然帶子結(jié)構(gòu)、獎(jiǎng)勵(lì)又稀疏的任務(wù)里Option-Critic能穩(wěn)定地長(zhǎng)出比手工設(shè)計(jì)還干凈的空間技能這是平坦策略做不到的。所以我給自己定了三條判斷標(biāo)準(zhǔn)三條里中了兩條才考慮上層次化第一任務(wù)是否存在自然的子結(jié)構(gòu)或瓶頸狀態(tài)比如走廊、門口、擋板第二低層執(zhí)行是否比高層決策更昂貴比如機(jī)械臂需要平滑軌跡而規(guī)劃只需決定目標(biāo)點(diǎn)第三是否需要跨任務(wù)遷移共享技能池。沒有這些前提說實(shí)話層次化是給自己找麻煩。5.3 復(fù)現(xiàn)時(shí)最值得記住的三條實(shí)操建議最后收個(gè)尾給真想動(dòng)手復(fù)現(xiàn)的你三條建議。第一先在四房間這類小網(wǎng)格環(huán)境把整套流程跑通、把熱力圖看順眼再考慮上大環(huán)境因?yàn)榇蟓h(huán)境下你根本分不清是算法問題還是顯示問題。第二β單獨(dú)用一個(gè)低學(xué)習(xí)率優(yōu)化器并且堅(jiān)持加熵正則終止區(qū)間兩端是重災(zāi)區(qū)幾乎所有訓(xùn)練事故最后都發(fā)生在β上。第三永遠(yuǎn)檢查detach的位置監(jiān)督信號(hào)是“評(píng)價(jià)量”而不是“被優(yōu)化的量”這個(gè)界限一旦模糊理論再漂亮也救不了訓(xùn)練曲線。我不敢說Option-Critic是那種能讓你在測(cè)評(píng)榜上直接提分的算法在不少標(biāo)準(zhǔn)任務(wù)上它甚至不如一個(gè)調(diào)好的平坦策略。但我認(rèn)為它是層次強(qiáng)化學(xué)習(xí)里最重要的轉(zhuǎn)折點(diǎn)之一——它第一次把“如何終止、如何執(zhí)行、如何選擇”放進(jìn)了同一個(gè)可微框架里讓時(shí)間抽象成了一個(gè)可以靠梯度涌現(xiàn)出來的性質(zhì)。我后來看任何分層方法都會(huì)下意識(shí)地去找這三個(gè)信號(hào)分別由誰在什么地方提供。這個(gè)思維習(xí)慣比跑通一個(gè)demo值錢得多。