日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人工智能 > ChatGpt >内容正文

ChatGpt

马里奥AI实现方式探索 ——神经网络+增强学习

發(fā)布時間:2024/8/26 ChatGpt 57 豆豆
生活随笔 收集整理的這篇文章主要介紹了 马里奥AI实现方式探索 ——神经网络+增强学习 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.




首先,對于實現(xiàn)馬里奧AI當中涉及到的神經(jīng)網(wǎng)絡和增強學習的相關概念進行整理,之后對智能通關的兩種方式進行闡述。(本人才疏學淺,在神經(jīng)網(wǎng)絡和增強學習方面基本門外漢,如有任何紕漏,還請大神指出,我會第一時間改正。)

神經(jīng)網(wǎng)絡

像飛機的靈感來源于鳥類,雷達的靈感來源于蝙蝠,紅外線的靈蓋來源于蛇,而本文要討論的神經(jīng)網(wǎng)絡靈感來源于我們自己,人類大腦的神經(jīng)元結構。從神經(jīng)元結構被提出,到時下火熱的無以復加的深度神經(jīng)網(wǎng)絡,發(fā)展過程也可為一波三折。我們按照時間的順序,對一些經(jīng)典的神經(jīng)網(wǎng)絡模型進行整理:

M-P模型

40年代初心理學家 W.W.Mcculloch 和梳理邏輯家 W.Pitts 提出 M-P 模型(為啥叫M-P模型,看看這兩位大牛的名字,也不考慮下我們非英語系國家人民的感受。。。),神經(jīng)網(wǎng)絡被引入到計算機領域當中,其最初起源的靈感就是人類大腦中的神經(jīng)元,如下圖:
?


生物學上具體的專業(yè)術語我們這里不展開描述,我們總結一下神經(jīng)元結構的特點:
?

  • 每個神經(jīng)元都是一個多輸入單輸出的信息處理單元;
  • 神經(jīng)元輸入分興奮性輸入和抑制性輸入兩種類型;
  • 神經(jīng)元具有空間整合特性和閾值特性;
  • 神經(jīng)元輸入與輸出間有固定的時滯,主要取決于突觸延擱。


由此兩位大牛提出了神經(jīng)網(wǎng)絡的早期M-P模型,如下圖:
?


該模型的基本思想很簡單,就是仿照神經(jīng)元接受多個輸入信號,由于突觸的性質和突觸強度不同,所以對神經(jīng)元的影響程度不同,我們加上了權重的概念,其正負模擬了神經(jīng)元中的興奮和抑制作用,最后所有信號累加整合,其值為:
?


輸入信號有了,神經(jīng)元是否被激活,要看輸入信號是否超過了某一閾值電位,如果被激活神經(jīng)元輸出脈沖,否則神經(jīng)元不會輸出信號,其過程如下函數(shù):
?


當然這里我們也可以寫成矩陣的形式

類似神經(jīng)元結構的特點,經(jīng)典的M-P模型的特點可以總結如下:

1.每個神經(jīng)元都是一個多輸入單輸出的信息處理單元;

2.神經(jīng)元輸入分興奮性輸入和抑制性輸入兩種類型;

3.神經(jīng)元具有空間整合特性和閾值特性;

4.神經(jīng)元輸入與輸出間有固定的時滯,主要取決于突觸延擱;

5.忽略時間整合作用和不應期;

6.神經(jīng)元本身是非時變的,即其突觸時延和突觸強度均為常數(shù)。(神經(jīng)網(wǎng)絡中權重在訓練結束后是固定的)

結合兩個公式來看這幾個特點:對于特點1,我們的公式有多個x輸入信號,但我們的輸出信號只有一個o;權重的正負體現(xiàn)了特點2中輸入分興奮和抑制;對于第3個特點,我們第2個公式中只有當輸入信號的累加和超出電位閾值才會有輸出;另外我們的公式只考慮了所有輸入信號的整合,并沒有去考慮時間整合(就是不管你信號早到晚到,只要到了都是好信號),體現(xiàn)了特性4和5。

隨著M-P模型的提出,神經(jīng)網(wǎng)絡的研究有三次興起,最近的一次就是隨著卷積神經(jīng)網(wǎng)絡提出的深度學習的火熱。

早期神經(jīng)網(wǎng)絡

