從上節已經知道perceptron不是什麼智能演算法,在它的基礎上我們需要去解決調參的問題。下面將試圖在本章內找到一些「機器學習」的工作最簡範式。出於腦容量有限,這裡儘可能考慮把枝葉都拿掉。好了,既然是調節參數的問題,總要有個目標和手段吧,看看這些大神怎麼搞的。首先從簡單的例子說起,對於生活裡面常常會面對分類的問題,比如極端情況下:在人羣中把流氓分子找出來,我們已經有3000個強姦犯和7000個普通的人的檔案記錄. 大家希望找到一個辦法,給出新的檔案,按照這個檔案的情況識別第10001個人是不是是不是流氓。好吧,這很不道德,流氓好像也顯得太多,但我們姑且這麼幹吧。首先我們先用人的模式幹一次這個事情。先把應用題要求梳理一下。

1.有10000個標記過屬性的樣本 3000犯人 7000好人。

2.每個樣本有2條屬性 貪喫程度X (對應P1)和 好色程度 Y(對應P2)以及是否是流氓A。

3.找個新的人來看看,是不是流氓。

如果運氣好,我們可以遇到上面的圖(藍色是流氓),這種樣本叫做線性可分樣本,就是說不同類型一條直線就可以割開兩半。這時同學們猛然發現,原來又貪喫又好色的基本都是流氓!!所以簡單在中間畫條線就能把這兩類人區分開來。新人一來就根據這條線一分就搞定。通過這個例子馬上可以總結出來基本工作的邏輯。

perceptron ?他不是最喜歡劃線分類麼,所以我們嘗試著找個辦法讓perceptron 自己來劃劃這條線。先來個笨的,計算機最愛循環,寫個loop把所有的可能性都試試看,最後把線畫出來,這行麼?

邏輯上這當然可以。到這裡這個perceptron已經具備"智能",而你剛才也實現了第一個學習演算法.在下很滿意,以後同類問題它都可以用這個法子解決。

所以這個「機器學習」本質上在猜則和嘗試,「學習」就是具體的方法中猜的過程。對10001個來說,誤判為流氓的可能任然存在。再看看剛才我們用人的劃線不也一樣麼,在中間位置都是可以的,4條線段對於這10000個樣本都是正取結果,既然有這麼多可能性,他們之間必然有所差異,能不能找一個好點的出來呢。所以,這裡就提出來第二個要求,那就是如何有效的評估猜測的結果,然後按照評估結果把最好的留下來。具體一點,我們用方差來評估吧(事實上你愛怎麼評估都可以,這取決於你的具體場景這個東西叫做目標函數 objective function便於理解我暫時不換說法),我們就按照最靠中間的來。這樣一個基本的「機器學習」的框架和演算法就有了。

好吧我們既然一切齊全,我們寫個代碼試試。叮咚一通敲代碼。2小時後我按下開始按鈕,搬個小板凳看它找。 這時問題來了,5小時後它還在找!原來只是試到一個可以的我們就不找了。但這次為了最優需要試完所有的可能性,才能100%能找到最優解答,血淚啊!這教育我們千萬不要見啥都亂loop(好吧我承認我沒寫這段「loop代碼」,真實的神經網路訓練特別複雜情況下可能要進行好幾天,甚至更長的時間,所以debug起來也是比較麻煩的)。所以「訓練所需的代價」是機器學習的另外一個核心問題,怎麼評估訓練的難度(越難越費時),是決定一套演算法能不能用的一項重要指標,或者說我們是否能承受對應的計算代價的評價方法。推算訓練難度比較廢數學,在這裡提出來主要是完整工作框架。問題留在這裡,細節另外開坑。

拋開存在的問題看,這種工作模式就是一類「機器學習「的基本框架。它有個高大上的名字」監督學習( supervised learning)「.也就是:利用一組已知類別的樣本調整分類器的參數,使其達到所要求性能的過程.循環裡面的過程加到一起叫做」訓練「。容易猜到有監督的就有不監督。但太多的概念一下進來會搞亂思路,等寫到DeepLearning的時候再說這個事情.

到這裡在腦袋裡面都會丟出一個問題,就這貨為啥要神經元,這哪裡像大腦了?我們隨便找個其他數學方法替換掉MPN不也能處理這個問題麼,這中間提供學習能力的只是這套工作的框架。確實如此,perceptron只是MP神經元的一種思考維度和應用方式,對一類問題它也絕對不是唯一解決方案,事實上基於決策樹和其他模式也有機器學習演算法。這裡繼續用perceptron,只是把它作為我們的追蹤主線而已。後面我們還會談到一些其他基於MP的ANN.但這套工作的邏輯框架是後續的基礎,這裡借感知機把問題說清楚,後面還要用下去。

下面的內容可以不看,調過頭來說下分類,對於數據樣本總結下來主要是三類,第一類是直接可以用perceptron搞定,也就是說單細胞perceptron完全可以解決。對第二類,非線性的可分數據用多個perceptron並行取集合也可以解決。但對於不可分樣本,本節的工作模式就得想想該如何處理了。只有解決完這三種基本情況才能將「分類」這個基本問題覆蓋完整。

