2021 重啓強化學習(1)

如果想觀看相關視頻可以在西瓜視頻(賬號zidea)或者嗶哩嗶哩(賬號zidea2015)找到我發佈視頻解說,注意頭像和簡書使用頭像一致。

Deepmind 自從在圍棋戰勝了圍棋世界冠軍之後就開始着手讓 AI 來玩更復雜遊戲 starcraft。我想大家可能和一樣對於 AI 能夠玩遊戲的項目是如何實現的非常感興趣。興趣歸興趣如果要實現一個這樣項目還是具有挑戰性,不過不管有多難,我們還是從基礎做起一步一步。

概率基礎知識

首先在開始之前簡單地迴歸一下可能在本次分享中用到一些概率知識。

隨機變量以及分佈函數

首先函數自變量可以從實數擴展到例如自變量爲兩點,輸出兩點距離。用大寫字母表示隨機變量,而用小寫來表示觀測值。事件用於語言來描述樣本集合,這些樣本具有一定屬性才聚集在一起

\begin{aligned} P(X=0) = 0.5\\ P(X=1) = 0.5 \end{aligned}

概率密度函數(PDF)

PDF 是 Probability Density Function 的縮寫,表示隨機變量某一個確定值出現的可能性,也就是我們熟悉的 PDF。

p(x) = \frac{1}{\sqrt{2\pi \sigma^2}}\exp \left(- \frac{(x - \mu)^2}{2 \sigma^2}\right)

期望

對於連續分佈的期望
E[f(x)] = \int_x p(x)f(x)dx

對於離散分佈的期望
E[f(x)] = \sum_x p(x)f(x)

隨機抽樣

隨機採樣就是調查對象總體中每個部分都有同等被抽中的可能,是一種完全依照機會均等的原則進行的抽樣調查,被稱爲是一種等概率

術語

狀態(State)

所謂狀態就是觀測到遊戲畫面的每一幀,也就是從環境中可以觀察到內容,或者理解環境讓我們觀察到的東西。

Action

a \in \{left,right,up,down\}

動作就是智能體(接下來會介紹什麼是智能體),根據當前狀態給出的反應。隨後我們會看到

Agent

智能體,在不同強化學習任務中 Agent 就是動作(Action)的發起者,坦克大戰遊戲中的 Agent 就是坦克,在無人駕駛中 Agent 就變爲 🚗。

Policy

首先 Policy 是一個函數,如果是函數,那麼就需要有輸入和輸出,在 Policy 函數中,輸入 State 而輸出是 Agent 執行 Action 的概率分佈,從而可見即使相同的輸入 State , Policy 也可能輸出不同的 Action,而不是某一個確定的 Action。

在數學上 Policy 函數表示爲 \pi(s,a) \rightarrow [0,1]
\pi(a|s) = P(A=a|S=s)

  • \pi(left|s) = 0.1
  • \pi(right|s) = 0.2
  • \pi(up|s) = 0.6
  • \pi(down|s) = 0.1

從上面公式我們不難發現強化學習主要就是學習這個 Policy 函數,只要有了這個 Policy 函數,輸入一個狀態後,Policy 就會做一個隨機抽樣來採取動作,這裏做隨機抽樣是爲來避免對手通猜透機器,找到規律,所以 Policy 策略是隨機。

reward

R 來表示獎勵,就是根據動作和狀態給出一個分數,這個分數可以理解爲獎勵,如何設計獎勵這個一點非常重要,設計好的獎勵會事倍功半。

  • 擊毀敵方坦克會的一定獎勵
  • 如果鷹巢被敵方攻破,就會損失很多獎勵

狀態轉移(state transition)

根據當前動作和上一個狀態我們會得到新的狀態,
p(s^{\prime}|s,a) = \mathbb{P}(S^{\prime}=s^{\prime}|S=s,A=a)

有關狀態轉移我們隱馬爾可夫鏈分享以圖解方式已經說很清楚,那麼狀態轉移是由環境決定的,遊戲中的環境就是系統。