M-P模型很簡單,僅僅是一種單個神經(jīng)元上的建模,并沒有形成網(wǎng)絡,沒法去完成一些特定的任務。由此人們提出了神經(jīng)網(wǎng)絡的概念,而早期的研究,由于當時硬件水平和計算條件的限制,神經(jīng)網(wǎng)絡結構一般比較簡單。

兩層神經(jīng)網(wǎng)絡

由此1958年,計算科學家Rosenblatt提出了由兩層神經(jīng)元組成的神經(jīng)網(wǎng)絡。他給它起了一個名字“感知器”(Perceptron)

其結構如下圖:
?


這種簡單的單層神經(jīng)網(wǎng)絡有點類似于邏輯回歸,通過簡單的權重訓練,能夠處理簡單的線性分類問題,類似下圖:
?


而對于非線性的分類問題(如經(jīng)典的異或問題)卻無能為力,后來研究人員也發(fā)現(xiàn)了這一點,神經(jīng)網(wǎng)絡研究遍進入了低谷期(好傷心TT)

三層神經(jīng)網(wǎng)絡(帶有隱層)

問題總是用來解決的嘛,既然兩層神經(jīng)網(wǎng)絡hold不住非線性分類問題,那么我們就加一層,稱為隱含層,由此而來的三層神經(jīng)網(wǎng)絡如下圖:
?


這種三層神經(jīng)網(wǎng)絡具有非常好的非線性分類效果,其計算公式如下:
?


當然啦,就像我們平時的邏輯回歸模型一樣,bias在模型中是必不可少的,所以我們在原有結構上加入偏置節(jié)點,結構圖如下:
?


神經(jīng)網(wǎng)絡中偏置節(jié)點是默認存在的,而且它非常特殊,就是沒有輸入,并且會輸出的后一層的所有節(jié)點。加入偏置節(jié)點后計算公式如下:(一般情況下,偏置節(jié)點不會被畫出來)
?


與兩層神經(jīng)網(wǎng)絡不同,理論證明三層神經(jīng)網(wǎng)絡能夠無限逼近任意連續(xù)函數(shù)。這里我們不禁會有疑問,我們知道兩層神經(jīng)網(wǎng)絡是線性分類問題,那么兩個線性問題拼在一起為什么就可以解決非線性分類問題了呢?
?


上圖很好的解釋了我們的疑問。首先上圖左側部分可以看出,三層神經(jīng)網(wǎng)絡的決策分界非常平滑,而且分類的很好。而上圖右側部分展示了該圖經(jīng)過空間變換后的結果,我們可以看到輸出層的決策分界仍然是直線,關鍵是,從輸入層到隱含層時,發(fā)生了空間變換。

也就是說三層神經(jīng)網(wǎng)絡可以做非線性分類的關鍵便是隱含層的加入,通過矩陣和向量相乘,本質做了一次線性變換,使得原先線性不可分的問題變得線性可分。所以多層神經(jīng)網(wǎng)絡本質就是復雜函數(shù)的擬合。

現(xiàn)在三層神經(jīng)網(wǎng)絡結構定了,如何來進行網(wǎng)絡的訓練,這就需要用到反向傳播算法(本質就是梯度下降,還說的這兒玄乎<-T->)

BP算法

上面我們提到兩層神經(jīng)網(wǎng)絡,其中隱層的權值是需要我們學習的,而這個權值我們不能直接獲取,所以我們利用輸出層得到輸出結果和期望輸出的誤差來間接調整隱層的權值。BP算法的學習過程由信號的正向傳播和誤差的反向傳播兩個過程組成。
?

  • 正向傳播時,輸入樣本從輸入層傳入,經(jīng)各隱層逐層處理后,傳向輸出層。若輸出層的實際輸出與期望的輸出(教師信號)不符,則轉入誤差的反向傳播階段。
  • 反向傳播時,買QQ賬號將輸出以某種形式通過隱層向輸入層逐層反傳,并將誤差分攤給各層的所有單元,從而獲得各層單元的誤差信號,此誤差信號即作為修正各單元權值的依據(jù)。


下圖展示了整個BP算法的信號流程圖:
?


BP網(wǎng)絡有三個要素:

1.網(wǎng)絡拓撲結構

2.傳遞函數(shù)

3.學習算法

網(wǎng)絡拓撲結構便是我們之前總結的兩層神經(jīng)網(wǎng)絡結構,我們主要從傳遞函數(shù)和學習算法進行整理闡述下。