對直接邏輯上判斷可不可分對右邊的樣本來說是行不通了,但按照紅線的劃法直觀上可以將「大多數」樣本分開。這「大多數」的基本邏輯實際上是具備統計意義的,通過制定具體的統計規則,「大多數問題」就可以寫成公式也能直接用代碼描述。這個問題的反向轉化就是在一個確定的劃分中,通過統計每個具體的樣本符合評估方法的程度來決定哪一種劃分更準確,這裡面的「評估方法"和"準確程度"都是可變因素,到底誰決定誰。首先的影響因素是分割效果的評估方法的確定,具體的目的是儘可能吧藍色分出來,還是把灰色分出,還是按照最少的錯誤(劃分藍色區域中灰色數量,和灰色區域種的藍色數量)劃分進行等等。直觀上看這些問題似乎沒什麼大的區別,但事實上這直接決定了"最優"的劃分線的具體位置。在確定的目的下評估方法也是確定的同時也確定一個具體劃分的"準確率"。

劃分的目的本身,是一套具體的應用問題。而一套「學習演算法」整體上要解決的目標就是在目的的前提下如何降低錯誤率。停!這裡似乎有些問題,這裡說錯誤率是不可分樣本的特性,但對於一個具體可分的應用,系統整體會也會產生"錯誤",這不是出鬼了麼。帶著這個問題,我們就需要重新考察整套學習的框架,上一節的「學習」目的是解決已知"樣本"的劃分問題,所以我們需要提升一個角度從新考慮整套思路-樣本從哪兒來的(感覺自己上當了,這坑越挖越大)。

樣本實際上是我們觀察的對象系統F(x)在一組特定輸入下輸出的一系列x-y,對於線性可分的情況下,我們用「學習」的演算法形成的新系統H(x),對非樣本內分類出現錯誤的可能是來自於F(x)和H(x)的差異,也就是說是來自學習產生的新系統的和真實情況的差異。而對非可分的情況錯誤率Err,Err本身不是"錯誤",它是特定目的產生的方法下對F(x)評估產生的結果。放下這個點,我們繼續回到perceptron對不可分的情況繼續思考。在定義了P的情況下,我們可以繼續沿用上一章的方法,讓perceptron在範圍內劃線,比較不同的H(x),P在樣本下的實際表現就可以獲得最接近真實系統F(x)的近似系統,需要指出的是,我們其實找到的是F(x)在P這個特性上的近似,而不是整體相似。這裡我暫時管獲得P的方法定義為Z(X,Y)=P,Z是獲得特性P的方法。下面這段是我的推論,也是有些眩暈的點,可能邏輯會有問題,先不管還是放進來。

文字描述確實比較繞,直接看圖。上圖中左邊是可分的情況分解,右邊是不可分的情況。Z(x,y)的設計直接來帶根本性的差異:如果Z(x,y)是線性的則不可分目標與線性可分的目標完全一致F(x)=H(x).如果Z(x,y)非線性,則可能產生其他的結果。因此需要明確,在設計目標評估這個環節上的差異會直接導致最終學習生成的系統有本質性的差異。

在這個設定中學習的最終目的是使得Z(x,H(x))和Z(x,F(x))儘可能一致,而不是直接使得H(x)=F(x).可分視為Z(x,H(x))=H(x)的特例。所以Z(x)是影響整個「學習」從一開始就引入的核心因素。甚至往往在實際的演算法中,FP和HP很難做到完全一致,很多時候僅僅是大多數一致而已。但回到起點,我們的目的是找到F(x)而不是Z(x,H(x))=Z(x,F(x)),因此需要直接評估H(x)和F(x)的符合程度。因此加入一個新標記來準確這個符合程度,在這裡我們寫作E(H,F)以表示兩個系統的傳遞函數的差異. 這個坑比較大,裡面往下都是數學推導一路要帶到VC不等式上去。好在不影響說故事的邏輯主線,另外找時間在說。

總結一下,到這裡perceptron實現了在"分類"這個特定目標上實現了自編程,並能評估我們嘗試的解出來的H(x)。你以為故事就到這裡了麼?前方還有百萬里路,主要本節中舉到的例子和選擇的方法都是按照最簡單原則選取的,符合邏輯也基本能說清楚範式的事實。對機器學習演算法熟悉的童鞋,看完本小節肯定立即想要丟鞋罵娘,抱怨我侮辱他們的智商。為避免挨罵,需要把第五部分的粗暴的處理拉回到現實的框架下來。看看真實的情況是什麼樣的。後面的閱讀過程,將刻意忽略誤差和雜訊的問題,理由仍然是簡化整套思考邏輯。我們下回合分解。

PS:前方高能,不喜公式就跳著看吧.SVM瞭解一下就算了。


推薦閱讀:
相關文章