1. 程式人生 > >第一章(1.2)機器學習概念圖譜

第一章(1.2)機器學習概念圖譜

一、機器學習概念圖譜

這裡寫圖片描述

二、什麼是機器學習

機器學習(machine learning)是最近非常火的一個領域,關於其一些基本定義百度百科、維基百科或者網上隨便都可以找到很多資料,所以這裡不做過多解釋。

我們解決一個問題有兩種模式:

  • 一種叫做模型驅動(model driven),通過研究物件的物理、化學等機理模型,對物件進行建模,從而解決問題,比如我們熟知的牛頓三定律,對於上面那個公式就是我們已知輸入x和機理模型f(),需要求解我們想要得到的y。

  • 另外一種叫做資料驅動(data driven),隨著人們遇到的問題越來越複雜,尋找物件機理模型的代價越來越大,反之資料獲取的代價越來越小,於是科研工作者開始從另外角度思考問題,是否可以通過這些資料來分析得到我想要的東西,即我知道一些的樣本(x,y)或者我只知道x,我想分析這些來得到物件的模型f(),進而當我再次擁有一個x的時候,我就可以得到我想要的y,如果不是那麼嚴格的來講,所有這種資料分析的方法都可以算作機器學習的範疇。

所以一個機器學習通常應該包括的基本要素有:訓練資料,帶引數的模型,損失函式,訓練演算法

  • 訓練資料作用自不必說;帶引數的模型是用來逼近f(x)
  • 損失函式是衡量模型優劣的一個指標,比如模型識別分類的準確度
  • 訓練演算法也可以叫做優化函式,用於不斷更新模型的引數來最小化損失函式,得到一個較好的模型,或者叫做學習機

三、樣本資料

樣本資料就是我們上文提到的(x,y),其中x叫做輸入資料(input data),y叫做輸出資料(output data)或者叫做一個更加專業的名字——標籤(label)。通常x和y都是高維矩陣,以x為例:

x=(x1,x2,x3,...,xi)

其中xi表示第i個輸入樣本,比如第i個文字,第i張圖片,xi可以是一維文字向量,二維圖片矩陣,三維視訊矩陣,或者更加高維的資料型別,以一維向量為例:

xi=(x1i,x2i,x3i,...,xni)

其中xni表示xi資料的第n個元素的值,比如把影象展平之後第n個畫素的灰度值等等。
標籤y根據需求不同有各種形式,以最簡單的n分類問題為例,yi就是一個n維的one-hot,其中一個值為1,其餘的元素都為0,第幾個元素為1就表明屬於第幾個類別。

四、資料集

完整的資料集表示為T={(x1,y1),(x2,y2),(x2,y2),...,(xi,yi)},對於一個學習機而言,不是所有的資料都用於訓練學習模型,而是會被分為三個部分:訓練資料、交叉驗證資料、測試資料

  • 訓練資料(training data):顧名思義,訓練資料用於訓練學習模型,通常比例不低於總資料量的一半。
  • 交叉驗證資料(cross validation data):交叉驗證資料用於衡量訓練過程中模型的好壞,因為機器學習演算法大部分都不是通過解析法得到的,而是通過不斷迭代來慢慢優化模型,所以交叉驗證資料就可以用來監視模型訓練時候的效能變化。
  • 測試資料(testing data):在模型訓練好了之後,測試資料用於衡量最終模型的效能好壞,這也是模型效能好壞的衡量指標,交叉驗證的指標只能用於監視和輔助模型訓練,不能用來代表模型好壞,所以哪怕交叉驗證的準確度是100%而測試資料的準確度是10%,那麼模型也是不能被認可的。通常交叉驗證和測試資料的比例各佔一小半。

五、特徵

特徵是機器學習和模式識別領域一個比較特有的名詞,在傳統機器學習演算法中,由於計算效能和引數的限制,所以輸入的資料維數不能太高。我們手機隨隨便便一張照片就有幾個MB的資料量,可能會有幾百萬個畫素,這麼高維的資料量我們是不能直接輸入給學習機的,因此我們需要針對特別的應用提取相對應的特徵向量,特徵向量的作用主要有兩個:

  • 降低資料維度:通過提取特徵向量,把原始資料的維度大大較低,簡化模型的引數數量。
  • 提升模型效能:一個好的特徵,可以提前把原始資料最關鍵的部分提取出來,因此可以提高學習機的效能。

在傳統的機器學習領域,如何提取一個好的特徵是大家最關心的,所以機器學習的研究很大程度變成了尋找好的特徵,因此也誕生了一個學科叫做特徵工程。以下是一個用hog特徵進行行人檢測的例子,hog特徵主要是檢測物體的輪廓資訊,所以可以用於行人檢測。