傳遞函數(shù)

首先什么是傳遞函數(shù)呢?請看下圖:
?


圖中是最基本的單個神經(jīng)元的模型,針對于多個輸入,我們會進行整合并利用一個非線性函數(shù)進行輸出,函數(shù)的要求必須是可微單調遞增函數(shù),通常采用非線性變換函數(shù)———sigmoid函數(shù)也稱S函數(shù)(形狀),有單極性S型函數(shù)和雙極性S型函數(shù)兩種(高中數(shù)學里的東東)。

單極性S型函數(shù)定義如下:
?


函數(shù)曲線圖如下(似乎不夠S。。)
?


雙極性S型函數(shù)定義如下:
?


函數(shù)曲線圖如下:
?


可以看出根據(jù)上面的S函數(shù),我們會整合所有輸入,輸出一個新的值,從之前生物學的原理來看也就是說神經(jīng)元是否被激活。

學習算法

學習算法是BP神經(jīng)網(wǎng)絡結構的核心,也是兩層神經(jīng)網(wǎng)絡有一次興起的重要原因,因為人們找到了如何去訓練一個神經(jīng)網(wǎng)絡來達到我們預期的分類效果(擬合不同的非線性連續(xù)函數(shù))。而BP算法(反向傳播算法)的本質其實就是一種逐層梯度下降。

我們以三層感知器為例,當網(wǎng)絡輸出與期望輸出不一致時,存在誤差E,定義如下:
?


將以上誤差反向逐層展開(體現(xiàn)了反向傳播算法中的反向含義)
?


最終我們展開到輸入層如下:
?


根據(jù)上式我們發(fā)現(xiàn)誤差E是?

?的函數(shù),我們發(fā)現(xiàn)調整權值可以改變誤差E的大小,而調整權值的原則是使得誤差不斷減小。因此我們應該使得權值與誤差的梯度下降成正比,如下:
?


其中值得注意的是?

?表示學習效率,即權重調整的幅度。

我們可以看出對于權重的調整是從輸出層逐層反傳過來的,而且我們也發(fā)現(xiàn)我們在梯度下降的過程中需要求導,這也就是我們在最初要求傳遞函數(shù)可微的原因

深度神經(jīng)網(wǎng)絡

有三層神經(jīng)網(wǎng)絡,我們自然而然就會想到將神經(jīng)網(wǎng)絡加入更多層,擴展到深度神經(jīng)網(wǎng)絡,但是一個非常顯著的問題就是參數(shù)的個數(shù),比如之前我們的三層神經(jīng)網(wǎng)絡每層有1000個節(jié)點,那么我們需要調整的權值參數(shù)就達到了10^9量級,這問題限制了很大程度上限制了深度神經(jīng)網(wǎng)絡的發(fā)展。這就要把大哥叫出來幫忙了,就是近期一直火熱的deep learning,由于本人在這方面也是門外漢,只從經(jīng)典的卷積神經(jīng)網(wǎng)絡(CNN)進行一些歸納整理。

CNN的解決之道

根據(jù)網(wǎng)上的資料總結,CNN的核心點有三個:

局部感知:形象地說,就是模仿你的眼睛,想想看,你在看東西的時候,目光是聚焦在一個相對很小的局部的吧?嚴格一些說,普通的多層神經(jīng)網(wǎng)絡,隱層節(jié)點會全連接到一個圖像的每個像素點上,而在卷積神經(jīng)網(wǎng)絡中,每個隱層節(jié)點只連接到圖像某個足夠小局部的像素點上,從而大大減少需要訓練的權值參數(shù)。我們用兩張對比圖來說明下:
?



從圖中我們可以看出,對于一張1000×1000像素的圖片,假設神經(jīng)網(wǎng)絡中的隱節(jié)點有1M個。對于傳統(tǒng)的深度神經(jīng)網(wǎng)絡,所有的隱節(jié)點會連接到圖像中的每個像素點,那么我們需要訓練的權重參數(shù)就達到了匪夷所思的10^12量級。而CNN提出局部感知,即圖中右側展示的,每個神經(jīng)元只與10×10個像素值相連,那么我們的權重參數(shù)就下降到10^8,參數(shù)數(shù)量為原來的萬分之一(雖然還是很多TT)

