通俗講解強化學習!

1 簡介強化學習

強化學習是機器學習的一個分支。
1.1 什么是強化學習

強化學習是一種機器學習的學習方式(四種主要的機器學習方式解釋見上圖)。

上圖沒有提到深度學習,是因為從學習方式層面上來說,深度學習屬于上述四種方式的子集。而強化學習是獨立存在的,所以上圖單獨列出強化學習,而沒有列出深度學習。
強化學習和其他三種學習方式主要不同點在于:強化學習訓練時,需要環(huán)境給予反饋,以及對應具體的反饋值。它不是一個分類的任務,不是金融反欺詐場景中如何分辨欺詐客戶和正??蛻?。強化學習主要是指導訓練對象每一步如何決策,采用什么樣的行動可以完成特定的目的或者使收益最大化。
比如AlphaGo下圍棋,AlphaGo就是強化學習的訓練對象,AlphaGo走的每一步不存在對錯之分,但是存在“好壞”之分。當前這個棋面下,下的“好”,這是一步好棋。下的“壞”,這是一步臭棋。強化學習的訓練基礎在于AlphaGo的每一步行動環(huán)境都能給予明確的反饋,是“好”是“壞”?“好”“壞”具體是多少,可以量化。強化學習在AlphaGo這個場景中最終訓練目的就是讓棋子占領棋面上更多的區(qū)域,贏得最后的勝利。
打一個不是很恰當?shù)谋扔?,有點像馬戲團訓猴一樣。

