強化學習(Reinforcement Learning)中的Q-Learning、DQN,面試看這篇就夠了!

1. 什麼是強化學習

其他許多機器學習算法中學習器都是學得怎樣做,而強化學習(Reinforcement Learning, RL)是在嘗試的過程中學習到在特定的情境下選擇哪種行動可以得到最大的回報。在很多場景中,當前的行動不僅會影響當前的rewards,還會影響之後的狀態和一系列的rewards。RL最重要的3個特定在於:

  1. 基本是以一種閉環的形式;
  2. 不會直接指示選擇哪種行動(actions);
  3. 一系列的actions和獎勵信號(reward signals)都會影響之後較長的時間。

強化學習(Reinforcement Learning, RL),又稱再勵學習、評價學習或增強學習,是機器學習的範式和方法論之一,用於描述和解決智能體(agent)在與環境的交互過程中通過學習策略以達成回報最大化或實現特定目標的問題 [1] 。

上圖中agent代表自身,如果是自動駕駛,agent就是車;如果你玩遊戲它就是你當前控制的遊戲角色,如馬里奧,馬里奧往前走時環境就一直在發生變化,有小怪物或者障礙物出現,它需要通過跳躍來進行躲避,就是要做action(如向前走和跳起的動作);無人駕駛的action就是車左轉、右轉或剎車等等,它無時無刻都在與環境產生交互,action會反饋給環境,進而改變環境,如果自動駕駛的車行駛目標是100米,它向前開了10米,那環境就發生了變化,所以每次產生action都會導致環境改變,環境的改變會反饋給自身(agent),就是這樣的一個循環;反饋又兩種方式:

  1. 做的好(reward)即正反饋,
  2. 做得不好(punishment懲罰)即負反饋。

Agent可能做得好,也可能做的不好,環境始終都會給它反饋,agent會盡量去做對自身有利的決策,通過反反覆覆這樣的一個循環,agent會越來越做的好,就像孩子在成長過程中會逐漸明辨是非,這就是強化學習。

2. 強化學習模型

如上圖左邊所示,一個agent(例如:玩家/智能體等)做出了一個action,對environment造成了影響,也就是改變了state,而environment爲了反饋給agent,agent就得到了一個獎勵(例如:積分/分數),不斷的進行這樣的循環,直到結束爲止。

上述過程就相當於一個馬爾可夫決策過程,爲什麼這樣叫呢?因爲符合馬兒可夫假設

  • 當前狀態 St 只由上一個狀態 St-1 和行爲所決定,而和前序的更多的狀態是沒有關係的。

上圖右邊所示,S0 狀態經過了 a0 的行爲後,獲得了獎勵 r1 ,變成了狀態S1,後又經過了 a0 行爲得到獎勵 r2,變成了狀態 S2 ,如此往復循環,直到結束爲止。

2.1 打折的未來獎勵

通過以上的描述,大家都已經確定了一個概念,也就是agent(智能體)在當下做出的決定肯定使得未來收益最大化,那麼,一個馬兒可夫決策過程對應的獎勵總和爲:

R=r1+r2+r3+...+rnR=r_1+r_2+r_3+...+r_n

t 時刻(當下)的未來獎勵,只考慮後面的獎勵,前面的改變不了:

Rt=rt+rt+1+rt+2+...+rnR_t=r_t+r_{t+1}+r_{t+2}+...+r_n

接下來,**當前的情況下做出的動作是能夠得到結果的,但對於未來的影響是一個不確定的,**這也符合我們的真實世界,比如誰都不知道一隻蝴蝶只是煽動了一次翅膀會造成颶風式的影響(蝴蝶效應)。所以,當前的行爲對於未來是不確定性的,要打一個折扣,也就是加入一個係數gamma,是一個 0 到 1 的值:

Rt=r1+γrt+1+γ2rt+2+...+γn1rnR_t=r_1+\gamma_{}r_{t+1}+\gamma^2r_{t+2}+...+\gamma^{n-1}r_n

離當前越遠的時間,gamma的懲罰係數就會越大,也就是越不確定。爲的就是在當前和未來的決策中取得一個平衡。gamma取 0 ,相當於不考慮未來,只考慮當下,是一種很短視的做法;而gamma取 1 ,則完全考慮了未來,又有點過慮了。所以一般gamma會取 0 到 1 之間的一個值。

Rt 可以用 Rt+1 來表示,寫成遞推式:

Rt=rt+γ(rt+1+γ(rt+2+...))=rt+γRt+1R_t=r_t+\gamma(r_{t+1}+\gamma(r_{t+2}+...))=r_t+\gamma_{}R_{t+1}

2.2 Q-Learning算法

Q(s, a)函數(Quality),質量函數用來表示智能體在s狀態下采用a動作並在之後採取最優動作條件下的打折的未來獎勵(先不管未來的動作如何選擇):

Q(st,at)=maxRt+1Q(s_t,a_t)=maxR_{t+1}

假設有了這個Q函數,那麼我們就能夠求得在當前 t 時刻當中,做出各個決策的最大收益值,通過對比這些收益值,就能夠得到 t 時刻某個決策是這些決策當中收益最高。

π(s)=argmaxaQ(s,a)\pi(s)=argmax_aQ(s,a)

於是乎,根據Q函數的遞推公式可以得到:

Q(st,at)=r+γmaxaQ(st+1,at+1)Q(s_t,a_t)=r+\gamma_{}max_aQ(s_{t+1},a_{t+1})