權值共享:形象地說,就如同你的某個神經(jīng)中樞中的神經(jīng)細胞,它們的結構、功能是相同的,甚至是可以互相替代的。局部感知的方式在一定程度上減少了參數(shù),那么另一個減少參數(shù)的神器便是權值共享。在上面我們提到的局部感知的例子中,對于1M個神經(jīng)元,每個神經(jīng)元需要局部感知10×10個像素點,那么參數(shù)個數(shù)是100×1M個,那么如果我們在這里假設每個神經(jīng)元的權重參數(shù)都是相同的,那么我們的參數(shù)個數(shù)就會驟減到100個,很夸張對不拉,做到這一步的神器便是卷積操作。

權值共享基于的原理或者說假設是圖像中局部的統(tǒng)計特征與其他部分是一樣的,也就意味著假設我們在圖像的局部學習到了一組特征,那么我們可以直接將這組特征應用到圖像的其它部分。就拿上面的例子來看,我們假設在第一個神經(jīng)元中學習到了局部10×10像素點的特征,那么我們完全可以將這個特征應用在圖像的其他位置上,那么我們另外的1M-1的神經(jīng)元權重參數(shù)就不需要訓練了,所以我們只需要訓練第一個神經(jīng)元的權重參數(shù)即可,而這第一個神經(jīng)元得到的局部特征稱為卷積核。當然啦,我們不會這么變態(tài)的只用一個卷積核,這樣對于圖像特征的提取也是不充分的,所以往往CNN中都會有多個卷積核來進行卷積操作,每個卷積核會提取出圖像某一方面的特征。如下圖展示了卷積操作的基本原理:
?


圖中展示了一個3×3的卷積核在5×5的圖像上做卷積的過程。每個卷積都是一種特征提取方式,就像一個篩子,將圖像中符合條件(激活值越大越符合條件)的部分篩選出來。

池化:形象地說,你先隨便看向遠方,然后閉上眼睛,你仍然記得看到了些什么,但是你能完全回憶起你剛剛看到的每一個細節(jié)嗎?不能(也沒必要),我們通常會提取整個圖像中一些關鍵的點作為一種“映像”放到腦海中。同樣,在卷積神經(jīng)網(wǎng)絡中,通過卷積獲得了特征之后,下一步我們需要利用這些特征去做分類,當然我們可以利用所有這些特征去做分類(如softmax分類器),但同樣的這里又會遇到我們的老問題,計算量過大。所以,在進行分類之前,我們利用人類判別圖片記錄關鍵特征的原理,同樣在處理卷積層輸出的特征時,我們也可以做一些“壓縮”或者說提取處理,這種方法被稱為池化(Down-pooling)。以最大池化(Max Pooling)為例,1000×1000的圖像經(jīng)過10×10的卷積核卷積后,得到的是991×991的特征圖(參考上圖5×5圖像經(jīng)過卷及操作變成了3×3的圖像),然后使用2×2的池化規(guī)模,即每4個點組成的小方塊中,取最大的一個作為輸出,最終得到的是496×496大小的特征圖。池化得原理我們可以用下圖形象的說明:
?


CNN整體結構

上面我們從CNN的三個核心點出發(fā),闡述了CNN的基本原理,下圖我們列出了CNN的整體結構:
?


圖中從左至右描述了CNN神經(jīng)網(wǎng)絡的幾個不同層

輸入層(圖像):在CNN神經(jīng)網(wǎng)絡的輸入當中,一般為了減少復雜度,往往采用灰度化后的圖像作為輸入,而如果使用RGB的彩色圖像,那么輸入會分為RGB三個分量圖像。輸入圖像一般都需要歸一化,常規(guī)的可以使用我們前面闡述的sigmoid函數(shù),歸一化到[0,1],如果使用tanh激活函數(shù),則歸一化到[-1, 1]。這一部分我們涉及到了我們上面闡述的局部感知的方式來減少參數(shù)。

多個卷積(C)-下采樣(S)層:將上一層的輸出與本層權重W做卷積得到各個C層,然后下采樣得到各個S層,這一部分主要涉及了我們上面闡述的三個核心點中的卷積和池化操作,而這些層的輸出稱為Feature Map。

光柵化(X):是為了與傳統(tǒng)的多層感知器全連接。即將上一層的所有Feature Map的每個像素依次展開,排成一列。

