這是本篇文章是《機(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è)問(wèn)題绰沥,什么是機(jī)器學(xué)習(xí)产喉?其實(shí)這就是讓機(jī)器利用歷史的經(jīng)驗(yàn)去對(duì)目前的事物做出判斷匿沛。
可以這么去理解港柜,我們想象一下小盆友成長(zhǎng)的過(guò)程痊项,就會(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ā)生過(guò)的情形,也可以去面對(duì)沒(méi)有發(fā)生過(guò)的情形削祈,俗話說(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)的定義,但是脚翘,如果過(guò)去不理解的話看了這些定義灼卢,基本還是不理解;那么好来农,我們運(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ō)線性回歸……等下僻弹,啥是回歸嘛……一句話告訴你:回歸阿浓,就是通過(guò)一種算法預(yù)測(cè)出一個(gè)值。簡(jiǎn)單吧蹋绽,跟小學(xué)算術(shù)的難度差不多芭毙。要介紹清楚算法,莫過(guò)于舉個(gè)例子卸耘,要舉例子退敦,不能沒(méi)有圖片:
正如上圖所示,假如我們親愛(ài)的股票市場(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ò)了一關(guān)巡社,來(lái)認(rèn)識(shí)第二個(gè)詞,感知器手趣,看到感知二字晌该,好像不明覺(jué)厲,計(jì)算機(jī)哪來(lái)的感知嘛绿渣?我們談?wù)摰氖怯?jì)算機(jī)算法朝群,不要幻想科幻電影里面跟我們談戀愛(ài)的機(jī)器人去感知我們的愛(ài)恨情仇了,感知中符,就是一個(gè)函數(shù)姜胖,輸入一個(gè)值,輸出一個(gè)值的那種函數(shù)淀散,但是右莱,比線性回歸復(fù)雜的地方是,這個(gè)函數(shù)的作用也不是預(yù)測(cè)一個(gè)值档插,而是把一群事物分開(kāi)慢蜓,或者說(shuō),對(duì)于一個(gè)確定的事物郭膛,對(duì)于他是不是某一類晨抡,給出“是”或者“不是”的答案。舉個(gè)例子则剃,大家在閱讀的這篇文章的作者是不是瘋了耘柱?就等于,把我這個(gè)作者分類進(jìn)入到“瘋了”這一類棍现,或者“正车骷澹”這一類,那么轴咱,我們就需要一條界限把這兩類人分開(kāi)汛蝙,從而也就把我放入了其中一類;剛才提到的那根線就是這個(gè)界限朴肺。能上圖就上圖:
正如上圖所示窖剑,假如兩個(gè)維度能夠把正常人和瘋子區(qū)分開(kāi),那么我們也許近似的能找到一個(gè)分類的界限戈稿,把瘋子和正常人劃分開(kāi)來(lái)西土。也許大家都注意到,有個(gè)正常人被分到了瘋子一側(cè)鞍盗,也有一個(gè)瘋子被分到了正常人的一側(cè)需了,怎么解決這個(gè)問(wèn)題跳昼?或者說(shuō)我們這條線擺的位置已經(jīng)是最合適了嗎?這兩個(gè)問(wèn)題直接引出兩個(gè)大主題肋乍,一個(gè)是如何把直線變成曲線……或者鹅颊,動(dòng)用高維空間,找一個(gè)高位超平面把樣本分開(kāi)……另一個(gè)主題是誤差分析墓造,后面還要反復(fù)接觸到堪伍。此處不做透徹分析。
第三個(gè)詞觅闽,決策樹帝雇,這個(gè)詞其實(shí)是最形象的一個(gè),因?yàn)樗_實(shí)可以用來(lái)做決策蛉拙,也因?yàn)樗L(zhǎng)得確實(shí)像一棵樹尸闸。啥都別說(shuō)了,上圖:
如上圖孕锄,這是網(wǎng)上盛傳的垃圾分類方法吮廉,能不能分清楚垃圾暫且不提,這解決方案本身就是典型的一棵決策樹硫惕,為什么是樹茧痕,明明是“金字塔”……好吧野来,老外就把這種圖形叫做樹恼除,估計(jì)是像圣誕樹。關(guān)鍵是曼氛,從樹頂開(kāi)始回答問(wèn)題豁辉,居然可以自然而然完成垃圾分類,沒(méi)錯(cuò)舀患,這是分類的最古老的一種方法之一徽级,雖然啰嗦,但是行之有效聊浅,把這種方法引進(jìn)機(jī)器學(xué)習(xí)餐抢,就成了決策樹,也就是說(shuō)我們通過(guò)一大堆數(shù)據(jù)把這棵樹打造出來(lái)低匙,再遇見(jiàn)一個(gè)新的物品旷痕,就可以通過(guò)這棵樹,找到這個(gè)物品是屬于什么類別顽冶,等于讓機(jī)器有了“領(lǐng)悟”歷史數(shù)據(jù)欺抗,也就是“經(jīng)驗(yàn)”,的能力强重。順帶著說(shuō)一下绞呈,對(duì)于比較復(fù)雜的多維度分類問(wèn)題贸人,還有好多棵樹一起用的情況,就是隨機(jī)森林佃声,本文先不說(shuō)艺智。
下一個(gè)詞,大boss之一圾亏,樸素貝葉斯力惯,要想弄明白這個(gè)詞沒(méi)辦法貫徹一圖流,但是也不難召嘶,畢竟本文只是入門嘛父晶。先看一個(gè)無(wú)厘頭的問(wèn)題:“牛頓如果是在樹下坐著被蘋果砸中才發(fā)現(xiàn)了萬(wàn)有引力;那么牛頓發(fā)現(xiàn)了萬(wàn)有引力的情況下弄跌,之前被蘋果砸中的概率有多大呢甲喝?”是不是有一點(diǎn)繞啊,沒(méi)錯(cuò)铛只,直覺(jué)上居然給人了因果倒置的錯(cuò)覺(jué)埠胖,貝葉斯大boss的定理難就難在解決這種很繞的問(wèn)題:知果求因,不求全淳玩,求概率直撤!那么如果能求出來(lái)概率,能干啥蜕着?分類谋竖,還是為了讓計(jì)算機(jī)分類,比如說(shuō):分開(kāi)垃圾郵件和正常郵件承匣。這個(gè)任務(wù)和貝葉斯有什么關(guān)系蓖乘,那么請(qǐng)想一想,如果說(shuō)垃圾郵件有很大概率在標(biāo)題和內(nèi)容中都包含某些羞羞的詞韧骗,反過(guò)來(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)持一下,馬上就撐過(guò)去了览徒!本文針對(duì)監(jiān)督學(xué)習(xí)介紹的最后一個(gè)詞狈定,支持向量機(jī),如果不是因?yàn)榻榻B了感知器的時(shí)候沒(méi)有很好的把瘋子和正常人分開(kāi),我都不想說(shuō)支持向量機(jī)的事了纽什,這玩意要想完美入門措嵌,還得有點(diǎn)數(shù)學(xué)思維。不過(guò)既然要講芦缰,我們就學(xué)一點(diǎn)點(diǎn)數(shù)學(xué)企巢。還記得本文在介紹感知器時(shí)候,提過(guò)的一句玄幻的話嗎:“或者让蕾,動(dòng)用高維空間浪规,找一個(gè)高位超平面把樣本分開(kāi)”,沒(méi)錯(cuò)探孝,不懂就上圖:
這幅圖很簡(jiǎn)單笋婿,含義確透漏了一個(gè)大秘密:加入我有這么一組數(shù)字「-2,-1顿颅,-0.5缸濒,0.5,1粱腻,2」我想要的是把整數(shù)和小數(shù)分開(kāi)庇配,那么在一維軸X上面,需要兩豎著兩條直線才行绍些;而如果在上圖的二維曲線上捞慌,只需要橫著一條直線就能吧整數(shù)和小數(shù)分開(kāi)。這就是著名的“核函數(shù)”大法柬批,名字什么的不重要啸澡,老外起名字有時(shí)候也不靠譜,不過(guò)這種升維后找超平面的方法值得一學(xué)萝快。至于誤差锻霎,因?yàn)閿[放線條的位置有許多選擇著角,所以誤差也要專門計(jì)算揪漩,但是沒(méi)有一定的好壞,要綜合的去看待吏口,而且會(huì)涉及到另一個(gè)概念“梯度下降”奄容。
梯度下降,感覺(jué)上像是從什么地方下來(lái)产徊,沒(méi)錯(cuò)昂勒,就是從誤差之“山”下來(lái),一直下到平地上舟铜,也就是沒(méi)有“梯度”的地方戈盈,從而實(shí)現(xiàn)誤差較小的目的。具體來(lái)說(shuō),上圖:
上圖之中塘娶,我們以線性回歸為例归斤,既然是回歸,就是要預(yù)測(cè)出來(lái)一個(gè)值刁岸,那么就要先把已有的圖中四個(gè)點(diǎn)用一條直線“串”起來(lái)脏里,可是穿不起來(lái)啊,那么只能找一條近似的直線虹曙,例如圖中黃線迫横,這就形成了誤差,把每個(gè)點(diǎn)到圖中黃線的距離稱之為誤差酝碳,我們就可以把這些誤差一一計(jì)算出來(lái)矾踱,并且找到誤差最小的時(shí)候。那么疏哗,假如通過(guò)某種計(jì)算介返,我們得到了誤差總和,也就有了誤差之“山”沃斤,這座山是由于各個(gè)誤差的總和而來(lái)圣蝎,那么我們就可以通過(guò)調(diào)整那個(gè)黃線來(lái)讓誤差比較小,足夠小衡瓶,但不一定是最小徘公。誤差之“山”如圖:
上圖中的小黃人試圖下誤差之“山”,也就是找到一條比較短的路徑來(lái)減小誤差哮针,那么我們會(huì)選擇下山路途中最陡峭的路徑关面,也就是圖中所示路徑讓小黃人下山。聰明的同學(xué)已經(jīng)要問(wèn)十厢,這個(gè)神操作對(duì)應(yīng)的數(shù)學(xué)意義在哪里呢等太,沒(méi)錯(cuò),就是偏導(dǎo)數(shù)蛮放,我們?cè)谡艺`差函數(shù)的偏導(dǎo)數(shù)缩抡,每一次偏導(dǎo),相當(dāng)于在誤差山上面尋找一個(gè)方向?qū)?yīng)的數(shù)學(xué)曲線可以簡(jiǎn)化理解為下面這幅圖:
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)泼差,從而不知所措;就要通過(guò)別的細(xì)致的手段去解決呵俏,在這里不做詳細(xì)討論了拴驮。
到此,算是將監(jiān)督學(xué)習(xí)名詞講完柴信,有沒(méi)有一點(diǎn)點(diǎn)如釋重負(fù)的感覺(jué)呢套啤。
但是,我們說(shuō)的是監(jiān)督學(xué)習(xí)随常,目前湊齊了這些小小的詞匯潜沦,那么監(jiān)督和學(xué)習(xí)本身這倆詞匯到底是什么意思呢?這里就給大家做一個(gè)綜合绪氛,把前面的概念串起來(lái)唆鸡。
先來(lái)解釋“學(xué)習(xí)”,通常我們?nèi)祟愒谏钪袝?huì)碰上一些問(wèn)題枣察,比如如何開(kāi)車争占?我們是通過(guò)基本講解油門,離合序目,檔桿臂痕,剎車,方向盤等一些工具以后猿涨,再上車實(shí)際練習(xí)一段時(shí)間握童,當(dāng)然這段時(shí)間是非常黑暗的,經(jīng)常會(huì)出事故叛赚,每一次事故之后我們都會(huì)總結(jié)哪里做的不好澡绩,然后改正,再練習(xí)俺附,半年后基本就算是新手上路了肥卡。這個(gè)過(guò)程就是學(xué)習(xí)。我們希望機(jī)器也能做到這個(gè)過(guò)程事镣,當(dāng)然在它自主意識(shí)之前步鉴,是要通過(guò)有人的指導(dǎo)才能學(xué)會(huì)一些知識(shí)。其中比較簡(jiǎn)單的目標(biāo)蛮浑,也就是通過(guò)過(guò)去的數(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é)過(guò)的小概念都是用來(lái)處理已經(jīng)有的數(shù)據(jù)的,它們是一些基礎(chǔ)算法驱证,有了它們延窜,我們就可以構(gòu)建模型,把經(jīng)驗(yàn)數(shù)據(jù)輸入進(jìn)去抹锄,然后通過(guò)評(píng)估標(biāo)準(zhǔn)來(lái)計(jì)算輸出是不是令人滿意逆瑞,如果不行,就看看哪里錯(cuò)了——通常用梯度下降法來(lái)分析錯(cuò)誤——再去懲罰錯(cuò)誤的部分伙单;一遍又一遍的重復(fù)上面的過(guò)程获高,就能得到比較好的模型和參數(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)铸董,開(kāi)啟新的旅程。
二 非監(jiān)督學(xué)習(xí)
如果仔細(xì)看了上面的監(jiān)督學(xué)習(xí)一段肴沫,就能意識(shí)到粟害,非監(jiān)督意味著多么大的不同,是的颤芬,這里去掉了指導(dǎo)者這個(gè)角色悲幅。為了介紹這種相對(duì)特殊的學(xué)習(xí)算法套鹅,我們看一看比較經(jīng)典的:聚類算法;老規(guī)矩汰具,開(kāi)題卓鹿,上圖:
如上圖,我們問(wèn)留荔,上圖中這個(gè)二維平面里吟孙,這些點(diǎn)可以分為幾類呢?憑直覺(jué)聚蝶,也可以說(shuō)是兩類杰妓,除去標(biāo)注點(diǎn)的形狀不同以外,基本上兩類點(diǎn)距離有遠(yuǎn)近的區(qū)別既荚。沒(méi)錯(cuò)稚失,事實(shí)卻是如此,我們把這種直覺(jué)發(fā)揚(yáng)光大恰聘,那就會(huì)引出一個(gè)算法:K-Mean算法句各。
細(xì)看這個(gè)算法,就是說(shuō)有K個(gè)種類的數(shù)據(jù)晴叨,多少種凿宾,不知道,數(shù)據(jù)本來(lái)的特征也不知道兼蕊,沒(méi)有提前標(biāo)注過(guò)初厚,但是可以計(jì)算數(shù)據(jù)樣本點(diǎn)之間的“距離”,非常好理解孙技,用直覺(jué)說(shuō)产禾,就是上圖中點(diǎn)和點(diǎn)的遠(yuǎn)近,把近的點(diǎn)湊在一起就是一類牵啦。好了亚情,接下來(lái),數(shù)學(xué)家們?yōu)榱梭w現(xiàn)他們的厲害哈雏,在距離上狠下了一番功夫楞件,于是有了,歐氏距離裳瘪,余弦?jiàn)A角土浸,閔可夫斯基距離,相對(duì)熵彭羹,杰拉德相似系數(shù)黄伊,泊松相關(guān)系數(shù)……可謂沒(méi)有數(shù)學(xué)家想不到,只有常人想不到皆怕。本文一點(diǎn)也不想介紹這些方法毅舆,總而言之西篓,明白這是一種距離愈腾,就可以了憋活。
再回顧一下上圖,我們可以變態(tài)的發(fā)現(xiàn)一個(gè)問(wèn)題虱黄,如果按距離聚類出現(xiàn)以下情況怎么辦:
這樣橫著切開(kāi)悦即,好像不是我們想要的兩類,那么自然的橱乱,我們引出一種新的聚類方法辜梳,看看是不是能夠找到數(shù)據(jù)間更深層次的關(guān)系。先上圖:
這里舉一個(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è)問(wèn)題会油,就是个粱,非監(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)不是問(wèn)這是什么套蒂?而是問(wèn)钞支,這是監(jiān)督的還是非監(jiān)督的……好吧,讀書越多越迷茫泣懊,筆者才疏學(xué)淺伸辟,只能說(shuō),目前是監(jiān)督的深度學(xué)習(xí)多馍刮,未來(lái)也許是無(wú)監(jiān)督的深度學(xué)習(xí)多信夫。本文既然是入門,那就還是從監(jiān)督開(kāi)始卡啰。
這一節(jié)內(nèi)容其實(shí)在前面介紹感知器的時(shí)候已經(jīng)埋下了引子静稻,沒(méi)錯(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ō)文字太玄奧押搪,上圖:
如圖,就像織毛衣一樣浅碾,把感知器連接成了神經(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),輸出就行了排嫌。
可是問(wèn)題來(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è)過(guò)程需要一些概念能扒,比如辫狼,如何評(píng)估誤差,也就是錯(cuò)誤膨处。通常我們會(huì)引入一個(gè)誤差函數(shù)见秤,把每一個(gè)感知器貢獻(xiàn)的誤差算出來(lái)真椿。然后再對(duì)這個(gè)誤差函數(shù)運(yùn)用梯度下降(前文介紹過(guò))的方法進(jìn)行計(jì)算,算出是誰(shuí)貢獻(xiàn)的誤差比較多挣跋,就在這一次的訓(xùn)練中懲罰它狞换,然后反復(fù)運(yùn)行這個(gè)訓(xùn)練過(guò)程舟肉。既然是梯度下降查库,就要求導(dǎo)樊销,那么我們提到的對(duì)錯(cuò)分明的分類方法就帶來(lái)問(wèn)題了,非黑即白的分類器相當(dāng)于一個(gè)跳變函數(shù)裤园,跳變點(diǎn)不好求導(dǎo)凹粮腺占!怎么辦,弄一個(gè)函數(shù)把跳變點(diǎn)去除铡羡,通常就是sigmoid函數(shù)了意鲸,名字不重要临扮,重要的是這個(gè)函數(shù)真的好求導(dǎo),它長(zhǎng)這樣子:
畫出來(lái)就是:
誤差函數(shù)本身比較復(fù)雜贪壳,數(shù)學(xué)推導(dǎo)并不在本文介紹的范圍之內(nèi)闰靴,有興趣的同學(xué)大可以參考別的文獻(xiàn)钻注。
介紹了以上的感知器,并不是真正的神經(jīng)網(wǎng)絡(luò)趟据,至少楚堤,有一個(gè)問(wèn)題還是沒(méi)有弄清楚,比如我們?cè)诒疚囊婚_(kāi)始就埋下的伏筆冯丙,用感知器去分類正常人和瘋子遭京,有那么兩個(gè)人好像分錯(cuò)了,面對(duì)這種問(wèn)題船殉,通過(guò)一條直線來(lái)分類热监,好像有點(diǎn)困難孝扛,那么怎么辦幽崩,最簡(jiǎn)單直接的想法就是把直線“掰彎”慌申,從而達(dá)到多分類的目的。
談到多分類咨油,這里插一句柒爵,有一個(gè)函數(shù)就要介紹了,softmax(公式復(fù)雜棉胀,并不想露出它的長(zhǎng)相)唁奢,他來(lái)搞定諸如把是非問(wèn)題變成概率問(wèn)題這類事霎挟。例如麻掸,一個(gè)人是不是瘋了,可能0.2的可能性是熬北,0.8的可能性不是蒜埋,這就是softmax干的事,邊界模糊模糊待错,也可以說(shuō)是“和稀泥”烈评,這樣做的好處可是大得很讲冠,直接給我們帶來(lái)了數(shù)學(xué)計(jì)算上的操作便利。譬如谱仪,邏輯回歸的輸出否彩。
當(dāng)然我們除了“掰彎”分類邊界列荔,還可以通過(guò)多次運(yùn)用直線分類的方法達(dá)到類似的效果。如圖:
就是這樣子了砂吞,好多的層級(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)我沒(méi)說(shuō)根蟹,此處是純學(xué)術(shù)討論简逮。
四 強(qiáng)化學(xué)習(xí)
寫到這里我又一次后悔居然拋出了這個(gè)詞,因?yàn)檫@個(gè)方向確實(shí)很難以介紹蕉堰,需要一定的悟性悲龟。好了须教,不吹牛逼斩芭,開(kāi)講划乖!
了解這一部分概念挤土,首先要了解兩個(gè)重要的角色仰美,一個(gè)叫“動(dòng)態(tài)規(guī)劃”,另一個(gè)叫“蒙特卡洛方法”贪庙,都是狠角色翰苫,我在這里簡(jiǎn)單介紹一下奏窑。
動(dòng)態(tài)規(guī)劃埃唯,它的目的是解決這樣的問(wèn)題,這樣的問(wèn)題通常要面對(duì)一系列的決策才能夠迎來(lái)最終結(jié)果止毕,而最終的結(jié)果又多種多樣漠趁,所以很難用一個(gè)算法一下子得到最優(yōu)結(jié)果闯传;那么我們基本上采用的是“走一步看一步”的做法甥绿,目標(biāo)是得到全局較優(yōu)解,而不是最優(yōu)解洗出。這種做法在計(jì)算機(jī)算法界有專門的著述《Dynamic Programming》骄呼,在《算法導(dǎo)論》中也有記載。不過(guò)許多人都是因?yàn)樽x不下去動(dòng)態(tài)規(guī)劃這個(gè)算法澄峰,而放棄了《算法導(dǎo)論》的學(xué)習(xí)辟犀,送大家一個(gè)靜靜的微笑堂竟。
蒙特卡洛方法,這個(gè)東西如果不是學(xué)習(xí)強(qiáng)化學(xué)習(xí)席楚,很多人都沒(méi)有聽(tīng)說(shuō)過(guò)烦秩,它的主要思想是說(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)典俄周。
如上圖峦朗,右上角的酷似掃地機(jī)器人的家伙就是我們要訓(xùn)練的對(duì)象了甚垦。這個(gè)像迷宮一樣的東西就是機(jī)器人的世界了,里面有一個(gè)目標(biāo)點(diǎn)(靶子)闭翩,和一個(gè)炸彈疗韵。
我們的規(guī)矩也挺簡(jiǎn)單的侄非,讓機(jī)器人一步一步的挪逞怨,碰上墻壁就得負(fù)分叠赦,碰見(jiàn)靶子就給予獎(jiǎng)勵(lì),碰見(jiàn)炸彈就多多得減分糯累,啥也碰不見(jiàn)泳姐,就稍微減一點(diǎn)分暂吉。然后讓機(jī)器人多次的走這個(gè)圖慕的,以求找到最簡(jiǎn)潔的路徑业稼。
如果把這個(gè)問(wèn)題抽象成數(shù)據(jù)模型蚂蕴,那么還是有一定復(fù)雜度的,比如稽鞭,我們?yōu)榱俗寵C(jī)器人越走越好朦蕴,也就要記住過(guò)去吃的虧弟头,怎么辦呢赴恨,就是給它一個(gè)矩陣來(lái)記錄知識(shí)伦连,每走一步,會(huì)得分多少额港,或者丟多少分移斩,總積分是多少叹哭。那么下一次訓(xùn)練的時(shí)候痕貌,就可以一邊參考這個(gè)矩陣舵稠,一邊嘗試新的方向哺徊,綜合考慮向哪個(gè)方向走。
總結(jié)一下盈滴,是這么個(gè)意思:
s是狀態(tài)巢钓,a是采取的行動(dòng)方向症汹,R給予的獎(jiǎng)勵(lì)或者懲罰,γ是折扣印子(0到1)也就是打個(gè)折咬展。
然后破婆,把當(dāng)前這一次嘗試所得的積分荠割,和歷史積分矩陣?yán)锩娴膬?nèi)容放在一起比較旺矾,就知道怎么做決策了箕宙。
α就叫做松弛因子柬帕。
有了上面的這些思想陷寝,我們就可以一次又一次的讓機(jī)器人行走起來(lái)凤跑,去不斷的更新知識(shí)矩陣。其中這個(gè)邊走邊看的過(guò)程就是動(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í)》