**這就是註明的貝爾曼公式。**貝爾曼公式實際非常合理。對於某個狀態來講,最大化未來獎勵相當於
最大化即刻獎勵與下一狀態最大未來獎勵之和。

**Q-learning的核心思想是:**我們能夠通過貝爾曼公式迭代地近似Q-函數。

2.3 Deep Q Learning(DQN)

Deep Q Learning(DQN)是一種融合了神經網絡和的Q-Learning方法。

2.3.1 神經網絡的作用

[外鏈圖片轉存失敗(img-PbSUPLoh-1566121098540)(https://morvanzhou.github.io/static/results/ML-intro/DQN2.png)]

使用表格來存儲每一個狀態 state, 和在這個 state 每個行爲 action 所擁有的 Q 值. 而當今問題是在太複雜, 狀態可以多到比天上的星星還多(比如下圍棋). 如果全用表格來存儲它們, 恐怕我們的計算機有再大的內存都不夠, 而且每次在這麼大的表格中搜索對應的狀態也是一件很耗時的事. 不過, 在機器學習中, 有一種方法對這種事情很在行, 那就是神經網絡.

我們可以將狀態和動作當成神經網絡的輸入, 然後經過神經網絡分析後得到動作的 Q 值, 這樣我們就沒必要在表格中記錄 Q 值, 而是直接使用神經網絡生成 Q 值.

還有一種形式的是這樣, 我們也能只輸入狀態值, 輸出所有的動作值, 然後按照 Q learning 的原則, 直接選擇擁有最大值的動作當做下一步要做的動作.

我們可以想象, 神經網絡接受外部的信息, 相當於眼睛鼻子耳朵收集信息, 然後通過大腦加工輸出每種動作的值, 最後通過強化學習的方式選擇動作.

2.3.2 神經網絡計算Q值

這一部分就跟監督學習的神經網絡一樣了我,輸入狀態值,輸出爲Q值,根據大量的數據去訓練神經網絡的參數,最終得到Q-Learning的計算模型,這時候我們就可以利用這個模型來進行強化學習了。

[外鏈圖片轉存失敗(img-ncnopDQ4-1566121098540)(https://morvanzhou.github.io/static/results/ML-intro/DQN4.png)]

3. 強化學習和監督學習、無監督學習的區別

  1. 監督式學習就好比你在學習的時候,有一個導師在旁邊指點,他知道怎麼是對的怎麼是錯的。

    強化學習會在沒有任何標籤的情況下,通過先嚐試做出一些行爲得到一個結果,通過這個結果是對還是錯的反饋,調整之前的行爲,就這樣不斷的調整,算法能夠學習到在什麼樣的情況下選擇什麼樣的行爲可以得到最好的結果。

  2. 監督式學習出的是之間的關係,可以告訴算法什麼樣的輸入對應着什麼樣的輸出。監督學習做了比較壞的選擇會立刻反饋給算法。

    強化學習出的是給機器的反饋 reward function,即用來判斷這個行爲是好是壞。 另外強化學習的結果反饋有延時,有時候可能需要走了很多步以後才知道以前的某一步的選擇是好還是壞。

  3. 監督學習的輸入是獨立同分布的。

    強化學習面對的輸入總是在變化,每當算法做出一個行爲,它影響下一次決策的輸入。

  4. 監督學習算法不考慮這種平衡,就只是 exploitative。

    強化學習,一個 agent 可以在探索和開發(exploration and exploitation)之間做權衡,並且選擇一個最大的回報。

  5. 非監督式不是學習輸入到輸出的映射,而是模式(自動映射)。

    對強化學習來說,它通過對沒有概念標記、但與一個延遲獎賞或效用(可視爲延遲的概念標記)相關聯的訓練例進行學習,以獲得某種從狀態到行動的映射。

強化學習和前二者的本質區別:沒有前兩者具有的明確數據概念,它不知道結果,只有目標。數據概念就是大量的數據,有監督學習、無監督學習需要大量數據去訓練優化你建立的模型。

監督學習 非監督學習 強化學習
標籤 正確且嚴格的標籤 沒有標籤 沒有標籤,通過結果反饋調整
輸入 獨立同分布 獨立同分布 輸入總是在變化,每當算法做出一個行爲,它影響下一次決策的輸入。
輸出 輸入對應輸出 自學習映射關係 reward function,即結果用來判斷這個行爲是好是壞

4. 什麼是多任務學習

在機器學習中,我們通常關心優化某一特定指標,不管這個指標是一個標準值,還是企業KPI。爲了達到這個目標,我們訓練單一模型或多個模型集合來完成指定得任務。然後,我們通過精細調參,來改進模型直至性能不再提升。儘管這樣做可以針對一個任務得到一個可接受得性能,但是我們可能忽略了一些信息,這些信息有助於在我們關心的指標上做得更好。具體來說,這些信息就是相關任務的監督數據。通過在相關任務間共享表示信息,我們的模型在原始任務上泛化性能更好。這種方法稱爲多任務學習(Multi-Task Learning)

在不同的任務中都會有一些共性,而這些共性就構成了多任務學習的一個連接點,也就是任務都需要通過這個共性能得出結果來的。比如電商場景中的點擊率和轉化率,都要依賴於同一份數據的輸入和神經網絡層次。多語種語音識別等。

image

5. 參考文獻

機器學習通俗易懂系列文章

3.png


作者:@mantchs

GitHub:https://github.com/NLP-LOVE/ML-NLP

歡迎大家加入討論!共同完善此項目!羣號:【541954936】NLP面試學習羣

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章