機器學(xué)習(xí)亂記( 一)緒論
??? ????本系列專欄屬于完全沒接觸過機器學(xué)習(xí)的純小白的自習(xí)過程,屬于從零開始的養(yǎng)成。頂多有那么一neinei的小科普作用(或許沒有(bushi))。
??????? 原書有一些公式的推導(dǎo),還是需要一定的數(shù)學(xué)基礎(chǔ)的。具有一定的數(shù)學(xué)基礎(chǔ)后,再讀此書,時常有“哇哦,原來我之前學(xué)到的xx內(nèi)容竟然在這里能用到”的奇妙感受。這樣的感受實在是令人愉悅,更有再讀下去的信心。難怪本書開篇直言“本書更適合大學(xué)三年級以上的理工科本科生和研究生,以及具有類似背景的對機器學(xué)習(xí)感興趣的人士?!?/p>
????????這學(xué)期專業(yè)課四選二選了個“大數(shù)據(jù)科學(xué)與應(yīng)用技術(shù)”,課本竟然用的周志華《機器學(xué)習(xí)》。
????????筆者自知代碼以及算法水平極其低下,而且前八周課還少(后八周直接多了3門一周兩節(jié)的課(悲),別人都是后八周課少,就俺多(再悲)),提前自己看一看這個課本,全當看著玩了。
????????這個系列因為后面得開始準備考研,不一定會有很多更新。(nnd,剛在這敲著字呢,又出一門。這下更新不了了。)不過倘若萬里有一,幸運下學(xué)期有空閑時間的話,希望還會繼續(xù)學(xué)習(xí)更新。不過,這系列也可能無疾而終(希望不會)。如果真無疾而終,那這篇專欄就作為歷史的武器,狠狠地拷打我。