這裡寫圖片描述

六、模型

這裡的模型可能用詞不準確,但我想表達的是指:帶有一些待訓練引數,用於逼近前文提到的f(x)的引數集合。在引數空間,f(x)只是一個點,而我提到的模型也是一個點,並且由於引數可以變,所以我要做的只是讓我模型的這個點儘可能的接近真實f(x)的那個點。機器學習的模型演算法有很多,但是比較常用的模型可以概括為三種:

  • 基於網路的模型:最典型的就是神經網路,模型有若干層,每一層都有若干個節點,每兩個節點之間都有一個可以改變的引數,通過大量非線性的神經元,神經網路就可以逼近任何函式。
  • 基於核方法的模型:典型的是SVM和gaussian process,SVM把輸入向量通過一個核對映到高維空間,然後找到幾個超平面把資料分成若干個類別,SVM的核是可以調整。
  • 基於統計學習的模型:最簡單的例子就是貝葉斯學習機,統計學習方法是利用數理統計的數學工具來實現學習機的訓練,通常模型中的引數是一些均值方差等統計特徵,最終使得預測正確概率的期望達到最大。

一個好的學習機模型應該擁有出色的表達逼近能力、易程式設計實現、引數易訓練等特性。

七、監督學習與非監督學習

按照任務的不同,學習機可以分為監督學習(supervised learning)和非監督學習(unsupervised)兩種,從數學角度來看兩者的區別在於前者知道資料的標籤y而後者不知道樣本的標籤y,所以非監督學習的難度要大一點。

舉個通俗的例子,一個母親交孩子認識數字,當母親拿到一個數字卡片,告訴孩子這個是數字4是數字6,然後經過大量的教導之後,當目前拿到一個卡片問孩子這個是數字幾,這個就是監督學習。如果母親那一堆數字卡片,讓孩子把卡片按照不同數字進行分堆,母親告訴孩子他分的好不好,可能經過大量的訓練,孩子就知道如何把卡片進行正確分堆了,這個就是無監督學習的例子。用一個不那麼貼切的名詞解釋就是,監督學習可以看做分類問題,而無監督可以看做是聚類的問題。

當然還有兩種特殊的型別,叫做半監督學習強化學習,半監督學習是指部分樣本是知道標籤的,但是其他的樣本是不知道標籤。強化學習是另外一個特例,為了不混淆大家理解,這裡不做解釋,感興趣的可以自行查閱,之後我會單獨通過一篇部落格來介紹。

監督學習是簡單高效的,但是非監督學習是更加有用的,因為人工標註樣本標籤的代價是非常昂貴耗時的。

八、損失函式

損失函式(loss function)更嚴謹地講應該叫做目標函式,因為在統計學習中有一種目標函式是最大化預測正確的期望概率,我們這裡只考慮常見的損失函式。

損失函式是用來近似衡量模型好壞的一個很重要的指標,損失函式的值越大說明模型預測誤差越大,所以我們要做的就是不斷更新模型的引數,使得損失函式的值最小。常用的損失函式有很多,最簡單的如0-1損失函式:

