機(jī)器學(xué)習(xí)入門——基礎(chǔ)

這是本篇文章是《機(jī)器學(xué)習(xí)入門》系列文章的第一篇,該系列有如下文章:
《機(jī)器學(xué)習(xí)入門——基礎(chǔ)篇》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之監(jiān)督學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之非監(jiān)督學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之深度學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之強(qiáng)化學(xué)習(xí)》

想要入門,就要搞清楚這個(gè)問題,什么是機(jī)器學(xué)習(xí)?其實(shí)這就是讓機(jī)器利用歷史的經(jīng)驗(yàn)去對(duì)目前的事物做出判斷。

可以這么去理解,我們想象一下小盆友成長(zhǎng)的過程,就會(huì)發(fā)現(xiàn),幼兒除了本能,只能在成年人100%的指導(dǎo)下去做事情,而成年人卻會(huì)利用人生的經(jīng)驗(yàn)去指導(dǎo)自己行事,甚至這些經(jīng)驗(yàn)來(lái)自于別人的人生,例如書籍、互聯(lián)網(wǎng)等等,都可以指導(dǎo)我們,不但可以指導(dǎo)我們?nèi)?yīng)對(duì)發(fā)生過的情形,也可以去面對(duì)沒有發(fā)生過的情形,俗話說(shuō)“舉一反三”。

那么放在機(jī)器上,就可以理解成,希望機(jī)器利用歷史的數(shù)據(jù)(就是機(jī)器能夠吸收的“經(jīng)驗(yàn)”)去“學(xué)習(xí)”,從而讓機(jī)器對(duì)后面發(fā)生的情形有一定“自主”應(yīng)對(duì)的能力。當(dāng)然了,如果機(jī)器完全能夠“自主”,并且“舉一反三”,那就是科幻討論的范圍了,不在本文的范圍之中。我們實(shí)際上討論的目標(biāo),是一些相對(duì)于計(jì)算機(jī)編程的“硬編碼”來(lái)說(shuō),帶有一定靈活性的計(jì)算機(jī)算法而已,這些算法可以給機(jī)器帶來(lái)一定的“自主”能力,也就是,機(jī)器學(xué)習(xí)算法。

上面的這段話不算是精確的定義,但是,算一個(gè)形象的介紹,希望我們大家能夠順著這個(gè)思路繼續(xù)探討下去。

既然談?wù)摰接?jì)算機(jī)算法,那么無(wú)可避免的有一大堆計(jì)算機(jī)名詞要出現(xiàn)了,我們先來(lái)簡(jiǎn)單的拋出來(lái)幾個(gè)跟我們的主題相關(guān)度比較高的名詞,監(jiān)督學(xué)習(xí),非監(jiān)督學(xué)習(xí),深度學(xué)習(xí),神經(jīng)網(wǎng)絡(luò),強(qiáng)化學(xué)習(xí),創(chuàng)建模型,訓(xùn)練模型,調(diào)參,評(píng)估效果。大家伙有了這些關(guān)鍵詞,可以去百度直接搜索對(duì)應(yīng)的定義,但是,如果過去不理解的話看了這些定義,基本還是不理解;那么好,我們運(yùn)用“放一放”大法,先把這幾個(gè)概念“放一放”。繼續(xù)討論下去。

怎么進(jìn)行下去呢?借用另一個(gè)高明的舉措,分而治之;也就是說(shuō),我們把這些不好一下子說(shuō)清楚的概念分成小概念,相對(duì)詳實(shí)具體的概念,一個(gè)一個(gè)去理解,最后再綜合起來(lái)看,可能大概念就一下子清晰了。那么,我們就先看一看,監(jiān)督學(xué)習(xí)里面有些個(gè)啥子內(nèi)容。

一 監(jiān)督學(xué)習(xí)

大概窺視一下,光監(jiān)督學(xué)習(xí)里面就有如下名詞:線性回歸,感知器,決策樹,樸素貝葉斯,支持向量機(jī)等。好了,我們就先介紹以上這些名詞吧。

先說(shuō)線性回歸……等下,啥是回歸嘛……一句話告訴你:回歸,就是通過一種算法預(yù)測(cè)出一個(gè)值。簡(jiǎn)單吧,跟小學(xué)算術(shù)的難度差不多。要介紹清楚算法,莫過于舉個(gè)例子,要舉例子,不能沒有圖片:

1-線性回歸-股市大盤.jpg

