AI
菌
感知機(jī)可以說是最古老的分類方法之一了,今天看來它的分類模型在大多數(shù)時(shí)候泛化能力不強(qiáng),但是它的原理卻值得好好研究。
因?yàn)檠芯客噶烁兄獧C(jī)模型,既可以發(fā)展成支持向量機(jī)(通過簡單地修改一下?lián)p失函數(shù))、又可以發(fā)展成神經(jīng)網(wǎng)絡(luò)(通過簡單地堆疊),所以它也擁有一定的地位。
所以這里對感知機(jī)的原理做一個(gè)簡介
感知機(jī)模型
感知機(jī)的思想很簡單,比如我們在一個(gè)平臺(tái)上有很多的男孩女孩,感知機(jī)的模型就是嘗試找到一條直線,能夠把所有的男孩和女孩隔離開。下面這張動(dòng)圖或許能夠給觀眾老爺們一些直觀感受:
放到三維空間或者更高維的空間,感知機(jī)的模型就是嘗試找到一個(gè)超平面,能夠把所有的二元類別隔離開。
當(dāng)然你會(huì)問,如果我們找不到這么一條直線的話怎么辦?找不到的話那就意味著類別線性不可分,也就意味著感知機(jī)模型不適合你的數(shù)據(jù)的分類。
使用感知機(jī)一個(gè)最大的前提,就是數(shù)據(jù)是線性可分的。這嚴(yán)重限制了感知機(jī)的使用場景。它的分類競爭對手在面對不可分的情況時(shí),比如支持向量機(jī)可以通過核技巧來讓數(shù)據(jù)在高維可分,神經(jīng)網(wǎng)絡(luò)可以通過激活函數(shù)和增加隱藏層來讓數(shù)據(jù)可分。
用數(shù)學(xué)的語言來說,如果我們有m個(gè)樣本,每個(gè)樣本對應(yīng)于n維特征和一個(gè)二元類別輸出,如下:
我們的目標(biāo)是找到這樣一個(gè)超平面,即:
讓其中一種類別的樣本都滿足
讓另一種類別的樣本都滿足
從而得到線性可分。如果數(shù)據(jù)線性可分,這樣的超平面一般都不是唯一的,也就是說感知機(jī)模型可以有多個(gè)解。
為了簡化這個(gè)超平面的寫法,我們增加一個(gè)特征x0=1 ,這樣超平面為
進(jìn)一步用向量來表示為:
,其中θ為(n+1)x1的向量,x為(n+1)x1的向量, ?.
后面我們都用向量來表示超平面。
但除了 θ 稱為權(quán)值,還有 b 稱為偏置,故超平面的完整表達(dá)為:θ*x+b=0
而感知機(jī)的模型可以定義為y=sign(θ?x+b) 其中:
如果我們將sign稱之為激活函數(shù)的話,感知機(jī)與logistic regression的差別就是感知機(jī)激活函數(shù)是sign,logistic regression的激活函數(shù)是sigmoid。
sign(x)將大于0的分為1,小于0的分為-1;sigmoid將大于0.5的分為1,小于0.5的分為0。因此sign又被稱為單位階躍函數(shù),logistic regression也被看作是一種概率估計(jì)。
感知機(jī)代價(jià)函數(shù)
好了,上面我們已經(jīng)知道感知機(jī)模型了,我們也知道他的任務(wù)是解決二分類問題,也知道了超平面的形式,那么下面關(guān)鍵是如何學(xué)習(xí)出超平面的參數(shù)w,b,這就需要用到我們的學(xué)習(xí)策略。
我們知道機(jī)器學(xué)習(xí)模型,需要首先找到損失函數(shù),然后轉(zhuǎn)化為最優(yōu)化問題,用梯度下降等方法進(jìn)行更新,最終學(xué)習(xí)到我們模型的參數(shù)w,b。
我們很自然的會(huì)想到用誤分類點(diǎn)的數(shù)目來作為損失函數(shù),是的誤分類點(diǎn)個(gè)數(shù)越來越少嘛,感知機(jī)本來也是做這種事的,只需要全部分對就好。
但是不幸的是,這樣的損失函數(shù)并不是w,b連續(xù)可導(dǎo)(你根本就無法用函數(shù)形式來表達(dá)出誤分類點(diǎn)的個(gè)數(shù)),無法進(jìn)行優(yōu)化。
于是我們想轉(zhuǎn)為另一種選擇,誤分類點(diǎn)到超平面的總距離(直觀來看,總距離越小越好):
距離公式如下:
而我們知道每一個(gè)誤分類點(diǎn)都滿足
因?yàn)楫?dāng)我們數(shù)據(jù)點(diǎn)正確值為+1的時(shí)候,你誤分類了,那么你判斷為-1,則算出來(w*x0+b)<>-yi(w*x+b)>0
當(dāng)數(shù)據(jù)點(diǎn)是正確值為-1的時(shí)候,你誤分類了,那么你判斷為+1,則算出來(w*x0+b>0),所以滿足-yi(w*x+b)>0
則我們可以將絕對值符號(hào)去掉,得到誤分類點(diǎn)的距離為:
因?yàn)槟阒?,所以可以直接將絕對值去掉。那么可以得到總距離為(其中M為誤分類點(diǎn)的數(shù)目):
這樣我們就得到了初步的感知機(jī)模型的損失函數(shù)。
不考慮w范數(shù)分之一,我們可以得到損失函數(shù)為(之后我們會(huì)詳細(xì)介紹范數(shù)):
總結(jié)一下!
感知機(jī)的模型是f(x)=sign(w*x+b),它的任務(wù)是解決二分類問題,要得到感知機(jī)模型我們就需要學(xué)習(xí)到參數(shù)w,b。
則這個(gè)時(shí)候我們需要一個(gè)學(xué)習(xí)策略,不斷的迭代更新w,b,所以我們需要找到一個(gè)損失函數(shù)。
很自然的我們想到用誤分類點(diǎn)的數(shù)目來表示損失函數(shù),但是由于不可導(dǎo),無法進(jìn)行更新,改為誤分類點(diǎn)到超平面的距離來表示,然后不考慮1/||w||,得到我們最終的損失函數(shù)!
為什么可以不考慮1/||w||,不用總距離表達(dá)式作為損失函數(shù)呢?
感知機(jī)的任務(wù)是進(jìn)行二分類工作,它最終并不關(guān)心得到的超平面離各點(diǎn)的距離有多少(所以我們最后才可以不考慮||w||),只是關(guān)心我最后是否已經(jīng)正確分類正確(也就是考慮誤分類點(diǎn)的個(gè)數(shù)),比如說下面紅色與綠線,對于感知機(jī)來說,效果任務(wù)是一樣好的。
但是在SVM的評價(jià)標(biāo)準(zhǔn)中(綠線是要比紅線好的,這個(gè)在學(xué)習(xí)向量機(jī)時(shí)你就會(huì)明白)
所以我們可以不考||w||,直接去掉它,因?yàn)檫@個(gè)時(shí)候我們只考慮誤分類點(diǎn),當(dāng)一個(gè)誤分類點(diǎn)出現(xiàn)的時(shí)候,我們進(jìn)行梯度下降,對w,b進(jìn)行改變即可!
這也回到了我們最初始想要把誤分類點(diǎn)的個(gè)數(shù)作為損失函數(shù)
引入距離,只是將它推導(dǎo)出一個(gè)可導(dǎo)的形式!(最后說一句,我個(gè)人認(rèn)為不去掉||w||,也是一樣可以得到最后的正確分類超平面,就是直接用距離來當(dāng)做損失函數(shù)也是可以的,可能是求梯度比較復(fù)雜,或者是感知機(jī)本身就是用誤分類點(diǎn)來區(qū)分,就沒用這個(gè)損失函數(shù)了)
學(xué)習(xí)算法
上面我們講到了感知機(jī)的損失函數(shù):
其中M是所有誤分類的點(diǎn)的集合。這是一個(gè)凸函數(shù),可以用梯度下降法或者擬牛頓法來解決,常用的是梯度下降法。
但是用普通的基于所有樣本的梯度和的均值的批量梯度下降法(BGD)是行不通的
原因在于我們的損失函數(shù)里面有限定,只有誤分類的M集合里面的樣本才能參與損失函數(shù)的優(yōu)化
所以我們不能用最普通的批量梯度下降,只能采用隨機(jī)梯度下降(SGD)或者小批量梯度下降(MBGD)。
而感知機(jī)模型選擇的是采用隨機(jī)梯度下降,這意味著我們每次僅僅需要使用一個(gè)誤分類的點(diǎn)來更新梯度。
而損失函數(shù)基于 w 與 b 的的偏導(dǎo)數(shù)為:
那么梯度下降公式為:
好了,到這里我們可以給出整個(gè)感知機(jī)學(xué)習(xí)過程算法!如下:
?。?)選定初值w0,b0,(相當(dāng)于初始給了一個(gè)超平面)
?。?)在訓(xùn)練集中選取數(shù)據(jù)(xi,yi)(任意抽取數(shù)據(jù)點(diǎn),判斷是否所有數(shù)據(jù)點(diǎn)判斷完成沒有誤分累點(diǎn)了,如果沒有了,直接結(jié)束算法,如果還有進(jìn)入(3))
(3)如果yi(w*xi+b)<>
那么進(jìn)行參數(shù)更新!更新方式如下:
其中 n為步長在統(tǒng)計(jì)學(xué)習(xí)中又稱為學(xué)習(xí)率
?。?)轉(zhuǎn)到(2),直到訓(xùn)練集中沒有誤分類點(diǎn)
AI
菌
關(guān)于感知機(jī)的理論知識(shí)就這樣了,關(guān)于收斂性的證明與算法的對偶形式,感興趣的同學(xué)可以進(jìn)一步了解。
雖然它現(xiàn)在已經(jīng)不是一個(gè)在實(shí)踐中廣泛運(yùn)用的算法,還是值得好好的去研究一下。感知機(jī)算法對偶形式為什么在實(shí)際運(yùn)用中比原始形式快,也值得好好去體會(huì)。
參考文獻(xiàn):李航—統(tǒng)計(jì)學(xué)習(xí)方法
不失初心,不忘初衷