1.1 引言
????????機器學(xué)習(xí)致力于研究如何通過計算的手段,利用經(jīng)驗來改善系統(tǒng)自身的性能。在計算機系統(tǒng)中,“經(jīng)驗”通常以“數(shù)據(jù)”的形式存在,因此,機器學(xué)習(xí)所研究的主要內(nèi)容,是關(guān)于在計算機上從數(shù)據(jù)中產(chǎn)生“模型”(modle)的算法,即“學(xué)習(xí)算法”。有了學(xué)習(xí)算法,我們把經(jīng)驗提供給它,它就能基于數(shù)據(jù)產(chǎn)生模型??梢哉f,機器學(xué)習(xí)是關(guān)于“學(xué)習(xí)算法”的學(xué)問。
1.2 基本術(shù)語
????????進行機器學(xué)習(xí)要現(xiàn)有數(shù)據(jù)。例如收集了一批關(guān)于西瓜的數(shù)據(jù)(色澤=青綠;根蒂=硬挺;敲聲=濁響),(色澤=烏黑;根蒂=稍蜷;敲聲=沉悶)...
????????這些記錄的集合稱為“數(shù)據(jù)集”(data set),其中的每條記錄是關(guān)于一個事件或?qū)ο?西瓜)的描述,稱為一個“示例”(instance)或“樣本”(sample)。反映事件或?qū)ο笤谀硞€方向上的表現(xiàn)或性質(zhì)的事項,稱為“屬性”(attribute)或“特征”(feature);屬性上的取值稱為“屬性值”(attribute value)。屬性張成的空間稱為“屬性空間”(attribute space),或“樣本空間”(sample space)或“輸入空間”。(就像向量的x,y,z一樣)。描述每個樣本用到的屬性個數(shù)稱為樣本的“維數(shù)”。
????????從數(shù)據(jù)中學(xué)得模型的過程稱為“學(xué)習(xí)”(learning)或“訓(xùn)練”(training),學(xué)習(xí)過程通過執(zhí)行某個學(xué)習(xí)算法來完成。訓(xùn)練過程中用到的數(shù)據(jù)稱為“訓(xùn)練數(shù)據(jù)”(training data),其中的每個樣本稱為“訓(xùn)練樣本”(training sample),訓(xùn)練樣本的集合稱為“訓(xùn)練集”(staining set)。學(xué)得模型對應(yīng)了關(guān)于數(shù)據(jù)的某種潛在規(guī)律,因此也稱為“假設(shè)”(hypothesis);這種潛在規(guī)律自身稱為“真相”或“真實”(ground-truth),學(xué)習(xí)過程就是為了找出或者是逼近真相。
????????對于數(shù)據(jù)集中示例的某種判斷稱為“標記”(lable),例如((色澤=青綠;根蒂=硬挺;敲聲=濁響),好瓜),這里的“好瓜”就是一種標記。擁有了標記的示例,則稱為“樣例”(example)。用表示第i個樣例。所有標記的集合稱為“標記空間”或“輸出空間”。
????????對于預(yù)測值是離散值的學(xué)習(xí)任務(wù),例如“好瓜” “壞瓜”,此類任務(wù)稱為“分類”(classification);而預(yù)測值是連續(xù)值的學(xué)習(xí)任務(wù),稱為“回歸”。
????????我們還可以對樣本進行“聚類”(clustering),即將訓(xùn)練集中的樣本分成若干組,每組稱為一個“簇”(cluster);這些自動形成的簇可能對應(yīng)一些潛在概念的劃分,例如“淺色瓜” “深色瓜”,甚至“本地瓜” “外地瓜”。這樣的學(xué)習(xí)過程有助于我們了解數(shù)據(jù)的內(nèi)在規(guī)律,能夠為更深入地分析數(shù)據(jù)建立基礎(chǔ)。
????????根據(jù)訓(xùn)練數(shù)據(jù)是否含有標記信息,學(xué)習(xí)任務(wù)大致分為兩大類:“監(jiān)督學(xué)習(xí)”(supervised learning)和“無監(jiān)督學(xué)習(xí)”(unsupervised learning),分類和回歸是前者代表,聚類是后者的代表。
????????需要注意的是,機器學(xué)習(xí)的目標是使學(xué)到的模型能夠很好地適用于“新樣本”,而不是僅僅在訓(xùn)練樣本上工作得很好;即使是對聚類這樣的無監(jiān)督學(xué)習(xí),我們也希望學(xué)得的簇劃分適用于沒在訓(xùn)練集里出現(xiàn)過的樣本。學(xué)得模型適用于新樣本的能力稱為“泛化”(generalization)能力。通常假設(shè)樣本空間中全體樣本服從于一個未知的“分布”,我們獲得的每個樣本都是獨立同分布的。(這個假設(shè)是后面很多分析的概率論基礎(chǔ))
1.3 假設(shè)空間
????????歸納(induction)和演繹(deduction)是科學(xué)推理的兩大基本手段。前者是從特殊到一般的“泛化”過程,即從具體的事實種歸納總結(jié)出一般性規(guī)律;后者則是從一般到特殊的“特化”過程,即從基礎(chǔ)原理推演出具體情況。例如,在數(shù)學(xué)證明中由基礎(chǔ)的公理和推理規(guī)則,推導(dǎo)出與之相洽的定理,這就是一種演繹過程;而“從樣例中學(xué)習(xí)”,則是一個歸納的過程,因此也稱為“歸納學(xué)習(xí)”。
????????歸納學(xué)習(xí)有狹義和廣義之分,廣義的歸納學(xué)習(xí)大體相當于從樣例中學(xué)習(xí),而狹義的歸納學(xué)習(xí),則要求從訓(xùn)練數(shù)據(jù)中學(xué)得概念(concept),因此也稱為“概念學(xué)習(xí)”。要學(xué)得泛化性能好且語義明確的概念實在是太困難了,所以概念學(xué)習(xí)技術(shù)目前研究、應(yīng)用都比較少。但對概念學(xué)習(xí)有所了解,有助于理解機器學(xué)習(xí)的一些基礎(chǔ)思想。
????????概念學(xué)習(xí)中,最基本的是布爾概念學(xué)習(xí),即對“是”或“不是”這樣可表示為0/1布爾值的目標概念學(xué)習(xí)。
????????例如,我們要利用這個訓(xùn)練數(shù)據(jù)集來進行學(xué)習(xí),判斷什么樣的瓜是好瓜。

????????為了判斷不在訓(xùn)練數(shù)據(jù)集中的一個瓜是否是“好瓜”,我們可以把學(xué)習(xí)過程看作一個在所有的假設(shè)組成的空間中進行搜索的過程,搜索的目標是找到與訓(xùn)練集“匹配”的假設(shè),即能夠?qū)⒂?xùn)練集中的瓜判斷正確的假設(shè)。假設(shè)的表示一旦確定,假設(shè)空間及其規(guī)模大小就確定了。這里的假設(shè)空間由形如“(色澤=?)(根蒂=?)
(敲聲=?)”的可能取值構(gòu)成。假設(shè)色澤(例如青綠/烏黑/淺白)、根蒂、敲聲均各有三種可能值。
????????那么,對于一個可能的“好瓜判斷定理”:
“好瓜(色澤=x)
(根蒂=y)
(敲聲=z) ”
????????其中的x,y,z均有4種取值(三種可能取值,以及通配符"*"——表示是否是好瓜與這個屬性無關(guān))。還有一種極端情況:有可能“好瓜”這個概念根本不成立,世界上沒有“好瓜”,“好瓜”這個集合是一個空集,即:“好瓜。
????????所有這些4×4×4+1=65種可能的“好瓜判斷定理”,構(gòu)成了這個學(xué)習(xí)任務(wù)的假設(shè)空間。