傳統(tǒng)的多層感知器(N&O):最后的分類器一般使用Softmax,如果是二分類,當然也可以使用邏輯回歸LR。

至此關于CNN的基本原理基本闡述完畢啦,關于CNN的參數(shù)訓練等內容這里不再贅述,可以參考Deep learning:五十一(CNN的反向求導及練習)

總結

~長出一口氣~,從最一開始單個神經(jīng)元模型的提出,到兩層和三層的簡單神經(jīng)網(wǎng)絡,再到時下火熱的深度學習,我們可以用下圖從時間上進行一個大致的梳理:
?


我們可以看到,神經(jīng)網(wǎng)絡的發(fā)展經(jīng)歷了三次跌宕起伏:

感知器:第一次興起的研究點便是科研人員利用兩層神經(jīng)網(wǎng)絡(起了個玄乎的名字感知器)進行了簡單的分類問題,當時的人們大呼找到了人工智能的奧秘,從而興起了對神經(jīng)網(wǎng)絡的研究,但是隨著眾多學者發(fā)現(xiàn)兩層感知器只能完成最簡單的線性分類問題,對于經(jīng)典的異或分類問題都無法完成時,神經(jīng)網(wǎng)絡陷入低谷。

BP算法:第二次興起的關鍵點便是BP算法的提出,當人們發(fā)現(xiàn)兩層神經(jīng)網(wǎng)絡無法勝任非線性分類問題時,已經(jīng)想到了增加神經(jīng)網(wǎng)絡層數(shù),但是隨著網(wǎng)絡層數(shù)的增加,權重參數(shù)如何訓練的問題無法解決,直到BP反向傳播算法的提出,解決了這一問題,從而發(fā)生了神經(jīng)網(wǎng)絡的又一次興起。但是隨之而來的其它算法,如SVM,等算法的提出,人們發(fā)現(xiàn)這些算法的通用性和可計算性都優(yōu)于神經(jīng)網(wǎng)絡,神經(jīng)網(wǎng)絡進入到了第二次低谷。

深度學習:第三次興起的關鍵點便是時下火熱的深度學習了,它的標致之一便是CNN卷積神經(jīng)網(wǎng)絡的提出,將它用于圖像分類問題當中(當然了這也離不開硬件水平的提高,比如高并行的GPU誕生)。

而對于每次神經(jīng)網(wǎng)絡可解決的問題,我們可以用下圖來闡述:
?


上圖中我們可以看出,隨著神經(jīng)網(wǎng)絡的發(fā)展,我們在解決最基本的分類問題時的效果越來越好,這也是神經(jīng)網(wǎng)絡的魅力所在啦^v^。當然在神經(jīng)網(wǎng)絡發(fā)展的過程當中,計算機硬件水平的發(fā)展也是不容忽視的,隨著計算能力和性能的提高,原來不可能實現(xiàn)的想法、算法都能付諸實踐進行試驗。

增強學習

機器學習領域,我們都知道兩位大哥就是監(jiān)督學習和非監(jiān)督學習,我們有樣本X和標記或者未標記的Y,我們通過訓練可以做一些分類或者聚類的任務。但是,對于一些序列決策或者控制問題,是很難得到上面那樣的規(guī)則樣本的,比如機器人的控制問題,決策機器人下一步該怎么走,那么這時我們就需要清楚另外一位大哥——增強學習,雖然他似乎曝光度并不是很高,那么何謂增強學習呢?

增強學習(Reinforcement Learning, RL),其英文定義如下:

Reinforcement learning is learning what to do ----how to map situations to actions ---- so as to maximize a numerical reward signal.[6]

也就是說增強學習關注的是智能體如何在環(huán)境中采取一系列行為,從而獲得最大的累積回報。

通過增強學習,一個智能體(agent)應該知道在什么狀態(tài)下應該采取什么行為。RL是從環(huán)境狀態(tài)到動作的映射的學習,我們把這個映射稱為策略。

馬爾可夫決策過程(MDP)

一提到馬爾科夫,大家通常會立刻想起馬爾可夫鏈(Markov Chain)以及機器學習中更加常用的隱式馬爾可夫模型(Hidden Markov Model, HMM)。它們都具有共同的特性便是馬爾可夫性:當一個隨機過程在給定現(xiàn)在狀態(tài)及所有過去狀態(tài)情況下,其未來狀態(tài)的條件概率分布僅依賴于當前狀態(tài);換句話說,在給定現(xiàn)在狀態(tài)時,它與過去狀態(tài)(即該過程的歷史路徑)是條件獨立的,那么此隨機過程即具有馬爾可夫性質。具有馬爾可夫性質的過程通常稱之為馬爾可夫過程。[7]

