1. 程式人生 > >機器學習——15分鐘透徹理解感知機

機器學習——15分鐘透徹理解感知機

前言

隨著17年阿爾法狗(AlphaGo)擊敗人類職業圍棋選手、戰勝圍棋世界冠軍,AI、人工智慧等詞彙也成為了時下人們追求的一個潮流,各種相關產業和人工智慧為主題的創業公司也如雨後春筍般相繼湧現,因此人工智慧也成為了2017年的關鍵詞。關於人工智慧的概念從計算機誕生之初就已經有了,1936年艾倫·圖靈(Alan Turing)提出了著名的 “圖靈機”(Turing Machine)的設想,在十多年後,其為了明確機器是否具備智慧更是提出了著名的圖靈測試。因此在過去的半個多世紀,人工智慧其實不算什麼新鮮的話題,甚至許多好萊塢大片都不吝以此概念作為噱頭,比如黑客帝國人工智慧機械姬等(PS:絕沒有推薦電影的意思)。但是處在21世紀的我們聽到這些概念時仍然會不自覺的感到興奮,因為這是第一次科技的力量讓我們感受到科幻與現實離我們是如此的接近,也正是在這個資訊高度聚合與高速傳播的時代,使我們大部分人都能夠參與到其中,去實現每個人心中的科幻夢。

注意事項

技能要求

接下來的知識不會涉及到高深的數學知識,對程式設計的要求也是極低,並且所有涉及到的知識點都會用通俗的語言進行解釋,所以不要擔心數學不夠好,不會程式設計等問題。當然,便於理解本文,如果你數學基礎足夠好那是那是有好處的。同時關鍵部分將會給出某些重要資訊的解釋或是數學名詞的解釋連結,在閱讀本文過程中適當的去理解其中的某些概念是有必要的,必要的時候還請停下閱讀進度確定自己已經理解。最後希望在看完這篇文章後能夠讓你產生對數學和機器學習的濃厚興趣。所以Come on!請花15分鐘認真看完!請花15分鐘認真看完!請花15分鐘認真看完!

內容概述

接下來我們將從機器學習中最基礎的模型感知機(Perceptron)

出發去探索機器學習的奧祕,在這兒我們可以不用理解它是什麼意思,也不用去查各種資料使自己迷失在知識的海洋裡,花15分鐘時間仔細讀完本文,你將瞭解人工智慧現在真正的樣子,同時你也將正式開始入門人工智慧這個領域。人類在統計與概率的基礎上建立起了人工智慧這麼一套體系,在今天這麼個日新月異的世界,也是越加的蓬勃發展。雖然人工智慧的內容涵蓋很廣,但是其主線脈絡卻是明確的,從發現問題,分析問題再到解決問題,在發展出的那一套基礎框架下,人工智慧在眾多的領域遍地開花,產生了許許多多應用於不同領域的新奇想法。因此我們在追逐學科前沿,面多眾多令人眼花繚亂的模型或演算法時,夯實自己的基礎,提升自己發現問題並解決問題的能力顯得更加總要。

機器學習的核心

機器學習已經成為一門完整的學科,在學科建設的基礎上,已經出現了針對機器學習領域標準的研究方法和技巧。下圖展示了機器學習的三要素,也是其核心內容。

Machine_Learning_3item

從分類問題開始

分類在我們日常生活中很常見,商品分類,垃圾分類,食物分類……這些分類的場景在我們的生活中都是司空見慣的。正因為司空見慣,所以就讓人感覺分類是理所當然的事,其過程也沒有任何難度。但這簡單的事兒對機器而言卻並不是那麼簡單。如果要讓機器來完成各種分類它能不能完成呢?答案是能,只要我們為特定的機器設定特定的規則使它能迴圈運轉起來就行,而這兒那個規則就是分類的關鍵。比如將商場賣的橘子分成兩類,一類長得好看的為橘子君A,一類長得難看的為橘子君B,這兒有一個規則Rule,能夠判斷一個橘子是好看還是不好看,那麼將Rule告訴這個機器豈不是完美?以後再也不用擔心吃不到好看的橘子了。