????????可以有很多種策略對這個假設(shè)空間進行搜索,例如自頂向下、從一般到特殊,或是自底向上、從特殊到一般,搜索過程種可以不斷刪除與正例不一致的假設(shè)和(或)與反例一致的假設(shè)。最終獲得與訓(xùn)練集一致(對所有訓(xùn)練樣本能夠正確判斷)的假設(shè)。這樣滿足與訓(xùn)練集一致的假設(shè)可能存在不止一個,對于存在的一個與訓(xùn)練集一致的假設(shè),我們稱之為“版本空間”。
????????這樣從假設(shè)空間中找路徑進行學(xué)習(xí)的過程,給我的感覺很像給定幾個點,畫出過這些點的函數(shù)圖像。在沒有嚴格給定要求的情況下,這樣的函數(shù)圖像當然不止一個,也就對應(yīng)著學(xué)習(xí)結(jié)果的多個版本空間。

1.4 歸納偏好
????????通過學(xué)習(xí)得到的模型對應(yīng)了假設(shè)空間中的一個假設(shè)(也就是“版本空間”),不同的版本空間面對新的測試集的數(shù)據(jù)時會有不同的結(jié)論,對于同一個瓜,在一個版本空間中,可能是一個“好瓜”,而在另一個版本空間中,可能就不是一個好瓜。就像兩個人去賣瓜,小豬同學(xué)覺得“我今天寧缺毋濫,我今天一定要買到嚴格要求的好瓜”,而大豬同學(xué)覺得“今天有比較不錯的瓜就可以了,能吃到就行”。
????????像這樣機器學(xué)習(xí)算法在學(xué)習(xí)過程中對某種假設(shè)類型的偏好,稱為“歸納偏好”(inductive bias)。
????????任何一個有效的機器學(xué)習(xí)算法都必然有其歸納偏好,否則它將被假設(shè)空間中看似在訓(xùn)練集上“等效”的假設(shè)所迷惑,而無法產(chǎn)生確定的學(xué)習(xí)結(jié)果。就這個瓜,今天必須告訴我它是好瓜還是壞瓜,不許說不知道!
????????歸納偏好的作用在數(shù)學(xué)圖像上更容易觀察,過樣本點,可以畫出較為平滑的曲線,也可以畫出崎嶇的曲線。

????????歸納偏好可看作學(xué)習(xí)算法自身在一個可能很龐大的假設(shè)空間中對假設(shè)進行選擇的啟發(fā)式或“價值觀”。有一個一般性的原則在引導(dǎo)算法確立“正確的”偏好:“奧卡姆剃刀”原則:“若有多個假設(shè)與觀察一致,則選擇最簡單的那個”。這里的“簡單”是由我們自己選擇的,例如如果這里我們認為“平滑”對應(yīng)“簡單”。那么我們就選擇A曲線。而當我們不容易判斷什么是“更簡單”時,這樣的“剃刀”也就無法給我們提供有效的幫助了。
????????事實上,歸納偏好對應(yīng)了學(xué)習(xí)算法本身所做出的關(guān)于“什么樣的模型更好”的假設(shè)。在具體的顯示問題中,這個假設(shè)是否成立,即算法的歸納偏好是否與問題本身匹配,大多數(shù)直接決定了算法能否取得更好的性能。