正如上圖所示,假如我們親愛的股票市場(chǎng)大盤在一月的時(shí)候是2500點(diǎn),而六月左右是3700點(diǎn),那么我們想要知道年底大盤會(huì)是多少點(diǎn),就可以運(yùn)用線性回歸無(wú)腦操作一撥:假設(shè)這個(gè)增長(zhǎng)趨勢(shì)類似一條直線,那么我們就直接推出年底這條直線所在的位置就好啦,那就是接近5000點(diǎn)左右的位置嘛!大家不要在乎圖里面的線直不直,也不要介意股市漲了木有,只說(shuō)線性回歸,這就已經(jīng)預(yù)測(cè)完畢了??傊?,就是用一條直線去預(yù)測(cè)某個(gè)數(shù),這條直線就可以想象成是一個(gè)一元一次的多項(xiàng)式就行了。

過了一關(guān),來(lái)認(rèn)識(shí)第二個(gè)詞,感知器,看到感知二字,好像不明覺厲,計(jì)算機(jī)哪來(lái)的感知嘛?我們談?wù)摰氖怯?jì)算機(jī)算法,不要幻想科幻電影里面跟我們談戀愛的機(jī)器人去感知我們的愛恨情仇了,感知,就是一個(gè)函數(shù),輸入一個(gè)值,輸出一個(gè)值的那種函數(shù),但是,比線性回歸復(fù)雜的地方是,這個(gè)函數(shù)的作用也不是預(yù)測(cè)一個(gè)值,而是把一群事物分開,或者說(shuō),對(duì)于一個(gè)確定的事物,對(duì)于他是不是某一類,給出“是”或者“不是”的答案。舉個(gè)例子,大家在閱讀的這篇文章的作者是不是瘋了?就等于,把我這個(gè)作者分類進(jìn)入到“瘋了”這一類,或者“正?!边@一類,那么,我們就需要一條界限把這兩類人分開,從而也就把我放入了其中一類;剛才提到的那根線就是這個(gè)界限。能上圖就上圖:

2-感知器.jpg

正如上圖所示,假如兩個(gè)維度能夠把正常人和瘋子區(qū)分開,那么我們也許近似的能找到一個(gè)分類的界限,把瘋子和正常人劃分開來(lái)。也許大家都注意到,有個(gè)正常人被分到了瘋子一側(cè),也有一個(gè)瘋子被分到了正常人的一側(cè),怎么解決這個(gè)問題?或者說(shuō)我們這條線擺的位置已經(jīng)是最合適了嗎?這兩個(gè)問題直接引出兩個(gè)大主題,一個(gè)是如何把直線變成曲線……或者,動(dòng)用高維空間,找一個(gè)高位超平面把樣本分開……另一個(gè)主題是誤差分析,后面還要反復(fù)接觸到。此處不做透徹分析。

第三個(gè)詞,決策樹,這個(gè)詞其實(shí)是最形象的一個(gè),因?yàn)樗_實(shí)可以用來(lái)做決策,也因?yàn)樗L(zhǎng)得確實(shí)像一棵樹。啥都別說(shuō)了,上圖:

3-垃圾分類.jpg

如上圖,這是網(wǎng)上盛傳的垃圾分類方法,能不能分清楚垃圾暫且不提,這解決方案本身就是典型的一棵決策樹,為什么是樹,明明是“金字塔”……好吧,老外就把這種圖形叫做樹,估計(jì)是像圣誕樹。關(guān)鍵是,從樹頂開始回答問題,居然可以自然而然完成垃圾分類,沒錯(cuò),這是分類的最古老的一種方法之一,雖然啰嗦,但是行之有效,把這種方法引進(jìn)機(jī)器學(xué)習(xí),就成了決策樹,也就是說(shuō)我們通過一大堆數(shù)據(jù)把這棵樹打造出來(lái),再遇見一個(gè)新的物品,就可以通過這棵樹,找到這個(gè)物品是屬于什么類別,等于讓機(jī)器有了“領(lǐng)悟”歷史數(shù)據(jù),也就是“經(jīng)驗(yàn)”,的能力。順帶著說(shuō)一下,對(duì)于比較復(fù)雜的多維度分類問題,還有好多棵樹一起用的情況,就是隨機(jī)森林,本文先不說(shuō)。