馴獸師敲鑼,訓練猴站立敬禮,猴是我們的訓練對象。如果猴完成了站立敬禮的動作,就會獲得一定的食物獎勵,如果沒有完成或者完成的不對,就沒有食物獎勵甚至是鞭子抽打。時間久了,每當馴獸師敲鑼,猴子自然而然地就知道要站立敬禮,因為這個動作是當前環(huán)境下獲得收益最大的動作,其他動作就不會有食物,甚至還要被鞭子抽打。(https://bbs.hupu.com/36347293.html 這里有一篇耍猴的報道,有強化學習的味道)
強化學習的靈感來源于心理學里的行為主義理論:
一切學習都是通過條件作用,在刺激和反應之間建立直接聯(lián)結(jié)的過程。 強化在刺激一反應之間的建立過程中起著重要的作用。在刺激一反應聯(lián)結(jié)中,個體學到的是習慣,而習慣是反復練習與強化的結(jié)果。 習慣一旦形成,只要原來的或類似的刺激情境出現(xiàn),習得的習慣性反應就會自動出現(xiàn)。
那基于上述理論,強化學習就是訓練對象如何在環(huán)境給予的獎勵或懲罰的刺激下,逐步形成對刺激的預期,產(chǎn)生能獲得最大利益的習慣性行為。
1.2 強化學習的主要特點
試錯學習: 強化學習需要訓練對象不停地和環(huán)境進行交互,通過試錯的方式去總結(jié)出每一步的最佳行為決策,整個過程沒有任何的指導,只有冰冷的反饋。所有的學習基于環(huán)境反饋,訓練對象去調(diào)整自己的行為決策。 延遲反饋: 強化學習訓練過程中,訓練對象的“試錯”行為獲得環(huán)境的反饋,有時候可能需要等到整個訓練結(jié)束以后才會得到一個反饋,比如Game Over或者是Win。當然這種情況,我們在訓練時候一般都是進行拆解的,盡量將反饋分解到每一步。 時間是強化學習的一個重要因素:強化學習的一系列環(huán)境狀態(tài)的變化和環(huán)境反饋等都是和時間強掛鉤,整個強化學習的訓練過程是一個隨著時間變化,而狀態(tài)&反饋也在不停變化的,所以時間是強化學習的一個重要因素。 當前的行為影響后續(xù)接收到的數(shù)據(jù):為什么單獨把該特點提出來,也是為了和監(jiān)督學習&半監(jiān)督學習進行區(qū)分。在監(jiān)督學習&半監(jiān)督學習中,每條訓練數(shù)據(jù)都是獨立的,相互之間沒有任何關聯(lián)。但是強化學習中并不是這樣,當前狀態(tài)以及采取的行動,將會影響下一步接收到的狀態(tài)。數(shù)據(jù)與數(shù)據(jù)之間存在一定的關聯(lián)性。
2 詳解強化學習
下面我們對強化學習進行詳細的介紹:
2.1 基本組成部分

本文使用一個小游戲叫做Pacman(吃豆人)的游戲介紹強化學習(Reinforcement Learning)的基本組成部分。游戲目標很簡單,就是Agent要把屏幕里面所有的豆子全部吃完,同時又不能被幽靈碰到,被幽靈碰到則游戲結(jié)束,幽靈也是在不停移動的。Agent每走一步、每吃一個豆子或者被幽靈碰到,屏幕左上方這分數(shù)都會發(fā)生變化,圖例中當前分數(shù)是435分。這款小游戲,也是加州大學伯克利分校在上強化學習這門課程時使用的cousrwork。后續(xù)文章也會使用這個小游戲進行強化學習實戰(zhàn)講解。
Agent(智能體): 強化學習訓練的主體就是Agent,有時候翻譯為“代理”,這里統(tǒng)稱為“智能體”。Pacman中就是這個張開大嘴的黃色扇形移動體。 Environment(環(huán)境): 整個游戲的大背景就是環(huán)境;Pacman中Agent、Ghost、豆子以及里面各個隔離板塊組成了整個環(huán)境。 State(狀態(tài)): 當前 Environment和Agent所處的狀態(tài),因為Ghost一直在移動,豆子數(shù)目也在不停變化,Agent的位置也在不停變化,所以整個State處于變化中;這里特別強調(diào)一點,State包含了Agent和Environment的狀態(tài)。 Action(行動): 基于當前的State,Agent可以采取哪些action,比如向左or右,向上or下;Action是和State強掛鉤的,比如上圖中很多位置都是有隔板的,很明顯Agent在此State下是不能往左或者往右的,只能上下; Reward(獎勵): Agent在當前State下,采取了某個特定的action后,會獲得環(huán)境的一定反饋就是Reward。這里面用Reward進行統(tǒng)稱,雖然Reward翻譯成中文是“獎勵”的意思,但其實強化學習中Reward只是代表環(huán)境給予的“反饋”,可能是獎勵也可能是懲罰。比如Pacman游戲中,Agent碰見了Ghost那環(huán)境給予的就是懲罰。
以上是強化學習的五個基本組成部分。
2.2 強化學習訓練過程
下面我們需要介紹一下強化學習的訓練過程。整個訓練過程都基于一個前提,我們認為整個過程都是符合馬爾可夫決策過程的。
馬爾可夫決策過程(Markov Decision Process)
Markov是一個俄國的數(shù)學家,為了紀念他在馬爾可夫鏈所做的研究,所以以他命名了“Markov Decision Process”,以下用MDP代替。

MDP核心思想就是下一步的State只和當前的狀態(tài)State以及當前狀態(tài)將要采取的Action有關,只回溯一步。比如上圖State3只和State2以及Action2有關,和State1以及Action1無關。我們已知當前的State和將要采取的Action,就可以推出下一步的State是什么,而不需要繼續(xù)回溯上上步的State以及Action是什么,再結(jié)合當前的(State,Action)才能得出下一步State。實際應用中基本場景都是馬爾可夫決策過程,比如AlphaGo下圍棋,當前棋面是什么,當前棋子準備落在哪里,我們就可以清晰地知道下一步的棋面是什么了。
為什么我們要先定義好整個訓練過程符合MDP了,因為只有符合MDP,我們才方便根據(jù)當前的State,以及要采取的Action,推理出下一步的State。方便在訓練過程中清晰地推理出每一步的State變更,如果在訓練過程中我們連每一步的State變化都推理不出,那么也無從訓練。
接下來我們使用強化學習來指導Agent如何行動了。
2.3 強化學習算法歸類
我們選擇什么樣的算法來指導Agent行動?本身強化學習算法有很多種,關于強化學習算法如何分類,有很多種分類方式,這里我選擇三種比較常見的分類方式。
( 1 ) - Value Based -
強調(diào)一點這里面的Value值,在強化學習訓練開始時都是不知道的,我們一般都是設置為0。然后讓Agent不斷去嘗試各類Action,不斷與環(huán)境交互,不斷獲得Reward,然后根據(jù)我們計算Value的公式,不停地去更新Value,最終在訓練N多輪以后,Value值會趨于一個穩(wěn)定的數(shù)字,才能得出具體的State下,采取特定Action,對應的Value是多少

( 2 ) - Policy Based -
Policy Based策略就是對Value Based的一個補充,
( 3 ) -?Actor-Critic -
AC分類就是將Value-Based和Policy-Based結(jié)合在一起,里面的算法結(jié)合了2.3.1和2.3.2。
上述就是三大類常見的強化學習算法,而在Pacman這個游戲中,我們就可以使用Value-Based算法來訓練。因為每個State下最終對應的最優(yōu)Action是比較固定的,同時Reward函數(shù)也容易設定。
( 4 ) - 其他分類 -
上述三種分類是常見的分類方法,有時候我們還會通過其他角度進行分類,以下分類方法和上述的分類存在一定的重疊:
根據(jù)是否學習出環(huán)境Model分類:Model-based指的是,agent已經(jīng)學習出整個環(huán)境是如何運行的,當agent已知任何狀態(tài)下執(zhí)行任何動作獲得的回報和到達的下一個狀態(tài)都可以通過模型得出時,此時總的問題就變成了一個動態(tài)規(guī)劃的問題,直接利用貪心算法即可了。這種采取對環(huán)境進行建模的強化學習方法就是Model-based方法。
而Model-free指的是,有時候并不需要對環(huán)境進行建模也能找到最優(yōu)的策略。雖然我們無法知道確切的環(huán)境回報,但我們可以對它進行估計。Q-learning中的Q(s,a)就是對在狀態(tài)s下,執(zhí)行動作a后獲得的未來收益總和進行的估計,經(jīng)過很多輪訓練后,Q(s,a)的估計值會越來越準,這時候同樣利用貪心算法來決定agent在某個具體狀態(tài)下采取什么行動。
如何判斷該強化學習算法是Model-based or Model-free, 我們是否在agent在狀態(tài)s下執(zhí)行它的動作a之前,就已經(jīng)可以準確對下一步的狀態(tài)和回報做出預測,如果可以,那么就是Model-based,如果不能,即為Model-free。
2.4 EE(Explore & Exploit)
2.3里面介紹了各種強化學習算法:Value-Based、Policy-Based、Actor-Critic。但實際我們在進行強化學習訓練過程中,會遇到一個“EE”問題。這里的Double E不是“Electronic Engineering”,而是“Explore & Exploit”,“探索&利用”。
比如在Value-Based中,如下圖StateA的狀態(tài)下,最開始Action1&2&3對應的Value都是0,因為訓練前我們根本不知道,初始值均為0。如果第一次隨機選擇了Action1,這時候StateA轉(zhuǎn)化為了StateB,得到了Value=2,系統(tǒng)記錄在StateA下選擇Action1對應的Value=2。如果下一次Agent又一次回到了StateA,此時如果我們選擇可以返回最大Value的action,那么一定還是選擇Action1。因為此時StateA下Action2&3對應的Value仍然為0。Agent根本沒有嘗試過Action2&3會帶來怎樣的Value。

所以在強化學習訓練的時候,一開始會讓Agent更偏向于探索Explore,并不是哪一個Action帶來的Value最大就執(zhí)行該Action,選擇Action時具有一定的隨機性,目的是為了覆蓋更多的Action,嘗試每一種可能性。等訓練很多輪以后各種State下的各種Action基本嘗試完以后,我們這時候會大幅降低探索的比例,盡量讓Agent更偏向于利用Exploit,哪一個Action返回的Value最大,就選擇哪一個Action。
Explore&Exploit是一個在機器學習領域經(jīng)常遇到的問題,并不僅僅只是強化學習中會遇到,在推薦系統(tǒng)中也會遇到,比如用戶對某個商品 or 內(nèi)容感興趣,系統(tǒng)是否應該一直為用戶推送,是不是也要適當搭配隨機一些其他商品 or 內(nèi)容。
2.5 強化學習實際開展中的難點
我們實際在應用強化學習去訓練時,經(jīng)常會遇到各類問題。雖然強化學習很強大,但是有時候很多問題很棘手無從下手。
03 強化學習的實際應用
雖然強化學習目前還有各種各樣的棘手問題,但目前工業(yè)界也開始嘗試應用強化學習到實際場景中了,除了AlphaGo還有哪些應用了:
3.1 自動駕駛
目前國內(nèi)百度在自動駕駛領域中就使用了一定的強化學習算法,但是因為強化學習需要和環(huán)境交互試錯,現(xiàn)實世界中這個成本太高,所以真實訓練時都需要加入安全員進行干預,及時糾正Agent采取的錯誤行為。
3.2 游戲
游戲可以說是目前強化學習應用最廣闊的,目前市場上的一些MOBA游戲基本都有了強化學習版的AI在里面,最出名的就是王者榮耀AI。游戲環(huán)境下可以隨便交互,隨便試錯,沒有任何真實成本。同時Reward也相對比較容易設置,存在明顯的獎勵機制。
3.3 推薦系統(tǒng)
目前一些互聯(lián)網(wǎng)大廠也在推薦系統(tǒng)中嘗試加入強化學習來進行推薦,比如百度&美團。使用強化學習去提高推薦結(jié)果的多樣性,和傳統(tǒng)的協(xié)同過濾&CTR預估模型等進行互補。
