一、什么是Q_learning
Q_learning是強化學(xué)習(xí)中的一個決策算法,如果你還不知道什么是強化學(xué)習(xí),可以參看強化學(xué)習(xí)這篇文章。
二、Q-Learning 決策
假設(shè)我們的行為準則已經(jīng)學(xué)習(xí)好了,現(xiàn)在我們處于狀態(tài) s(tate) 1,有兩個行為 a(ction) 1、a(ction) 2,在這種 s1 狀態(tài)下,a2 帶來的潛在獎勵要比 a1 高(如下表所示),這里的潛在獎勵我們可以用一個有關(guān)于 s 和 a 的 Q 表格代替,在Q表格中,Q(s1, a1) = -2,要小于 Q(s1, a2) = 1,所以我們判斷要選擇 a2 作為下一個行為。(注意,此時Q表里的數(shù)據(jù)是隨機設(shè)置的,稱為估計值,而Q_learning的目的就是更新Q表,使之變成一個準確的Q表。)
| Q | a1 | a2 |
|---|---|---|
| s1 | -2 | 1 |
| s2 | -4 | 2 |
當選擇 a2 后,狀態(tài) s1 結(jié)束,我門到達狀態(tài) s2,我們還是有兩個同樣的選擇,重復(fù)上面的過程,在行為準則 Q 表中尋找 Q(s2, a1)、Q(s2, a2) 的值,并比較他們的大小,選取較大的一個。接著根據(jù) a2 我們到達 s3 并在此重復(fù)上面的決策過程。
三、Q-Learning 更新
根據(jù) Q 表的估計,因為在 s1 中, a2 的值比較大,通過之前的決策方法,我們在 s1 采取了 a2,并到達 s2,這時,我們開始更新用于決策的 Q 表,接著我們分別看看兩種行為哪一個的 Q 值大。
比如說 Q(s2, a2) 的值比 Q(s2, a1) 的大,所以我們把大的值乘上一個衰減值 gamma (比如0.9) 并加上到達 s2 時所獲取的獎勵 R(eward),因為會獲取實實在在的獎勵 R,我們將這個作為我現(xiàn)實中 Q(s1, a2) 的值,但是我們之前是根據(jù) Q 表估計 Q(s1, a2) 的值。所以有了現(xiàn)實和估計值,我們就能更新Q(s1, a2),根據(jù)估計與現(xiàn)實的差距,將這個差距乘以一個學(xué)習(xí)效率 alpha 累加上舊的 Q(s1, a2) 的值,變成新的值。

但時刻記住,我們雖然用 maxQ(s2) 估算了一下 s2 狀態(tài),但還沒有在 s2 做出任何的行為,s2 的行為決策要等到更新完了以后再重新另外做。這就是 Off-Policy 的 Q learning 是如何決策和學(xué)習(xí)優(yōu)化決策的過程。
四、Q-Learning 整體算法
Initialize Q arbitrarily // 隨機初始化Q表
Repeat (for each episode): // 每一次從開始到結(jié)束是一個episode
Initialize S // S為初始位置的狀態(tài)
Repeat (for each step of episode):
Choose a from s using policy derived from Q(ε-greedy) //根據(jù)當前Q和位置S,使用一種策略,得到動作A,這個策略可以是ε-greedy等
Take action a, observe r // 做了動作A,到達新的位置S',并獲得獎勵R,獎勵可以是1,50或者-1000
Q(S,A) ← Q(S,A) + α*[R + γ*maxQ(S',a))-Q(s,a)] // 在Q中更新S
S ← S'
until S is terminal //即到游戲結(jié)束為止
這一段代碼概括了我們之前所有的內(nèi)容。這也是 Q_learning 的算法, 每次更新我們都用到了 Q 現(xiàn)實和 Q 估計,而且 Q learning 的重點就是在 Q(s1, a2) 現(xiàn)實中,也包含了一個 Q(s2) 的最大估計值,將對下一步的衰減的最大估計和當前所得到的獎勵當成這一步的現(xiàn)實。
最后我們來說說這套算法中一些參數(shù)的意義。Epsilon Greedy 是用在決策上的一種策略,比如 epsilon = 0.9 時, 就說明有 90% 的情況我會按照 Q 表的最優(yōu)值選擇行為,10% 的時間使用隨機選行為,這樣做的目的是讓其有機會跳出局部最優(yōu)。alpha是學(xué)習(xí)率,來決定這次的誤差有多少要被學(xué)習(xí)的,alpha是一個小于1 的數(shù)。gamma 是對未來 reward 的衰減值。