下一個(gè)詞,大boss之一,樸素貝葉斯,要想弄明白這個(gè)詞沒辦法貫徹一圖流,但是也不難,畢竟本文只是入門嘛。先看一個(gè)無(wú)厘頭的問題:“牛頓如果是在樹下坐著被蘋果砸中才發(fā)現(xiàn)了萬(wàn)有引力;那么牛頓發(fā)現(xiàn)了萬(wàn)有引力的情況下,之前被蘋果砸中的概率有多大呢?”是不是有一點(diǎn)繞啊,沒錯(cuò),直覺上居然給人了因果倒置的錯(cuò)覺,貝葉斯大boss的定理難就難在解決這種很繞的問題:知果求因,不求全,求概率!那么如果能求出來(lái)概率,能干啥?分類,還是為了讓計(jì)算機(jī)分類,比如說(shuō):分開垃圾郵件和正常郵件。這個(gè)任務(wù)和貝葉斯有什么關(guān)系,那么請(qǐng)想一想,如果說(shuō)垃圾郵件有很大概率在標(biāo)題和內(nèi)容中都包含某些羞羞的詞,反過來(lái),在標(biāo)題和內(nèi)容中包含那些羞羞的詞的郵件有多大概率是垃圾郵件?這句話繞不繞,像不像牛頓被蘋果砸的那句話,對(duì)了,這就是貝葉斯,想看公式的看一眼:

P(A|B)=P(B|A)*P(A)/P(B)

公式里面的含義,

P(A|B):發(fā)生B的情況下發(fā)生A的概率

P(B|A):發(fā)生A的情況下發(fā)生B的概率

P(A):發(fā)生A的概率

P(B):發(fā)生B的概率

再堅(jiān)持一下,馬上就撐過去了!本文針對(duì)監(jiān)督學(xué)習(xí)介紹的最后一個(gè)詞,支持向量機(jī),如果不是因?yàn)榻榻B了感知器的時(shí)候沒有很好的把瘋子和正常人分開,我都不想說(shuō)支持向量機(jī)的事了,這玩意要想完美入門,還得有點(diǎn)數(shù)學(xué)思維。不過既然要講,我們就學(xué)一點(diǎn)點(diǎn)數(shù)學(xué)。還記得本文在介紹感知器時(shí)候,提過的一句玄幻的話嗎:“或者,動(dòng)用高維空間,找一個(gè)高位超平面把樣本分開”,沒錯(cuò),不懂就上圖:

4-支持向量機(jī)-二維曲線.jpg