橘子

好吧跑偏了,通過上面舉的的例子其實就能夠看到人工智慧研究中的一個重要步驟——選擇模型。橘子分類中的Rule就是需要選擇的模型,有了模型,有了Rule,機器才能知道它拿到一個橘子應該怎麼做。那麼現在有了模型還要幹什麼?如果那模型是我們從一個有限的樣本空間中通過嚴格的推導得到的,並且我們也只將該模型應用於該有限樣本空間,那麼就沒有什麼事兒需要做了,但實際上這在現實中是不可能的,因為我既然從那一堆橘子推匯出了一個模型,那那堆橘子就肯定已經被我們全都分好類了,那這個模型拿來還有什麼意義?雖然從上面的角度我們似乎做了無用功,但統計學的知識卻給了我們啟發。那就是,我們推匯出來的模型除了應用於我們用於推導模型所用的那堆橘子外,很大概率還能應用於那些還沒有被分類的橘子。從概率論統計學的觀點上看,這是正確的。因為我們以橘子的美醜對橘子進行分類,而美和醜是那些橘子所共有的一些特徵。就好比人,每個人都長著五官,在一小群人中我們以一個標準區分其中的美醜,那麼將這個標準應用於全體人當中也是可行的,但也可能出現我們的標準無法區分的情況發生。

好了,到這兒有沒有想到些什麼?由概率論的知識我們能夠想到,從部分資料中尋找其中我們關注的共性特徵對其進行識別分類,那麼這些共性特徵也能夠幫助我們識別分類那些未知的資料,這就是基於概率與統計學習的機器學習的核心原理與思想。看吧,其實很多感覺高深的知識就是我們身邊隨處可見的問題。有了這個思想有沒有對機器學習的概念有一個初步的瞭解呢?機器從我們給的資料學習一個能夠正確解決問題的方法,我們再用那個方法去應用到我們的實際問題中去,而那個方法就是上面多次提到的模型。

在二維平面中怎麼分類?

讀到這兒的朋友應該對機器學習還有較深的困惑,但這不要緊,現在需要你發揮一定的想象能力。同時如果手邊有筆和紙也請拿起筆跟我一起畫一個二維座標系,這個座標系是一個二維空間,在這個空間中分佈著無數點它們都是這個二維世界的原住民,現在你是這個世界的上帝,你隨意在這個空間中畫了一條看不見直線,裡面的人被你分成了兩類A和B,分別位於直線兩側。下圖展示了在平面上的一條直線2xy+3=0將平面上的點分成兩類,

有一天,這個二維世界中穿越來了一個從三維世界來的人C,小C遇見了很多這個世界的人,他發現了這個世界上的人被分成了A,B兩類。並且這些被分成兩類的人類別存在較明顯的位置特徵,於是小C想了一個辦法來描述這個世界上被分成兩類的人,即假設這個世界的人可以用一條直線來劃分。小C想到的辦法如下:

f(x)=sign(x)={11x>0x<=0 y=f(wx+b),x

通過以上計算方法,能夠將所有二維世界中的原住民分成兩類,也就是以每個原住民的座標為引數,通過模型計算結果為1的為一類,為-1的為另一類,So easy有木有!到目前為止小C離成功猜到你是怎麼給這個二維世界的原住民分類的又近了一步。小C還需要什麼?它需要知道wb的值是什麼。它們顯然是兩個模型必須的引數值,這兩個引數值影響著分類模型的結果,而現在要怎麼來確定這兩個值呢?可能有人會很快想到,我們拿一組二維人的座標資料和它的實際分類作輸入去算不就行了嗎?是的,我們需要以有限的輸入去算這兩個值,許多人到這兒就迷茫了,怎麼算?對於怎麼算的問題才是機器學習中的關鍵,回到上面的模型,我們要開始算就需要一個明確的w,b值,這與我們所要解決的問題相矛盾了,因此只能假設一個初始值。這個初始值是什麼不重要,重要的是正因為有了一個初始值小C的這個模型成為了一個可以實際進行運算的模型了,而我們運算的目的也就變成了不斷進行迭代運算使得w,b的值不斷向著接近這個世界分類真相的方向前進。自然的我們得到如下兩個基本策略(迭代過程該怎麼做的方法):

  1. 模型運算結果與實際結果相符,不做任何額外操作,繼續輸入新的資料
  2. 模型運算結果與實際結果不符(誤分類),調整w,b的值,使得其朝真相的方向逐步靠近

到這兒我想大家應該知道需要做什麼了,那就是找到一個方法來調整w,b的值。在討論該怎麼調整w,b的值之前先來想想進行這些計算的目的,其目的顯然是為了得到一組w,b,使得模型運算與實際結果不符的數量最小。在機器學習中,稱這麼一個關於w,b的函式叫做損失函式,將損失函式極小化(極小化即求極小值)的過程就是求w,b的過程,而損失函式的一個自然選擇是誤分類的總數(自然選擇就是最接近人類思維方向邏輯推斷),但這樣的話損失函式就不是w,b的連續可導函式。這兒為什麼要求損失函式是關於w,b的連續可導函式,因為只有函式是連續可導的,我們才能方便的在該函式上確定極大值或極小值,對於這個問題可參考此處。好了,損失函式不適合表示為誤分類點的總數,那麼能尋找其它表現形式。這兒有一個選擇就是將被誤分類的所有點距離模型表示直線或平面的總距離作為損失函式的意義。這也是我們能想到的最自然的表示了,比如當點被誤分類,誤分類點肯定出現在了當前模型的錯誤一側,我們的有效矯正方式就是調整w,b的值使得模型表示平面/直線往該點的方向平移一定距離,也就是縮小它們之間的距離,但是在最優化問題當中,我們對於單點來說可能使其達到最優了,即誤差點相對模型的距離為0了,但對於這個空間中的所有點來說,可能反而會隨著單個點這樣的調整而出現更多的誤差點,因此我們需要保證w,b的調整總是朝著好的方向進行,也就是總體誤差點最少,換成距離的概念就變成了誤差點距離平面/直線的總長度最小,這樣就能保證我們訓練得到的模型最接近真實模型。由點到平面的距離公式我們可以得到任意一點距離我們上面定義的模型的距離為:

len(xi)=1w|wxi+b|
在這裡不加證明地給出這個公式,如果有興趣自己推導的同學可參考點到平面距離公式的七種推導方法探討,這裡需要解釋的一點是因為我們的模型有兩個變數x(xRn)y,(y1,1),所以在這兒所謂的距離實際是指的我們的模型包含的某一維度的距離,更科學的描述稱為到超平面的距離,因此大家在計算距離公式時切記一點,針對f(x)=wx+b這個形式來求距離時,可能有人會很困惑,總感覺上面的距離公式是錯的?其實從我們的場景來說,這個模型函式中的x實際上是一個向量,即它包含兩個維度的值。這樣我們就可以將能夠影響一個點位置資訊的x維度上的值和y維度上的值一起進行評估來得到一個綜合的評估值。這一點從我們遇到的問題出發去看也是顯而易見的,因為設計的這個分類方法中,實際輸入就是一個座標點,輸出是一個其它值。因此針對上面的公式也就不難理解了,其結果實際上是求到w1x1+w2x2+b=0平面的距離。在這兒必須要理解這點,這將使我們更清晰的看出目前以及之後的所有公式推導的理由及意義。如果還是不能理解也沒關係,只要知道為了明確知道模型的好壞,需要有一個方法來對其進行評估,在這兒我們只是選取了距離這個概念來描述模型的好壞,在其它更多場景中還有更多其它各種各樣的方法,而重要的是能夠在各種複雜場景中找到一個合適高效的方法。

有了計算距離的方式,下面我們來看看損失函式究竟怎麼定義。由於對於模型來說,在分類錯誤的情況下,若wxi+b>0,則實際的yi應該是等於-1,而當wxi+b<0時,yi等於1,因此由這個特性我們可以去掉上面的絕對值符號,將公式轉化為:

len(xi)=1wyi(wxi+b)

如此得到最終的損失函式為:

L(w,b)=xiMlen(x