Q-Learning介紹:一種增強學習

最近在訓練機器人,學習了Q-learning算法,看到了幾篇比較好的文章,好幾篇文章已經有人翻譯過了,還有一系列好文章還沒有翻譯版本,這篇文章是medium上的,出處爲

An introduction to Q-Learning: reinforcement learning ——ADL

Q-learning是一種基於值的監督式學習算法。在此文中,我們將從以下幾方面介紹Q-learning算法

  • 什麼是Q-learning
  • Q-learning背後的數學
  • 利用Python實現

Q-learning——簡要綜述

舉個栗子,有一個機器人需要穿越迷宮到達終點,在地圖上有一些地雷,機器人每次可以走一步,如果踩到地雷機器人會死掉,我們的問題是需要讓機器人在最短的時間到達終點。

評分系統如下所示:

  1. 每走一步機器人損失一分,這麼做的目的是讓機器人學會走最短路,也就是在最短時間到達
  2. 如果機器人踩到地雷,他會損失100分並且遊戲結束
  3. 如果機器人得到能量⚡️,會加一分
  4. 如果機器人到達終點,會得到100分

現在的問題很明顯了:我們怎樣訓練機器人,讓他學會在不踩地雷的基礎上,走最短路到達終點呢?
地圖
所以,我們該怎樣解決捏?

Q-table的引入

Q-Table是在每個狀態下我們計算最大期望獎勵的查詢表格。也就是說,這個表會指導我們在每個狀態下做哪個動作是最佳的。
在這裏插入圖片描述
如果機器人不在邊上和角落時,他有四個方向可以選擇,下面便是我們的Q-table
在這裏插入圖片描述
每個Q-table的分數是如果機器人在那個狀態下采取那個動作會得到的最大期望獎勵。這是個迭代過程,也就是我們需要在每次迭代時改進Q-table。

但是問題是:

  • 怎樣計算Q-table的值?
  • 這些值是可得的還是預先定義的?

爲了得到Q-table中的每個值,我們使用Q-learning算法

數學:Q-learning算法

Q-函數(Q-function)

Q-函數使用Bellman等式並且有兩個輸入:狀態(states(s))和動作(action(a))
在這裏插入圖片描述
使用上述函數,我們可以得到在表格中Q每個格中的值
初始的時候,Q-table中所有的值爲0
然後是一個迭代過程,當我們開始探索環境時,Q-函數可以通過更新表中的數給我們越來越好的近似值
現在,讓我們理解更新是怎麼做的~

Q-learning算法過程的介紹

在這裏插入圖片描述
如上圖所示,每個帶顏色的框就是一步,讓我們具體來看~

步驟1:初始化Q-table

我們首先建立一個Q-table。有n列(n是動作的數量)m行(狀態數),初始化所有數值爲0.
在我們的例子中,我們有四個動作(a=4)和五個狀態(s=5)。因此我們建立一個四行五列的表格。

步驟2,3:選擇並執行動作

這個步驟的組合在未定義的時間內執行。這意味着這一步在我們停止訓練之前,或者在指定訓練迭代之內執行
我們在狀態(s)下根據Q-table選擇一個動作(a)。但是,正如之前提到的,迭代開始之初,所有的Q-值(value)都是0.
此時,探索和開採平衡(exploration and exploitation trade-off)就進入了我們的視線。
我們利用ϵ\epsilon貪婪策略(epsilon greedy strategy)
開始的時候,ϵ\epsilon值是比較高的,因此機器人將會探索環境並且隨機選擇一些動作。這背後的邏輯是此時機器人對環境一無所知
在探索的過程中,機器人將會對估計Q-值越來越有信心
對於機器人來說,這裏一共有四種動作可供選擇:上,下,左,右。我們現在開始訓練——我們的機器人對環境一無所知,因此他隨機選擇了一個動作,比如向右
在這裏插入圖片描述
現在我們利用Bellman等式,更新向右移動之後的Q-值

步驟4和5:評價

現在我們執行一個動作並且觀察輸出(outcome)和獎勵(reward)。我們需要更新函數Q(s,a)
在這裏插入圖片描述
在這個例子中,分數分配的結構如下:

  • power(能量) = +1
  • mine(地雷) = -100
  • end(到達終點) = +100
New Q(start,right) = Q(start, right + alpha[some ... Delta value])
some ... Delta value = R(start, right) + max(Q'(nothing,down), Q'(nothing,left), Q'(nothing,right))- Q'(start,right)
some... Delta value = 0 +0.9 * 0 - 0 = 0
 New Q(start,right) = 0 + 0.1 * 0 = 0

我們將一次又一次重複這個過程直到學習過程結束。在這個過程中Q-table將會更新

Q-learning的python實現

概念和代碼實現在作者的YouTube視頻中

最終總結

  • Q-learning是一種基於值的監督式學習算法,他是利用Q-函數尋找選擇最優動作策略的
  • 我們的目標時最大化價值函數Q的
  • Q-table幫助我們尋找在每個狀態下的最佳動作
  • 它通過選擇最優動作最大化期望獎勵
  • Q(state,action)返回在指定狀態和動作情況下的期望獎勵
  • 函數可以通過Q-Learning估計,是通過Bellman等式迭代更新Q(s,a)的
  • 最初我們需要探索(explore)環境並且更新Q-table。當Q-table得到之後,機器人(agent)就可以開發(exploit)環境並且可以採用更好的動作了
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章