Agent 和 Environment 的交互

接下來我們來看一看 Agent 是如何環境交互的

強化學習的隨機性

  • Policy 根據 state 給出了 Action 隨機


  • Enviroment 根據 Action 和 state 給出下一個狀態是隨機的
  • Policy 根據 s_1 給出 a_1
  • Enviroment 根據 s_1,a_1 給出 s_1r_1
  • Policy 繼續根據 s_2 給出 a_2
    迭代重複上面的步驟形成一條路徑
    s_1,a_1,r_1,s_2,a_2,r_2,\cdots,s_T,a_T,r_T

回報(Return)

我們來對比獎勵來說回報,回報是以當前時刻起向後一系列動作得到狀態的獎勵的累加,一直將獎勵累積加到遊戲結束最後一個獎勵。

U_t = R_t + R_{t+1} + R_{t+2} + \cdots +

  • 有關 R_tR_{t+1} 之間差異,他們獎勵的價值會隨着時間而其價值會降低,這個問題我們來舉一個例子來簡單說明一下,由於未來的獎勵沒有當下獎勵更有價值,所以可以加了一個 discounted 來進行調整,也就是折扣回報這裏 \gamma 表示 \gamma \in [0,1]

那麼添加了 \gamma 的回報也就是折扣回報,如下

U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots +

還需要說明一下折扣率 \gamma 是一個超參數,需要認爲來設置, \gamma 的設置會對強化學習有所影響。當某一個時刻結束了,R_t 也就計算得到小寫 r_t 因爲 U_t 依賴的獎勵是一個隨機變量,所以 U_t 也是隨機變量。

我們知道 Policy 生成 \pi(a|s) 而環境根據當前狀態和動作給出下一個狀態 s^{\prime} 也就是 p(s^{\prime}|a,s),那麼當前獎勵 R_t 是與當前 S_t 和動作 A_t 有關。

那麼對於 U_t 就與未來所有時刻 A_t,A_{t+1},A_{t+2},\cdotsS_t,S_{t+1},S_{t+2},\cdots 都有關係了

上面介紹什麼是回報,對回報有了一定了解。我們就可以開始介紹什麼是價值函數,價值函數是用來衡量某一狀態或動作狀態的好壞的,即對智能體來說是否值得選擇某一狀態或在某一狀態下執行某一動作。

動作價值函數(Value)

U_t = R_t + \gamma R_{t+1} + \gamma^2 R_{t+2} + \cdots +
U_t 是一個隨機變量,依賴未來所有的動作和狀態,U_t 在 t 時刻並不知道,

Q_{\pi}(s_t,a_t) = E[U_t|S_t=s_t,A_t=a_t]

可以對U_t 求期望,把裏面的隨機性都用積分積掉,例如雖然我們不知道下一個時刻會發生什麼,例如投擲硬幣,我們不知道下一個時刻會是正面還是背面,不過我們知道出現正面或者背面的概率都是 0.5 假設上面朝上我們將隨機變量 X 記做 1 反面記做 0 那麼期望就是 0.5 \times 1 + 0.5 \times 0 = 0.5,同樣的道理對 U_t 隨機變量求期望就可以得到一個數,即 Q_{\pi}

除了 S_tA_t 其他隨機變量都被積分積掉,求出的 Q_{\pi} 就是動作價值函數,Q_{\pi}(s_t,a_t)

Q^{*} = \max_{\pi} Q_{\pi}(s_t,a_t)

Q^{*}(s_t,a_t)

狀態價值函數V_{\pi}

意義爲基於 t 時刻的狀態 s_t 能獲得的未來回報(Return)的期望

V_{\pi} = E_{A}[Q_{\pi}(s_t,A)]

  • 將動作看作隨機變量 A 通過積分將其積掉
  • V_{\pi} 只與 s_t\pi 函數有關
  • V_{\pi}可以告訴我們當前的狀態好不好
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章