0
雷鋒網(wǎng) AI 科技評論按:本門課程是李飛飛主講的斯坦福 CS231n 計(jì)算機(jī)視覺課程,吉林大學(xué)珠海學(xué)院的趙一帆進(jìn)行了筆記方面的整理。筆記如有出錯(cuò),請及時(shí)告知。本文對應(yīng)章節(jié):數(shù)據(jù)驅(qū)動的圖像分類方式:K 最近鄰與線性分類器。上一章節(jié):計(jì)算機(jī)視覺歷史回顧與介紹
回到圖片上來討論KNN:
可以看到,它實(shí)際上表現(xiàn)的不是很好。這里標(biāo)記了紅色和綠色,圖像分類正確與否取決于它的最近鄰值,可以看到 KNN 的表現(xiàn)效果不是很好,但如果使用一個(gè)更大的 K 值,那么投票操作的結(jié)果就可能會達(dá)到前三名或者前五名,甚至包括所有的數(shù)據(jù)范圍。
用這種方法來檢索相鄰數(shù)據(jù)時(shí),可以想象到這樣會對噪聲產(chǎn)生更大的魯棒性。還有另外一個(gè)選擇,就是當(dāng)使用 K-近鄰算法時(shí),確定應(yīng)該如何比較相對鄰近數(shù)據(jù)距離值傳遞不同。
對于迄今為止的例子,已經(jīng)展示了已經(jīng)討論過的 L1 距離,它是像素之間絕對值的總和,另一種常見的選擇是 L2 距離,也是歐式距離,即取平方和的平方根,并把這個(gè)作為距離。
選擇不同的距離度量實(shí)際上是一個(gè)非常有趣的話題,因?yàn)樵诓煌S度里,會在預(yù)測的空間里對底層的幾何或拓?fù)浣Y(jié)構(gòu)做出不同的假設(shè)。
相對于下面所示的 L1 距離和 L2 距離實(shí)際上是一個(gè)根據(jù)距離的這個(gè)圍繞著原點(diǎn)的方形和圓,這個(gè)方形上的每一個(gè)點(diǎn)在 L1 上是與原點(diǎn)等距的,而距離上類似的會是一個(gè)圓,它看起來像你所期望的。
這兩種方法之間特別指出一件有趣的問題:
L1 距離取決于你選擇的坐標(biāo)系統(tǒng),如果你選擇坐標(biāo)軸,將會改變點(diǎn)之間的 L1 距離,而改變坐標(biāo)軸對 L2 距離毫無影響,無論在怎么樣的坐標(biāo)下,L2 距離是一個(gè)確定的值。
如果輸入一些特征向量,向量中的一些值有一些重要意義的任務(wù),那么 L1 也許會更加適合。
但如果它只是某個(gè)空間中的一個(gè)通用向量,而不知道其中的不同元素的意義,那么 L2 會更適合些。
還有一點(diǎn):
通過使用不同的距離度量,可以將 K-最近鄰分類器泛化到許多不同的數(shù)據(jù)類型上,而不僅僅是向量,不僅僅是圖像。例如,假設(shè)想對文本進(jìn)行分類,那么只需要用 KNN 指定一個(gè)距離函數(shù),這個(gè)函數(shù)可以測量兩段話或者兩段話之間的距離。因此,簡單的通過指定不同的距離度量,便可以很好地將這個(gè)算法應(yīng)用在基本上任何類型的數(shù)據(jù)上。
選擇不同的距離度量在幾何學(xué)中是一個(gè)有趣的問題。
在左邊可以看到一組 L1 距離,右側(cè)是使用 L2 距離。
可以看出,分類器的決策邊界其實(shí)是相差很大的:
L1 的決策邊界趨向于隨坐標(biāo)軸,這是因?yàn)?L1 取決于對坐標(biāo)的選擇;
L2 對距離的排序并不會受到坐標(biāo)的影響,只是把邊界放置在存在最自然的地方。
如何根據(jù)問題和數(shù)據(jù)來確定這些超參數(shù)?
選擇能對訓(xùn)練集給出高準(zhǔn)確率、表現(xiàn)最佳的超參數(shù)。這其實(shí)是一種非常糟糕的想法,千萬不要這么做。
例如,在之前的 K-最近鄰分類算法中,假設(shè) K=1,總能完美分類訓(xùn)練數(shù)據(jù),所以如果采用這一策略總是選擇 K=1,但是正如之前案例所見的,在實(shí)踐中讓 K 取更大的值,盡管會在訓(xùn)練集中分錯(cuò)個(gè)別數(shù)據(jù),但對于在訓(xùn)練集中未出現(xiàn)過的數(shù)據(jù)分類性能更佳,歸根到機(jī)器學(xué)習(xí)中,關(guān)心的并不是要盡可能擬合訓(xùn)練集,而是要讓分類器在訓(xùn)練集以外的未知數(shù)據(jù)上表現(xiàn)更好。
另一個(gè)想法是把數(shù)據(jù)分成兩部分,一部分是訓(xùn)練集,另一部分是測試集,然后在訓(xùn)練集上用不同的超參數(shù)來訓(xùn)練算法,然后將訓(xùn)練好的分類器用在測試集上,再選擇一組在測試集上表現(xiàn)最好的超參數(shù)。
這似乎是個(gè)合理的策略,但事實(shí)上也非常糟糕。因?yàn)闄C(jī)器學(xué)習(xí)的目的是了解算法表現(xiàn)如何,所以測試集只是一種預(yù)估的方法,即在沒遇到的數(shù)據(jù)上算法表現(xiàn)會如何,如果采用這種不同的超參數(shù)訓(xùn)練不同算法的策略,然后選擇在測試集上表現(xiàn)最好的超參數(shù),那么很有可能選擇了一組超參數(shù),只是讓算法在這組測試集上表現(xiàn)良好,但是這組測試集的表現(xiàn)無法代表在權(quán)限的未見過的數(shù)據(jù)上的表現(xiàn)。
更常見的做法是將數(shù)據(jù)分為三組:大部分作為訓(xùn)練集,然后一個(gè)驗(yàn)證集,一個(gè)測試集。在訓(xùn)練集上用不同的超參數(shù)訓(xùn)練,在驗(yàn)證集上進(jìn)行評估,然后選擇一組評估最好的參數(shù),然后再把這組數(shù)據(jù)放到測試集中跑一跑,這才是要寫到論文中的數(shù)據(jù),這才是算法在未見過的新數(shù)據(jù)上的表現(xiàn)。
還有一個(gè)設(shè)計(jì)超參數(shù)的方法是交叉驗(yàn)證。
這個(gè)在小數(shù)據(jù)集上比較常用,在深度學(xué)習(xí)中并不怎么常用。它的理念是,取出測試集數(shù)據(jù),將整個(gè)數(shù)據(jù)集保留部分作為最后使用的測試集,對于剩余的數(shù)據(jù)分成很多份,在這種情況下,輪流將每一份都當(dāng)做驗(yàn)證集。
經(jīng)過交叉驗(yàn)證,會得到這樣一張圖:
x 軸表示 K-近鄰分類器中參數(shù) K 值,y 軸表示分類器對于不同 K 在數(shù)據(jù)上的準(zhǔn)確率。在這個(gè)例子中,用了 5 次交叉驗(yàn)證,也就是說對于每個(gè) K 值,都對算法做了 5 次測試來了解表現(xiàn)如何。
使用 K 次交叉驗(yàn)證也許是一個(gè)量化它的好方法,可以觀察到算法在不同驗(yàn)證集上表現(xiàn)的方差,同時(shí),不光是知道哪樣更好,還能看到算法效果的分布。
其實(shí),KNN 在圖像分類中很少用到,原因包括剛才談到的所有問題。一是它在測試時(shí)運(yùn)算時(shí)間很長,這和剛剛提到的要求不符;另一個(gè)問題在于,像歐幾里得距離或者 L1 距離這樣的衡量標(biāo)準(zhǔn)用在比較圖片上實(shí)在不太合適。這種向量化的距離函數(shù)不太適合表示圖像之間視覺的相似度。
圖中左邊圖的女生和右邊三張經(jīng)過不同處理的圖片,如果計(jì)算他們和原圖的歐式距離,會得到相同的答案,這并不是想要的??梢愿杏X出來 L2 不適合表示圖像之間視覺感知的差異。
還有一個(gè)問題稱之為維度災(zāi)難,如果還記得對 K 近鄰的描述,它有點(diǎn)像訓(xùn)練點(diǎn)把樣本空間分成幾塊,這意味著,如果希望分類器有更好的結(jié)果,需要訓(xùn)練數(shù)據(jù)能夠密集地分布在空間中。否則最鄰近點(diǎn)的實(shí)際距離可能會很遠(yuǎn)。
問題在于,要想要密集分布在空間中的數(shù)據(jù),意味著需要指數(shù)倍地訓(xùn)練數(shù)據(jù)。
小結(jié):
我們介紹了 KNN 做圖像分類的基本思路,借助訓(xùn)練集的圖片和相應(yīng)的標(biāo)記,我們可以預(yù)測測試集中數(shù)據(jù)的分類。
下面將介紹神經(jīng)網(wǎng)絡(luò),通常會把神經(jīng)網(wǎng)絡(luò)比喻為玩樂高。
可以將不同種類的神經(jīng)網(wǎng)絡(luò)組件組合在一起,來構(gòu)建不同的大型卷積網(wǎng)絡(luò),它是在不同類型的深度學(xué)習(xí)應(yīng)用中看到的最基本的構(gòu)建塊之一。這類有關(guān)神經(jīng)網(wǎng)絡(luò)的模塊化性質(zhì)的例子來自于圖像字幕實(shí)驗(yàn)室的一些研究。
輸入一副圖片,然后輸出用于描述圖像的描述性的句子。這類工作是由一個(gè)關(guān)注圖像的卷積神經(jīng)網(wǎng)絡(luò)和一個(gè)只關(guān)注語言的循環(huán)神經(jīng)網(wǎng)絡(luò)組成的,把這兩個(gè)網(wǎng)絡(luò)放在一起訓(xùn)練最后得到一個(gè)超級厲害的系統(tǒng)來做一些偉大的事情。
線性分類器是這種參數(shù)模型最簡單的例子:
參數(shù)模型實(shí)際上有兩個(gè)不同的部分,以這張圖片為例子,一組是左邊的貓,還有一組是權(quán)重參數(shù),通常叫做 W,有時(shí)也叫做 θ。現(xiàn)在要寫一些包含了輸入數(shù)據(jù) x 和參數(shù) θ 的函數(shù),就會輸出 10 個(gè)數(shù)字對應(yīng) CIFAR-10 中對應(yīng)的 10 個(gè)類別所對應(yīng)的分?jǐn)?shù)。根據(jù)上述描述,比如說貓的分?jǐn)?shù)更大,表面輸入 x 是貓的可能性更大。
在最近鄰算法的設(shè)置中沒有參數(shù),取而代之的是通常會保留所有種類的訓(xùn)練集并在測試中使用。但是現(xiàn)在,在一個(gè)參數(shù)化的方法中,將對訓(xùn)練數(shù)據(jù)進(jìn)行總結(jié),并把所有的知識用到這些參數(shù) W 中,在測試的時(shí)候,不再需要實(shí)際的訓(xùn)練數(shù)據(jù),只需要用到參數(shù) W,這使得模型更有效率,甚至可以運(yùn)行在手機(jī)這樣的小設(shè)備上。
在深度學(xué)習(xí)中,整個(gè)描述都是關(guān)于函數(shù) F 的正確結(jié)構(gòu),可以發(fā)揮想象來編寫不同的函數(shù)形式,用不同的、復(fù)雜的方式組合權(quán)重和數(shù)據(jù),這樣可以對應(yīng)不同的神經(jīng)網(wǎng)絡(luò)體系結(jié)構(gòu)。
所以 F(X)=Wx 是一個(gè)最簡單的線性分類器,如果能把上述方程的維度解出來,前提是圖像是 32*32*3 的輸入值,要取這些值然后把它們展開成一個(gè) 3072 項(xiàng)長列向量,想要得出 10 個(gè)類的得分。對于該圖像,想要最終得到 10 個(gè)數(shù)字,從而給出每個(gè)類別對應(yīng)得分情況,也就是說,現(xiàn)在 W 是 10*3072 的矩陣,X 是 3072*10 的矩陣,因此,一旦這兩項(xiàng)相乘,就會得到一個(gè)列向量,給 10 個(gè)類的分?jǐn)?shù)。
通常會添加一個(gè)偏置項(xiàng),它是一個(gè) 10 元素的常向量,它不與訓(xùn)練數(shù)據(jù)交互,而只會給一些數(shù)據(jù)獨(dú)立的偏置值。
這里有一個(gè)簡單的例子。左邊是一個(gè)簡單的圖像,所以線性分類器的工作是把 2*2 的圖像拉伸成一個(gè)有四個(gè)元素的列向量。
假設(shè)這里例子中只有三類,現(xiàn)在權(quán)重矩陣是 3*4,可以把線性分類理解為幾乎是一種模板匹配的方法,這個(gè)矩陣中的每一行對應(yīng)于圖像的某個(gè)模板。根據(jù)輸入矩陣行列之間的乘積或者點(diǎn)積,從而得到圖像的像素點(diǎn)。計(jì)算這個(gè)點(diǎn)積,可以得到在這個(gè)類模板和圖像的像素之間,有一個(gè)相似之處,然后偏置給這個(gè)數(shù)據(jù)對立縮放比例以及每個(gè)類的偏置移量。
如果根據(jù)這個(gè)模板匹配的觀點(diǎn),考慮分類器,實(shí)際上,可以取這個(gè)權(quán)重矩陣的行向量,并且將他們還原為圖像。這個(gè)例子中,在圖像上訓(xùn)練好一個(gè)線性分類器,下方是數(shù)據(jù)集中訓(xùn)練到的權(quán)重矩陣中的行向量對應(yīng)于 10 個(gè)類別相關(guān)的可視化結(jié)果。
舉例來說,飛機(jī)類別的模板似乎由中間類似藍(lán)色斑點(diǎn)狀圖形和藍(lán)色背景組成,這就產(chǎn)生一種飛機(jī)的線性分類器可能在尋找藍(lán)色圖形和斑點(diǎn)狀圖形的感覺,然后這些行為使得這個(gè)分類器更像飛機(jī)。車子類別的模板能夠看到在中間有一個(gè)紅色斑點(diǎn)狀物體以及在頂部是一個(gè)擋風(fēng)玻璃的藍(lán)色斑點(diǎn)狀物體。
但這些看起來很奇怪,它不像一個(gè)真正的東西,所以就存在這樣一個(gè)問題,線性分類器每個(gè)類別只能學(xué)習(xí)一個(gè)模板,如果這個(gè)類別出現(xiàn)了某種類型的變體,那么它將嘗試求取所有那些不同變體的平均值,并且只使用一個(gè)單獨(dú)的模板來識別其中的每一類別。
另一個(gè)關(guān)于分類器的觀點(diǎn):
回歸到圖像,作為點(diǎn)和高緯空間的概念,可以想象成每一張圖像都是高維空間中一個(gè)點(diǎn),現(xiàn)在這個(gè)分類器在這些線性決策邊界上嘗試畫一個(gè)線性分類面來劃分一個(gè)類別和剩余其他類別。在左上角,看到用來訓(xùn)練的飛機(jī)樣例,通過訓(xùn)練,這個(gè)分類器會嘗試?yán)L制這條藍(lán)色直線用以劃分飛機(jī)與其他類別。
如果觀察訓(xùn)練過程,這些線條會隨機(jī)地開始,然后快速變換,試圖將數(shù)據(jù)正確區(qū)分開。
但是當(dāng)從這個(gè)高維空間角度來考慮線性分類器,就能再次看到線性分類器中可能出現(xiàn)的問題:
要構(gòu)造一個(gè)線性分類器完全失效數(shù)據(jù)樣例并不難。在左邊,假設(shè)有一個(gè)兩類別的數(shù)據(jù)集,這些數(shù)據(jù)可能全部,也可能部分是人為的。數(shù)據(jù)集有紅色和藍(lán)色兩類,藍(lán)色類是圖像中像素的數(shù)量,這個(gè)數(shù)字大于 0 并且是奇數(shù),任何像素個(gè)數(shù)大于 0 的圖像都?xì)w為紅色類別。
如果真的去畫這些不同的決策區(qū)域,能看到奇數(shù)像素點(diǎn)的藍(lán)色類別在平面上有兩個(gè)象限,甚至是兩個(gè)相反的象限。所以,沒有辦法畫出一條獨(dú)立的直線來劃分藍(lán)色和紅色,這是線性分類器的困境。
線性分類器難以解決的其他情況是多分類問題。在右側(cè),可能藍(lán)色類別存在于三個(gè)不同的象限,然后其他所有都是另外一個(gè)類別。所以對于在之前的例子中看到的像馬匹這樣的東西,當(dāng)然在現(xiàn)實(shí)中某種情況下也會出現(xiàn),在馬匹的像素空間中,可能一個(gè)頭向左看,另一個(gè)頭向右看。目前還沒有較好的方法可以在這兩個(gè)類別之間繪制一條單獨(dú)的線性邊界。
當(dāng)有多模態(tài)數(shù)據(jù)時(shí),這也是線性分類器可能有困境的地方。
線性分類器存在很多問題,但它是一個(gè)超級簡單的算法,易于使用和理解。
(完)
雷峰網(wǎng)原創(chuàng)文章,未經(jīng)授權(quán)禁止轉(zhuǎn)載。詳情見轉(zhuǎn)載須知。