????????那么,從上面我們知道:判斷一個模型的“好壞”,需要看它是否與實際相匹配。那么,我們好像有一種樸素的直覺:是不是在某種意義上,所有的模型都是“沒有區(qū)別”呢?
????????是的。所有針對同一訓(xùn)練集的模型,都有一個一致的特性:每個算法的總誤差都相等。
????????利用公式表示如下:
????????假設(shè)樣本空間和假設(shè)空間
都是離散的。令
代表算法
基于訓(xùn)練數(shù)據(jù)X產(chǎn)生假設(shè)
的概率,再令
代表我們所希望學(xué)習(xí)的真實目標函數(shù)。則,此算法在訓(xùn)練集之外的所有樣本上的誤差為:
其中為指示函數(shù),若為真則取1,否則取0。
????????考慮二分類問題,且真實目標函數(shù)可以是任何函數(shù),函數(shù)空間為
.對所有可能的
按均勻分布誤差求和,有:
????????我們可以看到,上面的這個總誤差公式與算法無關(guān)。也就是說,無論一個學(xué)習(xí)算法多聰明,另一個學(xué)習(xí)算法多笨拙,它們的期望性能都相同!這就是“沒有免費的午餐”定理(No Free Lunch Theorem,簡稱NFL定理)。
????????那所有的算法的期望性能都相等,我們還有什么好研究的呢?
????????注意到,在NFL定理的簡短論述過程中,我們假定了的均勻分布,而實際情況并非如此。實際生活中,真實的目標函數(shù)并不一定是均勻分布的,例如在現(xiàn)實中,一個高手是憨蛋的可能性和一個憨蛋是高手的可能性是并不能一概而論的。
????????所以NFL定理最重要的寓意,是讓我們認識到,脫離具體問題,空泛地談?wù)摗笆裁磳W(xué)習(xí)算法更好”是沒有意義的。如果考慮所有潛在的問題,那么所有的學(xué)習(xí)算法都一樣好。要談?wù)撍惴ǖ南鄬?yōu)劣,必須要針對具體的學(xué)習(xí)問題;在某些問題上表現(xiàn)好的學(xué)習(xí)算法,在另一些問題上可能不盡人意。學(xué)習(xí)算法自身的歸納偏好是否與問題匹配,往往起到?jīng)Q定作用。
????????以上就是“西瓜書”里第一章緒論的大致內(nèi)容。

????????最后,既然這一章是緒論,那我們最后再從究極萌新的角度聊一些有的沒的,下面的這些內(nèi)容幾乎一定有一些不足乃至錯誤。僅屬于我這個只看了這一點點緒論和網(wǎng)上各種奇妙解釋的門外漢的閑言碎語,大家看一樂呵。

????????這本《機器學(xué)習(xí)》的序言第一句話是這樣的:“在人工智能界有這樣一種說法,認為機器學(xué)習(xí)是人工智能領(lǐng)域中最能夠體現(xiàn)智能的一個分支。從歷史來看,機器學(xué)習(xí)似乎也是人工智能中發(fā)展最快的分支之一。”機器學(xué)習(xí)最能夠體現(xiàn)“智能”,那么所謂“智能”是什么含義呢?
????????單從我讀完這個緒論來看,機器學(xué)習(xí)的內(nèi)容似乎就只是從訓(xùn)練集里學(xué)習(xí),得到模型,并將這個模型應(yīng)用到新的樣本。這的確是挺“智能”的:從訓(xùn)練集里學(xué)到的內(nèi)容能夠較為精確地應(yīng)用到?jīng)]見過的樣本中。但這樣的“智能”似乎局限在了人工智能的工具屬性,學(xué)習(xí)器僅作為一個工具來實現(xiàn)我們想要的功能,就像洛芙萊斯命婦(盡管我并不知道這個人是誰)在傳記里寫到:“分析機并不自稱能創(chuàng)造任何東西。它能做任何我們知道怎樣命令它去做的事情”(黑體是她用的)。
????????即使這樣的工具能夠完成我們意想不到的任務(wù)(加粗是我用的)。如果一個人工智能程序想出了一個主意、或一個下棋的策略(例如圍棋比賽中產(chǎn)生的“柯潔·AlphaGo”定式;以及圍棋被調(diào)侃從棋手間的斗智斗勇,變?yōu)榱撕虯I對答案),而這是其設(shè)計者所從未想到的————那該歸功于誰呢?一個程序如何才有獨創(chuàng)性呢?
????????著名的例子之一是一個為初等歐氏幾何中的定理尋找證明的程序。這個程序的設(shè)計者是赫伯特·吉倫特。有一天,這個程序為一個基本的幾何定理找到了一個精妙絕倫的證明。這個定理就是所謂的“驢橋定理——等腰三角形的兩個底角相等”。它得到這個諢名,是因為頭腦簡單的人很難通過它。
????????這個定理的標準證明是由頂點向底邊作高,證明兩個直角三角形全等(HL)。這個程序發(fā)現(xiàn)的高明方法不需要輔助線,而是將這個等腰三角形和它的鏡像看成兩個三角形,這兩個三角形全等,進而得到底角相等,即。