L(y,f(x))={01y=f(x)y≠f(x)

這個損失函式很好理解,預測對了損失為0,預測錯了就為1,所以最完美的學習機的損失函式值就應該是0。當然最小二乘誤差、交叉熵誤差等損失函式也是很常用的,訓練時用的損失函式是所有訓練樣本資料的損失值的和。有了損失函式,模型的訓練就變成了一個很典型的優化問題。

九、優化函式

我們有了目標函式,也就是損失函式,現在我需要一個東西根據損失值來不斷更新模型引數,這個東西就叫做優化函式。優化函式的作用就是在引數空間找到損失函式的最優解。梯度下降法是最熟知的優化函式,大家都用下山來形象描述這個演算法。假如我們在山上,我們的目標是找到這座山的最低處(最小化損失函式),一個很簡單的思路就是我找到當前位置下山角度最大的方向,然後朝著這個方向走,如下圖所示

這裡寫圖片描述

當然這種方法有個問題就是會陷入區域性最優點(區域性凹坑)出不來,所以各種更加好的優化函式逐漸被大家發現。一個好的優化函式應該有兩個效能指標:擁有跳出區域性最優解找到全域性最優解的能力;擁有更快的收斂速度。

十、泛化能力、欠擬合和過擬合

泛化能力(generalization ability)是指機器學習模型對未知資料的預測能力,是學習方法本質上重要的性質,現實中採用最多的辦法是通過誤差來評價學習方法的泛化能力。但是這種評價是依賴測試資料集的,因為測試資料集是有限的,所以這種思路也不能說是完全靠譜,因此有人專門研究泛化誤差來更好的表達泛化能力。

欠擬合(underfitting)和過擬合(overfitting)是兩種要儘可能避免的模型訓練現象,出現這兩種現象就說明模型沒有達到一個比較理想的泛化能力。

  • 欠擬合是指模型複雜度太低,使得模型能表達的泛化能力不夠,對測試樣本和訓練樣本都沒有很好的預測效能。
  • 過擬合則相反,是模型複雜度太高,使得模型對訓練樣本有很好的預測效能,但是對測試樣本的預測效能很差,最終泛化能力也不行。

如下圖所示,1和4展示的欠擬合,3和6展示的過擬合現象。而一個好的模型應該是如2和5一樣,複雜度正合適,泛化能力較強。

這裡寫圖片描述

十一、偏差,誤差和方差

Bias(偏差),Error(誤差),和Variance(方差)三者是容易混淆的概念,首先

Error2=Bias2+Variance

Error反映的是整個模型的準確度,Bias反映的是模型在樣本上的輸出與真實值之間的誤差,即模型本身的精準度,Variance反映的是模型每一次輸出結果與模型輸出期望之間的誤差,即模型的穩定性。如下圖所示,隨著模型的複雜度增加,模型預測的偏差會越來越小,但是方差越來越大,預測結果的分佈會散開來。

這裡寫圖片描述

十二、機器學習和深度學習

目前所說的深度學習通常是指基於神經網路改進的深度學習網路,相比於傳統的神經網路,深度學習網路擁有更加高的模型複雜度,所以可以直接把原始資料輸入到學習機,不需要人工提取特徵。所以如果不從數理角度考慮,傳統機器學習和深度學習的最本質區別在於,深度學習擁有訓練高複雜度模型能力,所以可以不用人工提取特徵,即

深度學習=人工提取特徵+傳統機器學習方法

十三、準確率與召回率(Precision & Recall)

準確率和召回率是廣泛用於資訊檢索和統計學分類領域的兩個度量值,用來評價結果的質量。其中精度是檢索出相關文件數與檢索出的文件總數的比率,衡量的是檢索系統的查準率;召回率是指檢索出的相關文件數和文件庫中所有的相關文件數的比率,衡量的是檢索系統的查全率。

一般來說,Precision就是檢索出來的條目(比如:文件、網頁等)有多少是準確的,Recall就是所有準確的條目有多少被檢索出來了。

正確率、召回率和 F 值是在魚龍混雜的環境中,選出目標的重要評價指標。不妨看看這些指標的定義先:

正確率 = 提取出的正確資訊條數 / 提取出的資訊條數

召回率 = 提取出的正確資訊條數 / 樣本中的資訊條數

兩者取值在0和1之間,數值越接近1,查準率或查全率就越高。

F值 = 正確率 * 召回率 * 2 / (正確率 + 召回率) (F 值即為正確率和召回率的調和平均值)

不妨舉這樣一個例子:某池塘有1400條鯉魚,300只蝦,300只鱉。現在以捕鯉魚為目的。撒一大網,逮著了700條鯉魚,200只蝦,100只鱉。那麼,這些指標分別如下:

正確率 = 700 / (700 + 200 + 100) = 70%

召回率 = 700 / 1400 = 50%

F值 = 70% * 50% * 2 / (70% + 50%) = 58.3%

不妨看看如果把池子裡的所有的鯉魚、蝦和鱉都一網打盡,這些指標又有何變化:

正確率 = 1400 / (1400 + 300 + 300) = 70%

召回率 = 1400 / 1400 = 100%

F值 = 70% * 100% * 2 / (70% + 100%) = 82.35%

由此可見,正確率是評估捕獲的成果中目標成果所佔得比例;召回率,顧名思義,就是從關注領域中,召回目標類別的比例;而F值,則是綜合這二者指標的評估指標,用於綜合反映整體的指標。

當然希望檢索結果Precision越高越好,同時Recall也越高越好,但事實上這兩者在某些情況下有矛盾的。比如極端情況下,我們只搜尋出了一個結果,且是準確的,那麼Precision就是100%,但是Recall就很低;而如果我們把所有結果都返回,那麼比如Recall是100%,但是Precision就會很低。因此在不同的場合中需要自己判斷希望Precision比較高或是Recall比較高。如果是做實驗研究,可以繪製Precision-Recall曲線來幫助分析。