這幅圖很簡(jiǎn)單,含義確透漏了一個(gè)大秘密:加入我有這么一組數(shù)字「-2,-1,-0.5,0.5,1,2」我想要的是把整數(shù)和小數(shù)分開,那么在一維軸X上面,需要兩豎著兩條直線才行;而如果在上圖的二維曲線上,只需要橫著一條直線就能吧整數(shù)和小數(shù)分開。這就是著名的“核函數(shù)”大法,名字什么的不重要,老外起名字有時(shí)候也不靠譜,不過這種升維后找超平面的方法值得一學(xué)。至于誤差,因?yàn)閿[放線條的位置有許多選擇,所以誤差也要專門計(jì)算,但是沒有一定的好壞,要綜合的去看待,而且會(huì)涉及到另一個(gè)概念“梯度下降”。

梯度下降,感覺上像是從什么地方下來(lái),沒錯(cuò),就是從誤差之“山”下來(lái),一直下到平地上,也就是沒有“梯度”的地方,從而實(shí)現(xiàn)誤差較小的目的。具體來(lái)說(shuō),上圖:

5-線性回歸誤差.jpg

上圖之中,我們以線性回歸為例,既然是回歸,就是要預(yù)測(cè)出來(lái)一個(gè)值,那么就要先把已有的圖中四個(gè)點(diǎn)用一條直線“串”起來(lái),可是穿不起來(lái)啊,那么只能找一條近似的直線,例如圖中黃線,這就形成了誤差,把每個(gè)點(diǎn)到圖中黃線的距離稱之為誤差,我們就可以把這些誤差一一計(jì)算出來(lái),并且找到誤差最小的時(shí)候。那么,假如通過某種計(jì)算,我們得到了誤差總和,也就有了誤差之“山”,這座山是由于各個(gè)誤差的總和而來(lái),那么我們就可以通過調(diào)整那個(gè)黃線來(lái)讓誤差比較小,足夠小,但不一定是最小。誤差之“山”如圖:

6-梯度下降之誤差山.jpg

上圖中的小黃人試圖下誤差之“山”,也就是找到一條比較短的路徑來(lái)減小誤差,那么我們會(huì)選擇下山路途中最陡峭的路徑,也就是圖中所示路徑讓小黃人下山。聰明的同學(xué)已經(jīng)要問,這個(gè)神操作對(duì)應(yīng)的數(shù)學(xué)意義在哪里呢,沒錯(cuò),就是偏導(dǎo)數(shù),我們?cè)谡艺`差函數(shù)的偏導(dǎo)數(shù),每一次偏導(dǎo),相當(dāng)于在誤差山上面尋找一個(gè)方向?qū)?yīng)的數(shù)學(xué)曲線可以簡(jiǎn)化理解為下面這幅圖:

7-梯度下降-誤差函數(shù)求導(dǎo).jpg

U字型的曲線如果是一個(gè)簡(jiǎn)化到二維平面的誤差“山”,而不是一個(gè)椎體,或者更高維度的怪獸,那么梯度下降的偏導(dǎo)數(shù)在單一維度上可以理解成為導(dǎo)數(shù),也就是圖中那個(gè)切線,沿著這個(gè)方向下降一直找到平緩的低點(diǎn)……當(dāng)然這種方法求誤差的最小值有的時(shí)候也會(huì)落入“山坳”里面,難以繼續(xù)下降,從而不能找到全局最優(yōu);又時(shí)候又會(huì)碰到不可導(dǎo)的點(diǎn),從而不知所措;就要通過別的細(xì)致的手段去解決,在這里不做詳細(xì)討論了。

到此,算是將監(jiān)督學(xué)習(xí)名詞講完,有沒有一點(diǎn)點(diǎn)如釋重負(fù)的感覺呢。

但是,我們說(shuō)的是監(jiān)督學(xué)習(xí),目前湊齊了這些小小的詞匯,那么監(jiān)督和學(xué)習(xí)本身這倆詞匯到底是什么意思呢?這里就給大家做一個(gè)綜合,把前面的概念串起來(lái)。

先來(lái)解釋“學(xué)習(xí)”,通常我們?nèi)祟愒谏钪袝?huì)碰上一些問題,比如如何開車?我們是通過基本講解油門,離合,檔桿,剎車,方向盤等一些工具以后,再上車實(shí)際練習(xí)一段時(shí)間,當(dāng)然這段時(shí)間是非常黑暗的,經(jīng)常會(huì)出事故,每一次事故之后我們都會(huì)總結(jié)哪里做的不好,然后改正,再練習(xí),半年后基本就算是新手上路了。這個(gè)過程就是學(xué)習(xí)。我們希望機(jī)器也能做到這個(gè)過程,當(dāng)然在它自主意識(shí)之前,是要通過有人的指導(dǎo)才能學(xué)會(huì)一些知識(shí)。其中比較簡(jiǎn)單的目標(biāo),也就是通過過去的數(shù)據(jù)來(lái)預(yù)測(cè)將來(lái)的值,或者,把已經(jīng)出現(xiàn)的數(shù)據(jù)進(jìn)行分類。以分類為例,我們已經(jīng)了解到了感知器,決策樹,樸素貝葉斯,支持向量機(jī),我再偷偷告訴大家一個(gè)新概念:邏輯回歸,也是用來(lái)分類的!What?回歸不是預(yù)測(cè)值的意思嘛?!你看老外多么不靠譜,起個(gè)名字叫回歸,硬是用來(lái)做分類。

以上這些學(xué)過的小概念都是用來(lái)處理已經(jīng)有的數(shù)據(jù)的,它們是一些基礎(chǔ)算法,有了它們,我們就可以構(gòu)建模型,把經(jīng)驗(yàn)數(shù)據(jù)輸入進(jìn)去,然后通過評(píng)估標(biāo)準(zhǔn)來(lái)計(jì)算輸出是不是令人滿意,如果不行,就看看哪里錯(cuò)了——通常用梯度下降法來(lái)分析錯(cuò)誤——再去懲罰錯(cuò)誤的部分;一遍又一遍的重復(fù)上面的過程,就能得到比較好的模型和參數(shù),從而讓輸出物符合我們的目標(biāo)。這就是“有監(jiān)督的機(jī)器學(xué)習(xí)”,我們就是那個(gè)監(jiān)督者。

更加具體一點(diǎn),可以窺探下Python中sklearn庫(kù)的具體用法:

決策樹:


fromsklearn.tree import DecisionTreeClassifier

classifier = DecisionTreeClassifier()

支持向量機(jī):


fromsklearn.svm import SVC

classifier = SVC()

邏輯回歸:


fromsklearn.linear_model import LogisticRegression

classifier = LogisticRegression()

然后調(diào)參是啥意思嘞,以SVC()為例,我們可以看看如下代碼:


classifier = SVC(kernel = 'rbf', gamma=155)

里面有了兩個(gè)參數(shù),這參數(shù)的值就是我們需要去調(diào)整的。

以上隨便舉了幾個(gè)例子,不必深究,具體的代碼實(shí)現(xiàn)我們會(huì)在本文的姊妹篇《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)》中詳細(xì)敘述。

監(jiān)督學(xué)習(xí)的概念告一段路,接下來(lái),開啟新的旅程。

二 非監(jiān)督學(xué)習(xí)

如果仔細(xì)看了上面的監(jiān)督學(xué)習(xí)一段,就能意識(shí)到,非監(jiān)督意味著多么大的不同,是的,這里去掉了指導(dǎo)者這個(gè)角色。為了介紹這種相對(duì)特殊的學(xué)習(xí)算法,我們看一看比較經(jīng)典的:聚類算法;老規(guī)矩,開題,上圖:

8-非監(jiān)督學(xué)習(xí)-聚類.jpg

如上圖,我們問,上圖中這個(gè)二維平面里,這些點(diǎn)可以分為幾類呢?憑直覺,也可以說(shuō)是兩類,除去標(biāo)注點(diǎn)的形狀不同以外,基本上兩類點(diǎn)距離有遠(yuǎn)近的區(qū)別。沒錯(cuò),事實(shí)卻是如此,我們把這種直覺發(fā)揚(yáng)光大,那就會(huì)引出一個(gè)算法:K-Mean算法。

細(xì)看這個(gè)算法,就是說(shuō)有K個(gè)種類的數(shù)據(jù),多少種,不知道,數(shù)據(jù)本來(lái)的特征也不知道,沒有提前標(biāo)注過,但是可以計(jì)算數(shù)據(jù)樣本點(diǎn)之間的“距離”,非常好理解,用直覺說(shuō),就是上圖中點(diǎn)和點(diǎn)的遠(yuǎn)近,把近的點(diǎn)湊在一起就是一類。好了,接下來(lái),數(shù)學(xué)家們?yōu)榱梭w現(xiàn)他們的厲害,在距離上狠下了一番功夫,于是有了,歐氏距離,余弦夾角,閔可夫斯基距離,相對(duì)熵,杰拉德相似系數(shù),泊松相關(guān)系數(shù)……可謂沒有數(shù)學(xué)家想不到,只有常人想不到。本文一點(diǎn)也不想介紹這些方法,總而言之,明白這是一種距離,就可以了。

再回顧一下上圖,我們可以變態(tài)的發(fā)現(xiàn)一個(gè)問題,如果按距離聚類出現(xiàn)以下情況怎么辦:

9-非監(jiān)督學(xué)習(xí)-反直覺聚類.jpg

這樣橫著切開,好像不是我們想要的兩類,那么自然的,我們引出一種新的聚類方法,看看是不是能夠找到數(shù)據(jù)間更深層次的關(guān)系。先上圖:

10-非監(jiān)督學(xué)習(xí)-高斯聚類.jpg

這里舉一個(gè)非常老非常俗的例子,就是考試成績(jī)分布,我們通常說(shuō),這種成績(jī)分布的規(guī)律符合“高斯分布”,也就是鐘形曲線,看上圖中間高高的,兩邊兩個(gè)長(zhǎng)尾巴,是不是一口鐘……也真是佩服數(shù)學(xué)工作者的想象力??傊?,高斯是一個(gè)很厲害的人,或者說(shuō)神仙,他發(fā)現(xiàn)了一種曲線,高斯曲線,就是這口“鐘”。后來(lái)我們把服從這個(gè)鐘形分布的數(shù)據(jù),稱為服從高斯分布,那么聚類的時(shí)候,我們就可以認(rèn)為服從高斯分布的一批數(shù)據(jù)是一個(gè)類,再說(shuō)一遍,能在這個(gè)二維平面(或者更高維度也行)上擺出一副鐘的形態(tài)的一組數(shù),我們就把它們聚為一類,這就是高斯聚類。

上面的一切都很美好,還有一個(gè)問題,就是,非監(jiān)督學(xué)習(xí)里面的聚類,如果我們不知道數(shù)據(jù)有幾類,那么到底應(yīng)該聚成幾類呢?答案是:試一試。對(duì)了,既然觀察不出有幾類,那么只能試一試,這也是調(diào)參的一個(gè)重要內(nèi)容。例如,運(yùn)用Python的sklearn庫(kù),就有如下代碼:


from sklearn.cluster import KMeans

KMeans(n_clusters=7)

這個(gè)n_clusters=7就是試來(lái)試去的一個(gè)部分。

好吧,非監(jiān)督學(xué)習(xí)就不做更多的介紹了,因?yàn)檫@是一個(gè)大坑,目前本文還不想去填,先往后面走吧。

三 深度學(xué)習(xí)和神經(jīng)網(wǎng)絡(luò)

一看到這個(gè)詞,很多人第一反應(yīng)不是問這是什么?而是問,這是監(jiān)督的還是非監(jiān)督的……好吧,讀書越多越迷茫,筆者才疏學(xué)淺,只能說(shuō),目前是監(jiān)督的深度學(xué)習(xí)多,未來(lái)也許是無(wú)監(jiān)督的深度學(xué)習(xí)多。本文既然是入門,那就還是從監(jiān)督開始。

這一節(jié)內(nèi)容其實(shí)在前面介紹感知器的時(shí)候已經(jīng)埋下了引子,沒錯(cuò),簡(jiǎn)單的神經(jīng)網(wǎng)絡(luò)就是從感知器發(fā)展而來(lái)的,之所以叫神經(jīng)網(wǎng)絡(luò),是因?yàn)樗慕Y(jié)構(gòu)非常像腦神經(jīng)相連的樣子,而每一個(gè)感知器就好比一個(gè)神經(jīng)元。

光說(shuō)文字太玄奧,上圖:

11-深度學(xué)習(xí)-感知器神經(jīng)網(wǎng)絡(luò).jpg

如圖,就像織毛衣一樣,把感知器連接成了神經(jīng)網(wǎng)絡(luò)。它的含義是這樣,有兩對(duì)數(shù),(x=3)和(x=1)分別輸入兩個(gè)感知器,說(shuō)白了這倆感知器都是用來(lái)分類的,根據(jù)他自己的那條黃線的位置,能夠判斷輸入的點(diǎn)是更偏重那一側(cè),從而能夠給出Yes或者No的答案,最后我們?cè)儆靡粋€(gè)邏輯AND把它們連起來(lái),輸出就行了。

可是問題來(lái)了,最后這個(gè)輸出到底對(duì)不對(duì),能否按照我們的要求給出Yes或者No呢?這就需要訓(xùn)練這個(gè)網(wǎng)絡(luò),一次一次的輸入,然后觀察輸出是不是按照我們的要求呈現(xiàn)出來(lái)了。如果不是,我們就要回去調(diào)整感知器本身,甚至給感知器加上權(quán)重。這就相當(dāng)于“懲罰”感知器,既然要懲罰,那么我們就要有個(gè)懲罰的標(biāo)準(zhǔn),也就是說(shuō),誰(shuí)貢獻(xiàn)的誤差更大,就多多的懲罰誰(shuí),并且調(diào)整它,讓下一訓(xùn)練表現(xiàn)得好一些。

以上這個(gè)過程需要一些概念,比如,如何評(píng)估誤差,也就是錯(cuò)誤。通常我們會(huì)引入一個(gè)誤差函數(shù),把每一個(gè)感知器貢獻(xiàn)的誤差算出來(lái)。然后再對(duì)這個(gè)誤差函數(shù)運(yùn)用梯度下降(前文介紹過)的方法進(jìn)行計(jì)算,算出是誰(shuí)貢獻(xiàn)的誤差比較多,就在這一次的訓(xùn)練中懲罰它,然后反復(fù)運(yùn)行這個(gè)訓(xùn)練過程。既然是梯度下降,就要求導(dǎo),那么我們提到的對(duì)錯(cuò)分明的分類方法就帶來(lái)問題了,非黑即白的分類器相當(dāng)于一個(gè)跳變函數(shù),跳變點(diǎn)不好求導(dǎo)??!怎么辦,弄一個(gè)函數(shù)把跳變點(diǎn)去除,通常就是sigmoid函數(shù)了,名字不重要,重要的是這個(gè)函數(shù)真的好求導(dǎo),它長(zhǎng)這樣子:

sigmoid.png

畫出來(lái)就是:

12-深度學(xué)習(xí)-sigmoid函數(shù).jpg

誤差函數(shù)本身比較復(fù)雜,數(shù)學(xué)推導(dǎo)并不在本文介紹的范圍之內(nèi),有興趣的同學(xué)大可以參考別的文獻(xiàn)。

介紹了以上的感知器,并不是真正的神經(jīng)網(wǎng)絡(luò),至少,有一個(gè)問題還是沒有弄清楚,比如我們?cè)诒疚囊婚_始就埋下的伏筆,用感知器去分類正常人和瘋子,有那么兩個(gè)人好像分錯(cuò)了,面對(duì)這種問題,通過一條直線來(lái)分類,好像有點(diǎn)困難,那么怎么辦,最簡(jiǎn)單直接的想法就是把直線“掰彎”,從而達(dá)到多分類的目的。

談到多分類,這里插一句,有一個(gè)函數(shù)就要介紹了,softmax(公式復(fù)雜,并不想露出它的長(zhǎng)相),他來(lái)搞定諸如把是非問題變成概率問題這類事。例如,一個(gè)人是不是瘋了,可能0.2的可能性是,0.8的可能性不是,這就是softmax干的事,邊界模糊模糊,也可以說(shuō)是“和稀泥”,這樣做的好處可是大得很,直接給我們帶來(lái)了數(shù)學(xué)計(jì)算上的操作便利。譬如,邏輯回歸的輸出。

當(dāng)然我們除了“掰彎”分類邊界,還可以通過多次運(yùn)用直線分類的方法達(dá)到類似的效果。如圖:

13-深度學(xué)習(xí)-多級(jí)神經(jīng)網(wǎng)絡(luò).jpg

就是這樣子了,好多的層級(jí)來(lái)“學(xué)習(xí)”一個(gè)事,來(lái)達(dá)到不可描述的目的。但是這種復(fù)雜的結(jié)構(gòu)下面,最后輸出什么?基本是個(gè)概率。中間層學(xué)會(huì)了什么基本是個(gè)謎。

可不變的是,這種復(fù)雜的網(wǎng)絡(luò)也是需要反復(fù)訓(xùn)練調(diào)優(yōu)的,主流的訓(xùn)練的方法也是梯度下降求誤差,從而懲罰相關(guān)“神經(jīng)元”。

除了深度神經(jīng)網(wǎng)絡(luò),還有循環(huán)神經(jīng)網(wǎng)絡(luò),基本用來(lái)處理自然語(yǔ)言,以及卷積神經(jīng)網(wǎng)絡(luò),基本用來(lái)處理圖像,譬如AI明星換臉之類的技術(shù)……當(dāng)我沒說(shuō),此處是純學(xué)術(shù)討論。

四 強(qiáng)化學(xué)習(xí)

寫到這里我又一次后悔居然拋出了這個(gè)詞,因?yàn)檫@個(gè)方向確實(shí)很難以介紹,需要一定的悟性。好了,不吹牛逼,開講!

了解這一部分概念,首先要了解兩個(gè)重要的角色,一個(gè)叫“動(dòng)態(tài)規(guī)劃”,另一個(gè)叫“蒙特卡洛方法”,都是狠角色,我在這里簡(jiǎn)單介紹一下。

動(dòng)態(tài)規(guī)劃,它的目的是解決這樣的問題,這樣的問題通常要面對(duì)一系列的決策才能夠迎來(lái)最終結(jié)果,而最終的結(jié)果又多種多樣,所以很難用一個(gè)算法一下子得到最優(yōu)結(jié)果;那么我們基本上采用的是“走一步看一步”的做法,目標(biāo)是得到全局較優(yōu)解,而不是最優(yōu)解。這種做法在計(jì)算機(jī)算法界有專門的著述《Dynamic Programming》,在《算法導(dǎo)論》中也有記載。不過許多人都是因?yàn)樽x不下去動(dòng)態(tài)規(guī)劃這個(gè)算法,而放棄了《算法導(dǎo)論》的學(xué)習(xí),送大家一個(gè)靜靜的微笑。

蒙特卡洛方法,這個(gè)東西如果不是學(xué)習(xí)強(qiáng)化學(xué)習(xí),很多人都沒有聽說(shuō)過,它的主要思想是說(shuō),對(duì)于整個(gè)事件無(wú)法一下子抽象出概率模型,也算不出來(lái)數(shù)學(xué)期望,那么就退而求其次,用“不停地試”的方法去估摸概率均值,也就是數(shù)學(xué)期望,從而實(shí)現(xiàn)對(duì)未來(lái)數(shù)值的預(yù)測(cè)。舉個(gè)例子,就是打牌,我們初次碰上一個(gè)對(duì)手,無(wú)法知道對(duì)方的牌路,也不知道采取什么策略,但是可以打一打試一試,慢慢去總結(jié)對(duì)方的出牌策略和習(xí)慣,這其實(shí)就是在算對(duì)方各種情況下出牌的概率均值,從而掌握對(duì)手的習(xí)慣,采取對(duì)策,從而勝出。

以上兩段話完全不負(fù)責(zé)任,因?yàn)檫@兩個(gè)狠角色確實(shí)不是一言以蔽之的概念,需要閱讀專著去理解和學(xué)習(xí)。那么讀完這個(gè)段落,有個(gè)影子也就行了。我們繼續(xù)往下走。

我們看一個(gè)訓(xùn)練機(jī)器人走迷宮的具體例子,這個(gè)例子也是強(qiáng)化學(xué)習(xí)的經(jīng)典。

14-robot.png

如上圖,右上角的酷似掃地機(jī)器人的家伙就是我們要訓(xùn)練的對(duì)象了。這個(gè)像迷宮一樣的東西就是機(jī)器人的世界了,里面有一個(gè)目標(biāo)點(diǎn)(靶子),和一個(gè)炸彈。

我們的規(guī)矩也挺簡(jiǎn)單的,讓機(jī)器人一步一步的挪,碰上墻壁就得負(fù)分,碰見靶子就給予獎(jiǎng)勵(lì),碰見炸彈就多多得減分,啥也碰不見,就稍微減一點(diǎn)分。然后讓機(jī)器人多次的走這個(gè)圖,以求找到最簡(jiǎn)潔的路徑。

如果把這個(gè)問題抽象成數(shù)據(jù)模型,那么還是有一定復(fù)雜度的,比如,我們?yōu)榱俗寵C(jī)器人越走越好,也就要記住過去吃的虧,怎么辦呢,就是給它一個(gè)矩陣來(lái)記錄知識(shí),每走一步,會(huì)得分多少,或者丟多少分,總積分是多少。那么下一次訓(xùn)練的時(shí)候,就可以一邊參考這個(gè)矩陣,一邊嘗試新的方向,綜合考慮向哪個(gè)方向走。

總結(jié)一下,是這么個(gè)意思:

q(s_t, a) = R_{t+1} + γ \times max(q(a, s_{t+1}))

s是狀態(tài),a是采取的行動(dòng)方向,R給予的獎(jiǎng)勵(lì)或者懲罰,γ是折扣印子(0到1)也就是打個(gè)折。

然后,把當(dāng)前這一次嘗試所得的積分,和歷史積分矩陣?yán)锩娴膬?nèi)容放在一起比較,就知道怎么做決策了。

Q = (1-α) \times 歷史知識(shí)獲得的積分 + α \times 目前可以采取的策略獲得的積分

α就叫做松弛因子。

有了上面的這些思想,我們就可以一次又一次的讓機(jī)器人行走起來(lái),去不斷的更新知識(shí)矩陣。其中這個(gè)邊走邊看的過程就是動(dòng)態(tài)規(guī)劃,這個(gè)每一小步選擇方向的時(shí)候所采用的隨機(jī)值就是蒙特卡洛方法。

具體實(shí)現(xiàn)請(qǐng)期待本文的姊妹篇《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)》。

到此,可以算是完成了一個(gè)簡(jiǎn)單的綜述,謝謝大家。

這是本篇文章是《機(jī)器學(xué)習(xí)入門》系列文章的第一篇,該系列有如下文章:
《機(jī)器學(xué)習(xí)入門——基礎(chǔ)篇》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之監(jiān)督學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之非監(jiān)督學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之深度學(xué)習(xí)》
《機(jī)器學(xué)習(xí)入門——實(shí)戰(zhàn)篇之強(qiáng)化學(xué)習(xí)》

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容