之后我們便來說說馬爾可夫決策過程(Markov Decision Process),其也具有馬爾可夫性,與上面不同的是MDP考慮了動作,即系統(tǒng)下個狀態(tài)不僅和當前的狀態(tài)有關,也和當前采取的動作有關。

用表格描述馬爾可夫各個模型的關系(摘自[8])
?


基本定義

一個馬爾可夫決策過程由五元組組成?


?

  • S:表示狀態(tài)集(states)
  • A:表示一系列動作(actions)
  • ?:表示狀態(tài)轉移概率。?

    ?表示的是在當前s ∈ S狀態(tài)下,經(jīng)過a ∈ A作用后,會轉移到的其他狀態(tài)的概率分布情況。比如,在狀態(tài)s下執(zhí)行動作a,轉移到s'的概率可以表示為p(s'|s,a)。
  • ?(dicount factor):表示阻尼系數(shù)[0,1)
  • R:?

    ?,表示回報函數(shù)(reward function)


MDP 的動態(tài)過程如下:某個智能體(agent)的初始狀態(tài)為s0,然后從 A 中挑選一個動作a0執(zhí)行,執(zhí)行后,agent 按?

?概率隨機轉移到了下一個s1狀態(tài),s1∈?



。然后再執(zhí)行一個動作a1,就轉移到了s2,接下來再執(zhí)行a2…,我們可以用下面的圖表示狀態(tài)轉移的過程。
?


如果回報r是根據(jù)狀態(tài)s和動作a得到的,則MDP還可以表示成下圖:
?


值函數(shù)

上面我們給出了MDP的定義,作為一個智能體(agent),當它在決定下一步應該走什么時,最簡單的方式就是看下Reward函數(shù)的值是多少,即比較走不同動作的回報,從而做出決定。但是就像下棋的時候,我們每走一步都會向后考慮,所謂“走一步看三步”,所以這里我們只看一步即一次Reward函數(shù)是不夠的,這就引出了值函數(shù)(Value Function)也叫折算累積回報(discounted cumulative reward)。

狀態(tài)值函數(shù)(state value function)

當我們遵循某個策略?

?,我們將值函數(shù)定義如下:
?


我們將上面的式子寫作遞推的樣子如下:
?


另外當策略?

?,在狀態(tài)s時,我們可以確定唯一的動作a,但是s經(jīng)過動作a會進入哪個狀態(tài)是不唯一的,比如同樣是擲骰子操作,可能得到的狀態(tài)有6種,那么利用Bellman等式我們便可以得到下面的公式:
?


再根據(jù)我們最初增強學習的目的,我們便可以得出,求V的目的就是想找到一個當前狀態(tài)s下,最優(yōu)的行動策略?

?,表示如下:
?


動作值函數(shù)(action value function)

上面我們的值函數(shù)的只與狀態(tài)s有關,如果與狀態(tài)s和動作a都有關,便稱為動作值函數(shù),即所謂的Q函數(shù),如下:
?


從上式我們可以看出,我們不僅僅依賴狀態(tài)s和策略?

?,并且還依賴于動作a。

綜上我們可以將MDP的最優(yōu)策略定義如下:
?


關于MDP的求解主要分為值迭代和策略迭代,分別站在不同的角度對MDP進行求解,這里我們不在贅述,網(wǎng)上有很多相關資料。下面我們簡單闡述下動作值函數(shù)的值迭代求解方式,即所謂的Q-learning

Q學習

Q學習的基本迭代公式如下:
?


從公式中我們也可以看出它是一種值迭代方式,因為我們每次更新的是Q函數(shù)的值,而非策略。簡單起見,整理一個簡單的例子加以說明。

假設我們有這樣一個房間:
?


我們的目的是訓練一個機器人,使得它在圖中的任意一個房間都能夠到達房間外。

OK,我們對房間進行建模:
?


并得到reward矩陣:
?


通過一下過程的迭代我們最終得出了我們的結果Q矩陣
?


可以看出,我們的機器人現(xiàn)在無論在哪個房間,都可以利用我們的Q矩陣順利的走到屋外。

