Q-learning算法介紹(1)


我們在這里使用一個簡單的例子來介紹Q-learning的工作原理。下圖是一個房間的俯視圖,我們的智能體agent要通過非監督式學習來了解這個陌生的環境。圖中的0到4分別對應一個房間,5對應的是建築物周圍的環境。如果房間之間有一個門,那么這2個房間就是直接相通的,否則就要通過其他房間相通。

 

 

下面的這個示意圖就表示房間的相通性。

 

 

在這個例子中,我們的任務是把智能體(agent)放到任何的一個房間中,然后讓它通過自己學習從房間中走出來,到周圍環境5中。

為了完成這個任務,我們要給每個門一個獎勵值(reward)。我們的分配方法是這樣的:

- 讓智能體直接走到外部環境中(目標狀態)5的門將有一個100的獎勵值;

- 所有其他門的獎勵值為0. (如下圖所示)

 

 

 上圖中顯示,如果智能體停留在外面也可以獲得100的獎勵。我們知道Q-learning的最終目標是讓智能體進入目標狀態,同時獲得最高的獎勵。在我們的例子中,我們的智能體對這個環境一無所知,也不知道通過走哪幾個門可以走到外部環境中,但是它可以通過實際經驗進行學習。

 

 現在我們把智能體放到2號房間,讓它通過學習走到外部環境5中。在加強式學習中,我們經常提到狀態(state)和動作(action)這2個概念。所以,智能體在每個房間中就對應一個狀態,而當它從一個房間到達另一個房間就對應一個動作。如下圖所示:

 

 如果把它轉換成獎勵矩陣R,R就是一個6x6的矩陣

 

 R矩陣中的-1代表從一個房間無法直接到達另一個對應的房間。現在,我們就可以開始創建我們的Q矩陣了,也可以稱它為Q-table。這個Q-table中的信息就代表智能體在學習過程中不斷獲得的知識或經驗。跟R矩陣類似,Q-table中的每一行對應一個狀態,每一列對應一個動作。智能體在開始學習的時候,對環境一無所知,所以Q-table中的所有值都被初始化為0。在agent的學習過程中,這個Q-table會被不停的更新,更新的方法就是下面的公式:

Q(state, action) = R(state, action) + Gamma * Max[Q(next possible state1, action1), Q(next possible state2, action2), Q(next possible state3, action3), ... ]

其中Q(state, action)是Q-table中對應state和action的那個單元值,其更新的方法就是把它對應的R矩陣中的值 + 所有可能的下一個狀態和其對應動作在Q-table中對應值中最大的那個 x 系數Gamma(我們后面再討論這個Gamma系數)。這樣我們的智能體就可以在沒有老師的情況下自我學習,直到它進入目標狀態。智能體的每一次完整的嘗試(從任何開始狀態進入目標狀態)被稱為一個迭代或回合(episode);而每一次迭代完成后,算法會開始新的一次迭代。Q-learning算法包括下面的步驟:

  1. 初始化Gamma值和R矩陣的所有值;
  2. 初始化Q-table中的所有值為0;
  3. 在每次迭代中:
    • 隨機選擇一個起始狀態;
    • 如果智能體還沒有進入目標狀態,則繼續
      • 從當前狀態下所有可能的動作中選擇一個給出最大Q值的那對動作和狀態(next state i,action i);
      • 把當前的Q(state, action)值更新為R(state, action) + Gamma * 上面得到的最大Q(next state i,action i)值;
      • 把上面對應的next state i變為現在的狀態;
      • 如果現在狀態不是目標狀態,則繼續更新;否則就終止當前的迭代。

上面的算法讓智能體從實踐中學習,每一個迭代都是一次完整的訓練。在每一次訓練中,智能體都對環境(由R矩陣表示)進行一次探索學習,得到獎勵,得到目標狀態。而訓練的目的則是提高智能體的智能(由Q-table表示),訓練的次數越多,智能體的‘大腦’就越聰明。

下面我們就談談這個Gamma系數:Gamma是一個介於0到1之間的一個值,Gamma越接近0,智能體越是會考慮尋找最短最快的路徑;如果Gamma接近1,智能體則會更多的考慮未來比較高的獎勵(路徑長度不是首要考慮因素)。

當這個Q-table建好之后,智能體只需要比較所有從開始狀態到目標狀態的路徑,從中選擇出最大獎勵值的那個,算法步驟如下:

  1. 把起始狀態設為當前狀態;
  2. 從當前狀態下,從Q-table中找出給出最大Q值的動作;
  3. 然后把當前狀態改為由上面動作進入的那個狀態;
  4. 進行重復2和3,直到智能體進入目標狀態;

上面算法的結果就會給出從開始狀態到達目標狀態的動作序列。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM