強化學習演算法筆記之【Q-learning演算法和DQN演算法】

这可就有点麻烦了發表於2024-10-18

強化學習筆記之【Q-learning演算法和DQN演算法】


前言:

強化學習領域,繁冗複雜的大段程式碼裡面,核心的數學公式往往只有20~40行,剩下的程式碼都是為了應用這些數學公式而服務的

這可比遙感影像難太多了,亂七八糟的數學公式看得頭大

強化學習演算法筆記之【Q-learning演算法和DQN演算法】

本文初編輯於2024.10.5

CSDN主頁:https://blog.csdn.net/rvdgdsva

部落格園主頁:https://www.cnblogs.com/hassle


Q-learning演算法

需要先看:

Deep Reinforcement Learning (DRL) 演算法在 PyTorch 中的實現與應用【Q-learning部分】

7個最流行的強化學習演算法實戰案例(附 Python 程式碼)【Q-learning部分】【不要看這個的DQN部分,裡面用的是單網路】


\[q[current\underline{~}state, action] = \\q[current\underline{~}state, action] + learning\underline{~}rate \times (reward + gamma\times max(q[next\underline{~}state]) - q[current\underline{~}state, action]) \]

  • 上述公式為Q-learning演算法中的Q值更新公式

  • Q-learning演算法中的Q值更新公式引數解釋:
  1. Q[CurrentState, Action]: 這是在當前狀態(CurrentState)下,採取特定動作(Action)所對應的Q值。Q值代表了在給定狀態下采取該動作的預期累積回報。

  2. LearningRate (α): 學習率是一個介於0和1之間的引數,用來控制新資訊(即當前的經驗和估計的未來回報)對Q值更新的影響。較高的學習率會使得新經驗更快速地影響Q值,而較低的學習率則會使得Q值更新更加平滑,減小波動。

  3. reward: 這是在執行動作(Action)後獲得的即時獎勵。它用於衡量該動作的好壞,與環境的反饋直接相關。

  4. gamma (γ): 折扣因子是一個介於0和1之間的引數,用於確定未來獎勵的重要性。γ越接近1,智慧體越重視未來的獎勵;γ越接近0,智慧體則更關注眼前的即時獎勵。

  5. max(Q[NextState]): 這是在下一個狀態(NextState)中所有可能動作的Q值中的最大值。它表示在下一個狀態下預計能獲得的最大未來回報。

\[Action = argmax(Q[CurrentState]) \]

  • 透過上述公式進行Action的選擇

個人理解:Q-learning是off-policy演算法。reward是現在的行為可見的確定的收益,gamma*max(Q[NextState])是預計的未來的總收益(不包括現在,即reward),Q[CurrentState, Action]是預計的現在的總收益(包括現在,即reward),此點參考【強化學習】 時序差分TD error的通俗理解,方程的右側表示Q值的更新。它使用了目前的Q值,加上基於當前獲得的獎勵和預計的未來獎勵的調整。這個調整部分是基於時序差分(即 TD-errors)學習的原則。

DQN演算法

需要先看:

Deep Reinforcement Learning (DRL) 演算法在 PyTorch 中的實現與應用【DQN部分】【程式碼中有take_action函式】

【深度強化學習】(1) DQN 模型解析,附Pytorch完整程式碼【程式碼實現部分】【程式碼中DQN網路缺少take_action函式,結合上文看吧】


\[q\underline{~}values = q\underline{~}network(state)\\ next\underline{~}qvalues= target\underline{~}network(next\underline{~}state)\\q\underline{~}target = reward + (1 - done) \times gamma \times next\underline{~}qvalues.max()\\loss = MSELoss(q\underline{~}values, q\underline{~}target) \]

  • 上述公式為深度 Q 網路(DQN)演算法中的Q值更新公式

\[q\underline{~}values = q\underline{~}network(state) \]

  • 透過上述公式進行Action的選擇,注意這裡用的是q_network而不是target_network

大白話解釋:

state和action為經驗池裡面提取的batch,不是某一時刻的state和action
DQN例項化為q_network,輸入state對應輸出q_values,action也是這個網路給出的
DQN例項化為target_network,輸入next_state對應輸出next_q_values
next_q_values例項化為q_targets
q_values和q_targets進行q_network的引數更新


  • 深度 Q 網路(DQN)演算法中的Q值更新公式引數解釋:
  1. target[action]: 這是當前狀態下,執行特定動作 action 的目標 Q 值。我們希望透過更新這個 Q 值來使其更接近真實的 Q 值。
  2. reward: 這是在當前狀態下執行 action 所得到的即時獎勵。
  3. done: 這是一個布林值,表示當前狀態是否是終止狀態。如果 done 為 1(或 True),表示已經到達終止狀態,那麼後續不再有獎勵;如果為 0(或 False),則表示還有後續狀態和獎勵。
  4. self.gamma: 這是折扣因子(通常在 0 到 1 之間),用於控制未來獎勵對當前決策的影響。較高的折扣因子意味著更關注未來的獎勵。
  5. next_q_values.max(): 這是在下一個狀態中所有可能動作的 Q 值的最大值,表示在下一個狀態下能獲得的最佳期望獎勵。

個人理解:DQN採用雙網路,是off-policy演算法。一個訓練網路僅使用當前資料,對一種state採取最優的action,需要頻繁更新。一個目標網路使用歷史資料,採取總體最優action,不需要頻繁更新。相較於Q-learning,使用Q函式代替了Q矩陣的作用,在狀態很多時Q矩陣難以處理,Q函式擅長對複雜情況進行建模。

相關文章