????????雖然在公元300年,帕普斯已經(jīng)發(fā)現(xiàn)了這個證明,但這并沒有使這項成就黯然失色。程序發(fā)現(xiàn)這個證明該歸功于誰呢?這算不算一個智能行為呢?還是說這個證明本來藏在吉倫特心里,只是程序使它浮到表面上來了?
????????似乎完全可以這樣說:如果我們能把程序的行為歸因于其中某些被迫蹤的操作,那在某些意義上,程序所做的只不過使揭示出那些本質(zhì)上使埋藏在—雖然并不很深—程序設(shè)計者頭腦中的想法。相反地,如果對程序的追蹤無助于說明為什么這個特定的發(fā)現(xiàn)得以產(chǎn)生,那么,程序的“頭腦”也許就應(yīng)當和其設(shè)計者的頭腦加以區(qū)別了。程序的構(gòu)造歸功于人,但不能說他在頭腦里已經(jīng)有了程序所產(chǎn)生的那些想法。在這種情況下,人可以被說成是“元作者”——即作者的作者,而程序是(普通的)作者。
????????在這個“驢橋定理”的例子中,程序產(chǎn)生這個證明的機制離程序表面還是太近了。這使我們難以毫不猶豫地認為這個程序本身就有資格被稱為一個幾何學(xué)家。如果它能夠一而再、再而三地提出機智地令人吃驚的新證明,而且其中的每一個看起來都是基于天才的思想火花,而不是基于某種標準方法,那時候我們會坦然地把這個程序稱為一個幾何學(xué)家————但這種情況尚未出現(xiàn)。
????????那么,我們再來看現(xiàn)在比較出圈的Alphago以及OpenAI-GPT,目前我覺得他倆只算是一種工具,它們并沒有產(chǎn)生那種機智得令人吃驚的想法,也沒有產(chǎn)生像小說中“550w”那樣“延續(xù)人類文明的最優(yōu)選擇是毀滅人類”的令人驚駭?shù)呐袛嗯c自我意識。所以,他倆只算是“元作者”手下的優(yōu)秀作者。
????????圖靈假想了這樣一小段對話:
問:請以福斯大橋為題寫一首十四行詩。
答:這可把我難倒了。我從來不會作詩
問:把34975和70764相加。
答:(停了大約30秒然后給出答案)105621。
問:你會下國際象棋嗎?
答:會。
問:我就剩一個國王在K1,沒有別的子了,而你有一個國王在K6,一個車在R1,該你走棋, ????????你怎么走?
答:(聽了大概15秒),車到R8,將軍!
??????? 可能很少有人注意到,在那個算術(shù)問題中,不但反應(yīng)時間出奇地長,而且連答案也是錯的!如果回答者是人,那這很容易解釋,不過是計算錯了而已。但如果回答者是機器,就可能有許多不同的解釋,例如:
(1).一個硬件層次上地運行偶然失誤(即不可再現(xiàn)地以外故障);
(2).一個無意中出現(xiàn)的硬件或軟件故障,它可能造成計算錯誤(可再現(xiàn)的);
(3).一個該機器的程序員有意插入的花招,它可能不時造成算數(shù)運算的錯誤,以此來迷惑提問人。
(4).一個不可預(yù)測的旁效現(xiàn)象:程序由于長期艱苦的抽象思維,偶然出了點錯誤,下次就不會出現(xiàn)了。
(5).一個機器自己想出來的玩笑,故意戲弄詢問人。
????????不妨做一個大膽的想象,有沒有可能在龐大的數(shù)據(jù)集與訓(xùn)練量下,某些我們?nèi)祟惒煊X不到的數(shù)據(jù)(或許在人類眼中八竿子打不著的東西)在機器中經(jīng)過訓(xùn)練、結(jié)合,讓機器產(chǎn)生了奇特的“超意識”,甚至已經(jīng)凌駕于人類之上,在人機交互中戲弄人類呢?
????????這似乎就要追溯到“心智是如何產(chǎn)生”以及“大腦和思維”有關(guān)內(nèi)容了。關(guān)于那些內(nèi)容,我這個純萌新、門外漢也就完全不了解了。不過我覺得,機器的“自我意識”是會出現(xiàn)的,只不過應(yīng)該在比較遙遠的未來了(可惡,難道機器老婆只能留給后人了嗎!)。
????????最后放一個有關(guān)人工智能的進展相關(guān)的“定理”:一旦某些心智功能被程序化了,人們很快就不再把它看作“真正的思維”的一種本質(zhì)成分。智能所固有的核心永遠是存在于那些尚未程序化的東西之中?;蛘哒f:“人工智能是尚未做到的東西”。
????????不得不說,這個緒論內(nèi)容似乎有點雜亂(李老C銳評:useless!不值當花費如此時間?。2贿^,在寫這個緒論的過程中,的確引起了我對機器學(xué)習(xí)以及人工智能的好奇,盡管我現(xiàn)在還是一個完全沒有算力的菜狗萌新。但一篇緒論的一個意義不就是引起讀者對一門學(xué)科的興趣和初步了解,不是嗎?所以,我認為這本書的緒論是一篇成功的緒論。