噗噗噗,終于寫到這里了,綜上我們將馬里奧只能AI需要用到的算法簡單整理了下(如有任何謬誤請指出^v^)。下面我們結合兩種成熟的算法,歸納整理馬里奧AI的兩種實現(xiàn)方式。

基于NEAT算法的馬里奧AI實現(xiàn)

所謂NEAT算法即通過增強拓撲的進化神經(jīng)網(wǎng)絡(Evolving Neural Networks through Augmenting Topologies),算法不同于我們之前討論的傳統(tǒng)神經(jīng)網(wǎng)絡,它不僅會訓練和修改網(wǎng)絡的權值,同時會修改網(wǎng)絡的拓撲結構,包括新增節(jié)點和刪除節(jié)點等操作。

NEAT算法幾個核心的概念是:
?

  • 基因:網(wǎng)絡中的連接
  • 基因組:基因的集合
  • 物種:一批具有相似性基因組的集合
  • Fitness:有點類似于增強學習中的reward函數(shù)
  • generation:進行一組訓練的基因組集合,每一代訓練結束后,會根據(jù)fitness淘汰基因組,并且通過無性繁殖和有性繁殖來新增新的基因組
  • 基因變異:發(fā)生在新生成基因組的過程中,可能會出現(xiàn)改變網(wǎng)絡的權重,增加突出連接或者神經(jīng)元,也有可能禁用突觸或者啟用突觸


下圖我們展示了算法從最一開始簡單的神經(jīng)網(wǎng)絡,一直訓練到后期的網(wǎng)絡
?


利用NEAT算法實現(xiàn)馬里奧的只能通關的基本思想便是,利用上面NEAT算法的基本觀點,從游戲內存中獲取實時的游戲數(shù)據(jù),判斷馬里奧是否死忙、計算Fitness值、判斷馬里奧是否通關等,從而將這些作為神經(jīng)網(wǎng)絡的輸入,最后輸出對馬里奧的操作,包括上下左右跳躍等操作,如下圖:
?


大多數(shù)該算法實現(xiàn)馬里奧的智能通關都依賴于模擬器,運用lua語言編寫相應腳本,獲取游戲數(shù)據(jù)并操作馬里奧。NeuroEvolution with MarI/O。實現(xiàn)效果圖如下:
?


基于Deep Reinforcement Learning的馬里奧AI實現(xiàn)

NEAT算法是相對提出較早的算法,在2013年大名鼎鼎的DeepMind提出了一種深度增強學習的算法,該算法主要結合了我們上面討論的CNN和Q-Learning兩種算法,DeepMind的研究人員將該算法應用在Atari游戲機中的多種小游戲中進行AI通關。

其基本算法核心便是我們之前介紹的CNN和增強學習的Q-Learning,游戲智能通關的基本流程如下圖:
?


利用CNN來識別游戲總馬里奧的狀態(tài),并利用增強學習算法做出動作選擇,然后根據(jù)新的返回狀態(tài)和歷史狀態(tài)來計算reward函數(shù)從而反饋給Q函數(shù)進行迭代,不斷的訓練直到游戲能夠通關。研究人員在訓練了一個游戲后,將相同的參數(shù)用在別的游戲中發(fā)現(xiàn)也是適用的,說明該算法具有一定的普遍性。下圖反映了一個學習的過程
?


而同樣的方法,將DRL應用在馬里奧上,github上有一個開源的實現(xiàn)方式:aleju/mario-ai

其最終的實現(xiàn)效果圖如下:
?


我們發(fā)現(xiàn)在CNN識別過程中,每4幀圖像,才會進行一次CNN識別,這是識別速率的問題,圖中曲線反映了直接回報函數(shù)和簡介回報函數(shù)。

總結

綜上便是從最基本的神經(jīng)網(wǎng)絡算法+增強學習,到將這些算法用在智能AI上的一些基本整理,長舒一口氣,整理了好久。。。關于智能AI的應用有很多,也跟好多小伙伴討論過,包括智能測試、新式游戲、游戲平衡性調整以及AI機器人的加入。這個領域除了枯燥的理論知識還能玩游戲,想想有點小激動。總結完畢,如有任何紕漏還請指出,我會盡快修改,謝謝^v^。

總結

以上是生活随笔為你收集整理的马里奥AI实现方式探索 ——神经网络+增强学习的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。