化學(xué)習(xí)期末刷題:貝爾曼方程、SARSA與Q-learning考點(diǎn)精講)
簡介面向高校人工智能、計(jì)算機(jī)相關(guān)專業(yè)學(xué)生的《A卷強(qiáng)化學(xué)習(xí)期末考試原題加答案》是一份備考資源針對強(qiáng)化學(xué)習(xí)課程期末考核所涉及的核心概念與方法進(jìn)行系統(tǒng)梳理。該資料以 PDF 形式提供共 1 個(gè)文件壓縮包整體約 332KB內(nèi)容緊湊且便于直接查閱與打印復(fù)習(xí)。資源覆蓋折扣因子、狀態(tài)轉(zhuǎn)移與獎(jiǎng)勵(lì)、貝爾曼方程、蒙特卡洛方法、時(shí)間差分方法、SARSA 與 Q-learning、值迭代與策略迭代、馬爾可夫決策過程、狀態(tài)-行動值函數(shù)和學(xué)習(xí)率等重點(diǎn)專題每道題目均配有步驟清晰的參考解答便于讀者對照理解計(jì)算過程與算法差異。資源還比較了在線算法與離線算法的適用場景、基于模型與無模型方法的優(yōu)缺點(diǎn)幫助構(gòu)建完整的強(qiáng)化學(xué)習(xí)知識框架。目前已有290人學(xué)習(xí)下載適合期末沖刺復(fù)習(xí)、考研備考。1. 強(qiáng)化學(xué)習(xí)期末考試原題加答案考前刷卷比看十遍課件有用期末周時(shí)間緊光看課件和公式推導(dǎo)很難知道自己到底掌握到什么程度。這份強(qiáng)化學(xué)習(xí)期末考試原題加答案把一學(xué)期最重要的考點(diǎn)濃縮進(jìn)十道題里網(wǎng)格世界的貝爾曼方程手算、蒙特卡洛與TD方法對比、SARSA與Q-learning的更新方式辨析、值迭代與策略迭代的步驟拆解還有n-step Sarsa和標(biāo)準(zhǔn)Sarsa、MC學(xué)習(xí)之間的轉(zhuǎn)換關(guān)系。每道題都帶參考答案和推導(dǎo)過程適合三類人期末前想快速刷真題的本科生需要系統(tǒng)梳理強(qiáng)化學(xué)習(xí)核心概念的考研黨以及入門強(qiáng)化學(xué)習(xí)后想用題目檢驗(yàn)自己的開發(fā)者和研究者。這份資料的判斷標(biāo)準(zhǔn)只有一個(gè)——題夠不夠典型答案夠不夠清楚。2. 貝爾曼方程與MDP手算把四狀態(tài)網(wǎng)格世界算到小數(shù)點(diǎn)后兩位2.1 從題目文字到方程組先搞清楚狀態(tài)、獎(jiǎng)勵(lì)和轉(zhuǎn)移原題第一題是典型的網(wǎng)格世界手算題狀態(tài)空間只有四個(gè)狀態(tài)轉(zhuǎn)移和獎(jiǎng)勵(lì)都預(yù)先給定。這種題的價(jià)值在于不需要寫代碼靠紙筆就能推完整個(gè)值函數(shù)估計(jì)過程是理解貝爾曼方程最好的訓(xùn)練場。先把狀態(tài)和轉(zhuǎn)移關(guān)系拆清狀態(tài)s?獎(jiǎng)勵(lì)為-150%概率轉(zhuǎn)移到s?轉(zhuǎn)移獎(jiǎng)勵(lì)150%概率轉(zhuǎn)移到s?轉(zhuǎn)移獎(jiǎng)勵(lì)1狀態(tài)s?獎(jiǎng)勵(lì)為1總是轉(zhuǎn)移到s?轉(zhuǎn)移獎(jiǎng)勵(lì)0狀態(tài)s?獎(jiǎng)勵(lì)為1總是轉(zhuǎn)移到s?終止?fàn)顟B(tài)狀態(tài)s?獎(jiǎng)勵(lì)為0是終止?fàn)顟B(tài)每走一步既產(chǎn)生當(dāng)前狀態(tài)的即時(shí)獎(jiǎng)勵(lì)又疊加轉(zhuǎn)移后的未來價(jià)值。把貝爾曼方程寫出來# 四狀態(tài)Bellman方程組γ0.9 # v(s1) 0.5*(-1 0.9*v(s3)) 0.5*(-1 0.9*v(s2)) # v(s2) 1 0.9*v(s4) # v(s3) 1 0.9*v(s4) # v(s4) 0 # 終止?fàn)顟B(tài)價(jià)值恒為0這里有個(gè)關(guān)鍵約定終止?fàn)顟B(tài)的價(jià)值定義為0因?yàn)樗鬀]有任何后續(xù)獎(jiǎng)勵(lì)。很多人在這一步翻車把s?當(dāng)成普通狀態(tài)繼續(xù)套遞歸結(jié)果算出一個(gè)奇怪的發(fā)散值。從s?出發(fā)無論走哪條分支都要先支付-1的即時(shí)獎(jiǎng)勵(lì)所以兩個(gè)分支的括號里都帶著-1。2.2 折扣因子γ0.9時(shí)的完整手算過程有了方程組代入γ0.9逐步回代。從終止?fàn)顟B(tài)開始反推是最穩(wěn)妥的做法因?yàn)関(s?)是已知邊界條件gamma 0.9 v4 0 v2 1 gamma * v4 # 1 0.9*0 v3 1 gamma * v4 # 1 0.9*0 v1 0.5*(-1 gamma*v3) 0.5*(-1 gamma*v2) print(fv(s4){v4:.4f}) # v(s4)0.0000 print(fv(s2){v2:.4f}) # v(s2)1.0000 print(fv(s3){v3:.4f}) # v(s3)1.0000 print(fv(s1){v1:.4f}) # v(s1)-0.1000v(s?)-0.1這個(gè)結(jié)果值得多說一句它不等于各分支獎(jiǎng)勵(lì)的簡單平均因?yàn)槲磥韮r(jià)值v(s?)和v(s?)經(jīng)過折扣后反過來影響了當(dāng)前狀態(tài)的估值。這正體現(xiàn)了動態(tài)規(guī)劃的思想——單步獎(jiǎng)勵(lì)差不代表整個(gè)狀態(tài)價(jià)值差要看后續(xù)狀態(tài)的連鎖反應(yīng)。原卷答案里出現(xiàn)了v(s?)1/(1-γ)的寫法那是把s?當(dāng)成獎(jiǎng)勵(lì)為1的自環(huán)吸收態(tài)才成立。但題目白紙黑字寫了s?獎(jiǎng)勵(lì)為0是終止?fàn)顟B(tài)所以這里以終止價(jià)值為0重算。刷題時(shí)遇到這種不一致要警惕別背答案按題目條件推。我在第5章避坑部分還會再展開。2.3 狀態(tài)值與行動值第六題和第九題的對照練習(xí)第六題給了三個(gè)狀態(tài)的狀態(tài)值要求計(jì)算某個(gè)狀態(tài)下采取不同動作的狀態(tài)值第九題則直接考狀態(tài)值函數(shù)和行動值函數(shù)的公式與作用對比。兩題連起來看恰好覆蓋了貝爾曼方程的兩種形態(tài)# 第六題已知 v(s2)6, v(s3)5, γ0.9 # 從s1采取a1到s2獎(jiǎng)勵(lì)4 v1_a1 4 0.9 * 6 # 9.4 # 從s1采取a2到s3獎(jiǎng)勵(lì)2 v1_a2 2 0.9 * 5 # 6.5 print(f策略1: 采取a1 - v(s1){v1_a1:.1f}) # 9.4 print(f策略2: 采取a2 - v(s1){v1_a2:.1f}) # 6.5狀態(tài)值V(s)評估當(dāng)前狀態(tài)好不好行動值Q(s,a)評估當(dāng)前狀態(tài)下哪個(gè)動作最好。第六題算的是給定動作下的狀態(tài)值本質(zhì)是在做策略評估如果要找最優(yōu)策略就在9.4和6.5之間取max。這兩道題放在一起就是在提醒你別把策略評估和策略改進(jìn)混成一步這是值迭代與策略迭代的根本區(qū)別。3. 蒙特卡洛與TD方法離線更新還是在線更新邊界在這里3.1 蒙特卡洛完整回合結(jié)束后的事后結(jié)算第二題要求分析蒙特卡洛方法和時(shí)間差分方法并判斷在線還是離線。蒙特卡洛的核心邏輯很簡單玩完一整局統(tǒng)計(jì)每個(gè)狀態(tài)的實(shí)際累計(jì)回報(bào)然后取平均作為該狀態(tài)的估計(jì)值。它不需要環(huán)境模型也不需要當(dāng)前狀態(tài)的估計(jì)值去推下一個(gè)狀態(tài)只需要一條完整的軌跡。特點(diǎn)在于更新必須等到回合結(jié)束。中間無論走多少步都不能回頭修正之前的狀態(tài)價(jià)值。這決定了它是離線算法——嚴(yán)格說是回合終止才更新。如果一輪對局要幾百步那收集一條樣本的效率很低但因?yàn)橛玫氖钦鎸?shí)回報(bào)估計(jì)的偏差相對較小主要問題是方差大。實(shí)戰(zhàn)里MC常用于游戲類場景一盤結(jié)束就能拿到明確的勝負(fù)或得分信號。3.2 時(shí)間差分方法走一步就更新邊走邊學(xué)TD方法的核心公式是一個(gè)就地更新# TD(0)更新公式 # V(s_t) - V(s_t) α * [r_t γ * V(s_{t1}) - V(s_t)]TD方法在t時(shí)刻邁出一步拿到即時(shí)獎(jiǎng)勵(lì)r_t和下一個(gè)狀態(tài)的價(jià)值估計(jì)V(s_{t1})立刻就把當(dāng)前狀態(tài)的價(jià)值往目標(biāo)方向推一點(diǎn)。它不需要完整軌跡所以天然支持在線的逐步學(xué)習(xí)。這就好比邊開車邊看導(dǎo)航每隔幾秒修正一次路線而不是到了終點(diǎn)再復(fù)盤。TD的代價(jià)是引入偏差——因?yàn)橛霉烙?jì)去更新估計(jì)自舉初始值估計(jì)不準(zhǔn)時(shí)誤差會傳播。但它的方差比MC低因?yàn)槊坎街豢匆粋€(gè)隨機(jī)轉(zhuǎn)移而不是整條軌跡的累計(jì)隨機(jī)變量。第二題的答案里還特別強(qiáng)調(diào)了MC是離線、TD是在線這個(gè)點(diǎn)考試頻率極高。實(shí)際判斷標(biāo)準(zhǔn)就一條更新是否需要等待整個(gè)回合結(jié)束。需要就是離線不需要就是在線。3.3 n-step Sarsa把MC和TD放進(jìn)同一個(gè)譜系第二題單獨(dú)考MC與TD第十題卻把標(biāo)準(zhǔn)Sarsa、n-step Sarsa和MC拉到一起對比。n-step Sarsa的更新公式是Q的學(xué)習(xí)目標(biāo)由n步真實(shí)獎(jiǎng)勵(lì)加上第n步之后的估計(jì)值組成。# n-step Sarsa 回報(bào)定義 # G_t^(n) r_t γ*r_{t1} ... γ^(n-1)*r_{tn-1} γ^n * Q(S_{tn}, A_{tn})當(dāng)n1時(shí)它就是標(biāo)準(zhǔn)SARSA完全依賴自舉當(dāng)n趨于無窮大時(shí)它退化成蒙特卡洛完全依賴真實(shí)累計(jì)回報(bào)。n越大偏差越小、方差越大n越小方差越小、偏差越大。這是理解算法譜系的鑰匙所謂不同算法不過是用多少步真實(shí)獎(jiǎng)勵(lì)來替換估計(jì)值的不同選擇。4. SARSA與Q-learning對比一個(gè)公式之差on-policy與off-policy的分界線4.1 兩行公式背后的策略差異第三題直接要求列出SARSA和Q-learning的更新公式。把它們并排寫出來對比差異一目了然# SARSA: Q(s,a) - Q(s,a) α * [r γ*Q(s,a) - Q(s,a)] # Q-learning: Q(s,a) - Q(s,a) α * [r γ*max_{a} Q(s,a) - Q(s,a)] # 行為策略在SARSA里是ε-greedy或其他策略Q-learning的目標(biāo)用的是maxSARSA的更新目標(biāo)是下一個(gè)狀態(tài)s、下一個(gè)動作a對應(yīng)的Q值其中a是當(dāng)前行為策略實(shí)際選出來的動作。Q-learning的更新目標(biāo)則是s下所有動作Q值的最大值不管你實(shí)際下一步選了什么。這兩個(gè)目標(biāo)函數(shù)決定了它們的身份SARSA是on-policy因?yàn)楦掠玫哪繕?biāo)值來自正在執(zhí)行的行為策略Q-learning是off-policy因?yàn)槟繕?biāo)值來自對最優(yōu)策略的貪心假設(shè)與行為策略無關(guān)??荚?yán)锍R姷膯柗ㄊ荢ARSA和Q-learning誰更安全。落實(shí)到具體情況SARSA因?yàn)楦袨椴呗宰咴诖嬖谒劳鱿葳灞热鐟已逻呑邥粝氯サ沫h(huán)境里它會把避免危險(xiǎn)編碼進(jìn)Q值Q-learning因?yàn)榭偸侨ax在學(xué)習(xí)過程中會高估危險(xiǎn)區(qū)域的樂觀價(jià)值實(shí)際執(zhí)行時(shí)如果行為策略比較貪心容易一頭撞進(jìn)陷阱。這是兩類算法在實(shí)踐中的一個(gè)真實(shí)差別。4.2 手算SARSA更新把每個(gè)數(shù)代進(jìn)去第四題給了一組具體的Q值要求手動計(jì)算一次SARSA更新。起始條件Q(s?,a?)2r3轉(zhuǎn)移到s?并選擇a?Q(s?,a?)3α0.5γ0.9Q_s1a1_old 2 r 3 gamma 0.9 Q_s2a2 3 alpha 0.5 Q_s1a1_new Q_s1a1_old alpha * (r gamma * Q_s2a2 - Q_s1a1_old) # 2 0.5 * (3 0.9*3 - 2) # 2 0.5 * (3 2.7 - 2) # 2 0.5 * 3.7 # 3.85 print(f更新后Q(s1,a1) {Q_s1a1_new:.2f})這種手算題有兩個(gè)高頻失分點(diǎn)。一是漏掉γ對Q(s?,a?)的折扣直接把0.9×3算成3二是忘記減去舊Q值Q(s?,a?)2把括號里的式子寫成了(rγQ)就算了。每步都要嚴(yán)格按照舊值α×(目標(biāo)值-舊值)的模板代入目標(biāo)值里該折扣的折扣、該減的減才能拿到步驟分。4.3 值迭代與策略迭代交錯(cuò)前進(jìn)還是大步循環(huán)第五題考的是值迭代和策略迭代的步驟。值迭代的更新公式是# v(s) - max_a [ r(s,a) γ * Σ_{s} P(s|s,a) * v(s) ]它每一輪都把狀態(tài)值更新為當(dāng)前所有動作下能達(dá)到的最大值本質(zhì)上是貝爾曼最優(yōu)方程的定點(diǎn)迭代。不需要顯式維護(hù)策略收斂后直接從Q值貪心提取策略。策略迭代則是兩步反復(fù)交替先固定策略做策略評估算出該策略下的狀態(tài)值再做策略改進(jìn)按照當(dāng)前狀態(tài)值選擇最優(yōu)動作更新策略。直到策略不再變化收斂到最優(yōu)。策略迭代的收斂速度通常比值迭代快但每一步都要解一次方程組或做多輪迭代計(jì)算開銷更大值迭代每次只要做一次max操作實(shí)現(xiàn)簡單但迭代次數(shù)可能更多??荚嚧痤}時(shí)步驟一定要寫全初始化策略、策略評估、策略改進(jìn)、判斷終止四步缺一不可。5. 強(qiáng)化學(xué)習(xí)刷題避坑五個(gè)高頻失誤與排查方法5.1 終止?fàn)顟B(tài)的價(jià)值被寫成1/(1-γ)條件沒看清現(xiàn)象第一題里把s?的價(jià)值算成1/(1-γ)10導(dǎo)致v(s?)、v(s?)、v(s?)全部連鎖出錯(cuò)。原因某些教材用s?獎(jiǎng)勵(lì)1、帶自環(huán)的示例推導(dǎo)出v1/(1-γ)直接套模板沒注意本題s?的獎(jiǎng)勵(lì)是0且是終止?fàn)顟B(tài)。解決動筆之前先圈出終止?fàn)顟B(tài)。終止?fàn)顟B(tài)的定義就是V0沒有后續(xù)獎(jiǎng)勵(lì)。如果題目給了獎(jiǎng)勵(lì)0、終止這類字眼直接令V(s)0往回代。5.2 蒙特卡洛被答成離線學(xué)習(xí)而丟掉后半句現(xiàn)象只寫MC是離線算法判卷扣分。原因課程講義里沿用了離線這個(gè)說法但簡單兩個(gè)字不足以解釋MC的本質(zhì)——它不需要模型但必須等回合結(jié)束才能更新。解決按先跑完整回合并記錄回報(bào)→計(jì)算累積回報(bào)→更新狀態(tài)值→重復(fù)四步作答每步后面補(bǔ)一句作用。MC更新的觸發(fā)條件是回合終止不是離線訓(xùn)練這種模糊概念。5.3 第六題把策略評估當(dāng)成值迭代直接用max取最優(yōu)現(xiàn)象題目問計(jì)算狀態(tài)s?在不同策略下的狀態(tài)值有人直接寫max(9.4, 6.5)9.4當(dāng)作最優(yōu)值函數(shù)。原因看到v(s?)就默認(rèn)要求最優(yōu)值沒注意題目問的是該策略下的值而不是最優(yōu)策略下的值。解決區(qū)分策略評估和策略改進(jìn)。題目要求計(jì)算某個(gè)策略下的狀態(tài)值就按該策略每個(gè)動作逐一計(jì)算期望只有題目明確說求最優(yōu)策略或最優(yōu)值函數(shù)時(shí)才用max。5.4 SARSA手算漏掉舊Q值的減法現(xiàn)象第四題算出Q(s?,a?)20.5×(30.9×3)4.85和正確答案3.85差1分。原因把SARSA公式記成了Q_new Q_old α×(r γQ_next)括號里漏了-Q_old這一項(xiàng)。解決UPDATE模板統(tǒng)一寫成 new old α × (target - old)。先把target算清楚rγ×Q(s,a)再和old做差乘以α最后加回old。每一步都單獨(dú)打草稿別心算跳步。5.5 n-step Sarsa的n搞不清邊界現(xiàn)象把n0當(dāng)成標(biāo)準(zhǔn)Sarsa來記。原因n-step是從時(shí)間步t開始往后數(shù)真實(shí)獎(jiǎng)勵(lì)的步數(shù)。n1表示只取一步真實(shí)獎(jiǎng)勵(lì)其余用自舉估計(jì)這才是標(biāo)準(zhǔn)Sarsan∞才是MC。解決默念三遍n1是Sarsan∞是MCn越大越靠近MC??吹絥-step先確認(rèn)n的值再寫公式避免把系數(shù)和指數(shù)寫錯(cuò)。6. 復(fù)習(xí)收尾用n-step Sarsa串起整張算法譜系如果只挑一條線索串起全部考點(diǎn)我建議用n-step Sarsa。它把標(biāo)準(zhǔn)Sarsa和蒙特卡洛學(xué)習(xí)放在了兩端n1時(shí)退化為標(biāo)準(zhǔn)Sarsa完全靠自舉更新n→∞時(shí)退化為MC完全靠真實(shí)累計(jì)回報(bào)。改變n就是改變偏差與方差的權(quán)衡比例而TD方法恰好是這條譜系上n1的特例加上一個(gè)學(xué)習(xí)率α。# 譜系對照 # MC: G_t r_t γ*r_{t1} γ^2*r_{t2} ... 方差大, 偏差小 # n-step: G_t r_t γ*r_{t1} ... γ^(n-1)*r_{tn-1} # γ^n * Q(S_{tn}, A_{tn}) 折中 # SARSA: G_t r_t γ * Q(S_{t1}, A_{t1}) 方差小, 偏差大順著這條線回看整張卷子就清楚了第一題的貝爾曼方程是Dyna-style規(guī)劃的基礎(chǔ)第二題的MC與TD對比是時(shí)序差分學(xué)習(xí)的起點(diǎn)第三題的SARSA與Q-learning是on-policy與off-policy的分水嶺第五題的值迭代與策略迭代是動態(tài)規(guī)劃求最優(yōu)的策略第十題則是把這幾個(gè)方法統(tǒng)一進(jìn)一個(gè)框架收網(wǎng)。建議刷這套題時(shí)別按順序刷先從第十題開始帶著譜系感倒著做。從那以后我每次復(fù)習(xí)強(qiáng)化學(xué)習(xí)都會強(qiáng)制自己先默寫一遍n-step Sarsa的回報(bào)公式再順著它展開成Sarsa和MC兩個(gè)特例最后落到值迭代的公式上。整套知識框架用十分鐘就能過一遍比盲目刷二三十道零散題管用。這份原題卷覆蓋的考點(diǎn)和手算題型很典型考前值得沉下心走一遍希望幫到你。本文還有配套的精品資源點(diǎn)擊獲取