www.日本精品,久久中文视频,中文字幕第一页在线播放,香蕉视频免费网站,老湿机一区午夜精品免费福利,91久久综合精品国产丝袜长腿,欧美日韩视频精品一区二区

系統(tǒng)學(xué)習(xí)機(jī)器學(xué)習(xí)之增強(qiáng)學(xué)習(xí)(一)--模型基礎(chǔ)x

發(fā)布時(shí)間:2020-09-08 來源: 事跡材料 點(diǎn)擊:

 系統(tǒng)學(xué)習(xí)機(jī)器學(xué)習(xí)之增強(qiáng)學(xué)習(xí)(一)-- 模型基礎(chǔ) 轉(zhuǎn)自:https://www.cnblogs.com/pinard/p/9385570.html 從今天開始整理強(qiáng)化學(xué)習(xí)領(lǐng)域的知識,主要參考的資料是 Sutton 的強(qiáng)化學(xué)習(xí)書和UCL 強(qiáng)化學(xué)習(xí)的課程。這個(gè)系列大概準(zhǔn)備寫 10 到 20 篇,希望寫完后自己的強(qiáng)化學(xué)習(xí)碎片化知識可以得到融會貫通,也希望可以幫到更多的人,畢竟目前系統(tǒng)的講解強(qiáng)化學(xué)習(xí)的中文資料不太多。

  第一篇會從強(qiáng)化學(xué)習(xí)的基本概念講起,對應(yīng) Sutton 書的第一章和 UCL 課程的第一講。

 1.

 強(qiáng)化學(xué)習(xí)在機(jī)器學(xué)習(xí)中的位置

  強(qiáng)化學(xué)習(xí)的學(xué)習(xí)思路和人比較類似,是在實(shí)踐中學(xué)習(xí),比如學(xué)習(xí)走路,如果摔倒了,那么我們大腦后面會給一個(gè)負(fù)面的獎(jiǎng)勵(lì)值,說明走的姿勢不好。然后我們從摔倒?fàn)顟B(tài)中爬起來,如果后面正常走了一步,那么大腦會給一個(gè)正面的獎(jiǎng)勵(lì)值,我們會知道這是一個(gè)好的走路姿勢。那么這個(gè)過程和之前講的機(jī)器學(xué)習(xí)方法有什么區(qū)別呢?

  強(qiáng)化學(xué)習(xí)是和監(jiān)督學(xué)習(xí),非監(jiān)督學(xué)習(xí)并列的第三種機(jī)器學(xué)習(xí)方法,從下圖我們可以看出來。

 強(qiáng)化學(xué)習(xí)來和監(jiān)督學(xué)習(xí)最大的區(qū)別是它是沒有監(jiān)督學(xué)習(xí)已經(jīng)準(zhǔn)備好的訓(xùn)練數(shù)據(jù)輸出值的。強(qiáng)化學(xué)習(xí)只有獎(jiǎng)勵(lì)值,但是這個(gè)獎(jiǎng)勵(lì)值和監(jiān)督學(xué)習(xí)的輸出值不一樣,它不是事先給出的,而是延后給出的,比如上面的例子里走路摔倒了才得到大腦的獎(jiǎng)勵(lì)值。同時(shí),強(qiáng)化學(xué)習(xí)的每一步與時(shí)間順序前后關(guān)系緊密。而監(jiān)督學(xué)習(xí)的訓(xùn)練數(shù)據(jù)之間一般都是獨(dú)立的,沒有這種前后的依賴關(guān)系。

 再來看看強(qiáng)化學(xué)習(xí)和非監(jiān)督學(xué)習(xí)的區(qū)別。也還是在獎(jiǎng)勵(lì)值這個(gè)地方。非監(jiān)督學(xué)習(xí)是沒有輸出值也沒有獎(jiǎng)勵(lì)值的,它只有數(shù)據(jù)特征。同時(shí)和監(jiān)督學(xué)習(xí)一樣,數(shù)據(jù)之間也都是獨(dú)立的,沒有強(qiáng)化學(xué)習(xí)這樣的前后依賴關(guān)系。

 2. 強(qiáng)化學(xué)習(xí)的建模

  我們現(xiàn)在來看看強(qiáng)化學(xué)習(xí)這樣的問題我們怎么來建模,簡單的來說,是下圖這樣的:

 上面的大腦代表我們的算法執(zhí)行個(gè)體,我們可以操作個(gè)體來做決策,即選擇一個(gè)合適的動(dòng)作(Action)At。下面的地球代表我們要研究的環(huán)境,它有自己的狀態(tài)模型,我們選擇了動(dòng)作 At 后,環(huán)境的狀態(tài)(State)會變,我們會發(fā)現(xiàn)環(huán)境狀態(tài)已經(jīng)變?yōu)?St+1,同時(shí)我們得到了我們采取動(dòng)作 At 的延時(shí)獎(jiǎng)勵(lì)(Reward)Rt+1。然后個(gè)體可以繼續(xù)選擇下一個(gè)合適的動(dòng)作,然后環(huán)境的狀態(tài)又會變,又有新的獎(jiǎng)勵(lì)值。。。這就是強(qiáng)化學(xué)習(xí)的思路。

  那么我們可以整理下這個(gè)思路里面出現(xiàn)的強(qiáng)化學(xué)習(xí)要素。

  第一個(gè)是環(huán)境的狀態(tài) S, t 時(shí)刻環(huán)境的狀態(tài) St 是它的環(huán)境狀態(tài)集中某一個(gè)狀態(tài)。

  第二個(gè)是個(gè)體的動(dòng)作 A, t 時(shí)刻個(gè)體采取的動(dòng)作 At 是它的動(dòng)作集中某一個(gè)動(dòng)作。

  第三個(gè)是環(huán)境的獎(jiǎng)勵(lì) R,t 時(shí)刻個(gè)體在狀態(tài) St 采取的動(dòng)作 At 對應(yīng)的獎(jiǎng)勵(lì)Rt+1 會在 t+1 時(shí)刻得到。

  下面是稍復(fù)雜一些的模型要素。

 第四個(gè)是個(gè)體的策略(policy)π,它代表個(gè)體采取動(dòng)作的依據(jù),即個(gè)體會依據(jù)策略 π 來選擇動(dòng)作。最常見的策略表達(dá)方式是一個(gè)條件分布 π(a|s), 即在狀態(tài) s 時(shí)采取動(dòng)作 a 的概率。即 π(a|s)=P(At=a|St=s).此時(shí)概率大的動(dòng)作被個(gè)體選擇的概率較高。

  第五個(gè)是個(gè)體在策略 π 和狀態(tài) s 時(shí),采取行動(dòng)后的價(jià)值(value),一般用 vπ(s)表示。這個(gè)價(jià)值一般是一個(gè)期望函數(shù)。雖然當(dāng)前動(dòng)作會給一個(gè)延時(shí)獎(jiǎng)勵(lì)Rt+1,但是光看這個(gè)延時(shí)獎(jiǎng)勵(lì)是不行的,因?yàn)楫?dāng)前的延時(shí)獎(jiǎng)勵(lì)高,不代表到了t+1,t+2,...時(shí)刻的后續(xù)獎(jiǎng)勵(lì)也高。比如下象棋,我們可以某個(gè)動(dòng)作可以吃掉對方的車,這個(gè)延時(shí)獎(jiǎng)勵(lì)是很高,但是接著后面我們輸棋了。此時(shí)吃車的動(dòng)作獎(jiǎng)勵(lì)值高但是價(jià)值并不高。因此我們的價(jià)值要綜合考慮當(dāng)前的延時(shí)獎(jiǎng)勵(lì)和后續(xù)的延時(shí)獎(jiǎng)勵(lì)。價(jià)值函數(shù) vπ(s)一般可以表示為下式,不同的算法會有對應(yīng)的一些價(jià)值函數(shù)變種,但思路相同。:

 vπ(s)=?π(Rt+1+γRt+2+γ2Rt+3+...|St=s)

  其中 γ 是第六個(gè)模型要素,即獎(jiǎng)勵(lì)衰減因子,在[0,1]之間。如果為 0,則是貪婪法,即價(jià)值只由當(dāng)前延時(shí)獎(jiǎng)勵(lì)決定,如果是 1,則所有的后續(xù)狀態(tài)獎(jiǎng)勵(lì)和當(dāng)前獎(jiǎng)勵(lì)一視同仁。大多數(shù)時(shí)候,我們會取一個(gè) 0 到 1 之間的數(shù)字,即當(dāng)前延時(shí)獎(jiǎng)勵(lì)的權(quán)重比后續(xù)獎(jiǎng)勵(lì)的權(quán)重大。

  第七個(gè)是環(huán)境的狀態(tài)轉(zhuǎn)化模型,可以理解為一個(gè)概率狀態(tài)機(jī),它可以表示為一個(gè)概率模型,即在狀態(tài) s 下采取動(dòng)作 a,轉(zhuǎn)到下一個(gè)狀態(tài) s′的概率,表示為Pass′。

  第八個(gè)是探索率 ?,這個(gè)比率主要用在強(qiáng)化學(xué)習(xí)訓(xùn)練迭代過程中,由于我們一般會選擇使當(dāng)前輪迭代價(jià)值最大的動(dòng)作,但是這會導(dǎo)致一些較好的但我們沒有執(zhí)行過的動(dòng)作被錯(cuò)過。因此我們在訓(xùn)練選擇最優(yōu)時(shí),會有一定的概率 ? 不選擇使當(dāng)前輪迭代價(jià)值最大的動(dòng)作,而選擇其他的動(dòng)作。

  以上 8 個(gè)就是強(qiáng)化學(xué)習(xí)模型的基本要素了。當(dāng)然,在不同的強(qiáng)化學(xué)習(xí)模型中,會考慮一些其他的模型,或者不考慮上述要素的某幾個(gè),但是這 8 個(gè)是大多數(shù)強(qiáng)化學(xué)習(xí)模型的基本要素。

 3. 強(qiáng)化學(xué)習(xí)的簡單實(shí)例

  這里給出一個(gè)簡單的強(qiáng)化學(xué)習(xí)例子 Tic-Tac-Toe。這是一個(gè)簡單的游戲,在一個(gè) 3x3 的九宮格里,兩個(gè)人輪流下,直到有個(gè)人的棋子滿足三個(gè)一橫一豎或者一斜,贏得比賽游戲結(jié)束,或者九宮格填滿也沒有人贏,則和棋。

  這個(gè)例子的完整代碼在我的 github。例子只有一個(gè)文件,很簡單,代碼首先會用兩個(gè)電腦選手訓(xùn)練模型,然后可以讓人和機(jī)器對戰(zhàn)。當(dāng)然,由于這個(gè)模型很簡單,所以只要你不亂走,最后的結(jié)果都是和棋,當(dāng)然想贏電腦也是不可能的。

 我們重點(diǎn)看看這個(gè)例子的模型,理解上面第二節(jié)的部分。如何訓(xùn)練強(qiáng)化學(xué)習(xí)模型可以先不管。代碼部分大家可以自己去看,只有 300 多行。

  首先看第一個(gè)要素環(huán)境的狀態(tài) S。這是一個(gè)九宮格,每個(gè)格子有三種狀態(tài),即沒有棋子(取值 0),有第一個(gè)選手的棋子(取值 1),有第二個(gè)選手的棋子(取值-1)。那么這個(gè)模型的狀態(tài)一共有 19683 個(gè)。

  接著我們看個(gè)體的動(dòng)作 A,這里只有 9 個(gè)格子,每次也只能下一步,所以最多只有 9 個(gè)動(dòng)作選項(xiàng)。實(shí)際上由于已經(jīng)有棋子的格子是不能再下的,所以動(dòng)作選項(xiàng)會更少。實(shí)際可以選擇動(dòng)作的就是那些取值為 0 的格子。

  第三個(gè)是環(huán)境的獎(jiǎng)勵(lì) R,這個(gè)一般是我們自己設(shè)計(jì)。由于我們的目的是贏棋,所以如果某個(gè)動(dòng)作導(dǎo)致的改變到的狀態(tài)可以使我們贏棋,結(jié)束游戲,那么獎(jiǎng)勵(lì)最高,反之則獎(jiǎng)勵(lì)最低。其余的雙方下棋動(dòng)作都有獎(jiǎng)勵(lì),但獎(jiǎng)勵(lì)較少。特別的,對于先下的棋手,不會導(dǎo)致結(jié)束的動(dòng)作獎(jiǎng)勵(lì)要比后下的棋手少。

 # give reward to two players

 def giveReward(self):

 if self.currentState.winner == self.p1Symbol:

 self.p1.feedReward(1)

 self.p2.feedReward(0)

 elif self.currentState.winner == self.p2Symbol:

 self.p1.feedReward(0)

 self.p2.feedReward(1)

 else:

 self.p1.feedReward(0.1)

 self.p2.feedReward(0.5)

  第四個(gè)是個(gè)體的策略(policy)π,這個(gè)一般是學(xué)習(xí)得到的,我們會在每輪以較大的概率選擇當(dāng)前價(jià)值最高的動(dòng)作,同時(shí)以較小的概率去探索新動(dòng)作,在這里AI 的策略如下面代碼所示。

  里面的 exploreRate 就是我們的第八個(gè)要素探索率 ?。即策略是以 1−? 的概率選擇當(dāng)前最大價(jià)值的動(dòng)作,以 ? 的概率隨機(jī)選擇新動(dòng)作。

  # determine next action

 def takeAction(self):

 state = self.states[-1]

 nextStates = []

 nextPositions = []

 for i in range(BOARD_ROWS):

 for j in range(BOARD_COLS):

 if state.data[i, j] == 0:

 nextPositions.append([i, j])

 nextStates.append(state.nextState(i, j, self.symbol).getHash())

 if np.random.binomial(1, self.exploreRate):

 np.random.shuffle(nextPositions)

 # Not sure if truncating is the best way to deal with exploratory step

 # Maybe it"s better to only skip this step rather than forget all the history

 self.states = []

 action = nextPositions[0]

 action.append(self.symbol)

 return action

  values = []

 for hash, pos in zip(nextStates, nextPositions):

 values.append((self.estimations[hash], pos))

 np.random.shuffle(values)

 values.sort(key=lambda x: x[0], reverse=True)

 action = values[0][1]

 action.append(self.symbol)

 return action

  第五個(gè)是價(jià)值函數(shù),代碼里用 value 表示。價(jià)值函數(shù)的更新代碼里只考慮了當(dāng)前動(dòng)作的現(xiàn)有價(jià)值和得到的獎(jiǎng)勵(lì)兩部分,可以認(rèn)為我們的第六個(gè)模型要素衰減因子 γ 為 0。具體的代碼部分如下,價(jià)值更新部分的代碼加粗。具體為什么會這樣更新價(jià)值函數(shù)我們以后會講。

 # update estimation according to reward

 def feedReward(self, reward):

 if len(self.states) == 0:

 return

 self.states = [state.getHash() for state in self.states]

 target = reward

 for latestState in reversed(self.states):

 value = self.estimations[latestState] + self.stepSize * (target - self.estimations[latestState])

 self.estimations[latestState] = value

 target = value

 self.states = []

 第七個(gè)是環(huán)境的狀態(tài)轉(zhuǎn)化模型, 這里由于每一個(gè)動(dòng)作后,環(huán)境的下一個(gè)模型狀態(tài)是確定的,也就是九宮格的每個(gè)格子是否有某個(gè)選手的棋子是確定的,因此轉(zhuǎn)化的概率都是 1,不存在某個(gè)動(dòng)作后會以一定的概率到某幾個(gè)新狀態(tài),比較簡單。

  從這個(gè)例子,相信大家對于強(qiáng)化學(xué)習(xí)的建模會有一個(gè)初步的認(rèn)識了。

  以上就是強(qiáng)化學(xué)習(xí)的模型基礎(chǔ),下一篇會討論馬爾科夫決策過程。

相關(guān)熱詞搜索:學(xué)習(xí) 模型 增強(qiáng)

版權(quán)所有 蒲公英文摘 www.newchangjing.com