機器學習&深度學習基礎(目錄)


從業這么久了,做了很多項目,一直對機器學習的基礎課程鄙視已久,現在回頭看來,系統的基礎知識整理對我現在思路的整理很有利,寫完這個基礎篇,開始把AI+cv的也總結完,然后把這么多年做的項目再寫好總結。

參考:機器學習&深度學習算法及代碼實現

學習路線
第一步:數學
主要為微積分、概率統計、矩陣、凸優化


第二步:數據結構/算法
常見經典數據結構(比如字符串、數組、鏈表、樹、圖等)、算法(比如查找、排序)
同時,輔助刷leetcode,提高編碼coding能力


第三步:Python數據分析
掌握Python這門語言、和基本的數據分析、數據處理知識


第四步:機器學習
掌握常見經典的模型/算法(比如回歸、決策樹、SVM、EM、K近鄰、貝葉斯、主題模型、概率圖模型,及特征處理、模型選擇、模型選擇等等)
同時,輔助刷kaggle,培養對數據、特征的敏銳


第五步:深度學習
掌握神經網絡、CNN、RNN、LSTM等常見經典模型、以及三大DL框架
同時,配套課程利用TensorFlow等開源框架做做DL等相關實驗:http://blog.csdn.net/v_JULY_v/ ... 61301

第六步:CV應用擴展

幾個基礎的概念:

一個機器學習通常應該包括的基本要素有:訓練數據,帶參數的模型,損失函數,訓練算法。訓練數據作用自不必說;帶參數的模型是用來逼近f();損失函數是衡量模型優劣的一個指標,比如模型識別分類的准確度;訓練算法也可以叫做優化函數,用於不斷更新模型的參數來最小化損失函數,得到一個較好的模型,或者叫做學習機。接下來將介紹一些機器學習中的基本概念,可能沒有很強的連貫性。

樣本數據

樣本數據就是我們上文提到的(x,y),其中x叫做輸入數據(input data),y叫做輸出數據(output data)或者叫做一個更加專業的名字——標簽(label)。通常xy都是高維矩陣,以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的數據量,可能會有幾百萬個像素,這么高維的數據量我們是不能直接輸入給學習機的,因此我們需要針對特別的應用提取相對應的特征向量,特征向量的作用主要有兩個:

  1. 降低數據維度:通過提取特征向量,把原始數據的維度大大較低,簡化模型的參數數量。
  2. 提升模型性能:一個好的特征,可以提前把原始數據最關鍵的部分提取出來,因此可以提高學習機的性能。

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

 

 

模型

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

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

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

監督與非監督學習

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

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

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

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

損失函數

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

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

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


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

 

優化函數

我們又了目標函數,也就是損失函數,現在我需要一個東西根據損失值來不斷更新模型參數,這個東西就叫做優化函數。優化函數的作用就是在參數空間找到損失函數的最優解。梯度下降法是最熟知的優化函數,大家都用下山來形象描述這個算法。假如我們在山上,我們的目標是找到這座山的最低處(最小化損失函數),一個很簡單的思路就是我找到當前位置下山角度最大的方向,然后朝着這個方向走,如下圖所示 
這里寫圖片描述 
當然這種方法有個問題就是會陷入局部最優點(局部凹坑)出不來,所以各種更加好的優化函數逐漸被大家發現。一個好的優化函數應該有兩個性能指標:擁有跳出局部最優解找到全局最優解的能力;擁有更快的收斂速度。

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

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

欠擬合(underfitting)和過擬合(overfitting)是兩種要盡可能避免的模型訓練現象,出現這兩種現象就說明模型沒有達到一個比較理想的泛化能力。欠擬合是指模型復雜度太低,使得模型能表達的泛化能力不夠,對測試樣本和訓練樣本都沒有很好的預測性能。過擬合則相反,是模型復雜度太高,使得模型對訓練樣本有很好的預測性能,但是對測試樣本的預測性能很差,最終泛化能力也不行。如下圖所示,1和4展示的欠擬合,3和6展示的過擬合現象。而一個好的模型應該是如2和5一樣,復雜度正合適,泛化能力較強。

這里寫圖片描述

欠擬合與過擬合

1.欠擬合:生成的擬合函數過於簡單(例如 h(θ)=θ0+θ1x1

2.過擬合:生產的擬合函數過於精確(例如h(θ)=θ0+θ1x1+...+θ6x6

image

  上圖中,左圖就是欠擬合的情況,曲線不能夠很好的反映出數據的變化趨勢;而右圖是過擬合的情況,因為曲線經過了每一個樣本點,雖然在訓練集上誤差小了,但是曲線的波動很大,往往在測試集上會有很大的誤差。而中間圖則是比較好的曲線。

  當訓練數據量很少時,容易發生過擬合,因為曲線會擬合這些少量數據點,而這些數據點往往不能代表數據的總體趨勢,導致曲線波動大以及發生嚴重偏離。

  欠擬合時,模型在訓練集和測試集上都有很大誤差(高偏差);過擬合時,模型在訓練集上可能誤差很小,但是在測試集上誤差很大(高方差)。如果模型在訓練集上誤差很大,且在測試集上的誤差要更大的多,那么該模型同時有着高偏差和高方差。

  防止欠擬合方法:不要選用過於簡單的模型

  防止過擬合方法:不要選用過於復雜的模型;數據集擴增(可以是尋找更多的訓練集,也可以是對原訓練集做處理,比如對原圖片翻轉縮放裁剪等);正則化;Early stopping(在測試集上的誤差率降到最低就停止訓練,而不是不斷降低在訓練集上的誤差)


L1正則化和L2正則化

L1正則化:在誤差函數的基礎上增加L1正則項: 

 
C=C0+λnw|w|


L2正則化:在誤差函數的基礎上增加L2正則項: 

 
C=C0+λ2nww2


  L1正則化和L2正則化都能夠防止過擬合。簡單的來說,權值w越小,模型的復雜度越低(當w全為0時模型最簡單),對數據的擬合剛剛好(也就是奧卡姆剃刀法則)。如果從更加數學的解釋來看,我們看下圖:

 

image 
  可以看出,過擬合的時候,曲線要顧及每一個點,最終形成的擬合函數波動很大。這就意味着函數在某些小區間里的導數值(絕對值)非常大。而由於自變量值可大可小,所以只有系數足夠大,才能保證導數值很大。

  L1正則化對應着Lasso回歸模型,L2正則化對應着嶺回歸模型。Lasso(L1正則化)得到的w往往比較稀疏,會出現很多0,因此能夠剔除無用特征(降維)。


分類和回歸

  分類:輸入新樣本特征,輸出類別(離散)。常見模型有:Logistic回歸,softmax回歸,因子分解機,支持向量機,決策樹,隨機森林,BP神經網絡,等等

  回歸:輸入新樣本特征,輸出預測值(連續)。常見模型有:線性回歸,嶺回歸,Lasso回歸,CART樹回歸,等等

參數學習算法和非參數學習算法

  參數學習算法:模型有固定的參數列表θ0,θ1...(比如線性回歸)

  非參數學習算法:模型中參數的數目會隨着訓練集的增加而線性增長,或者參數的值會隨着測試集的變化而變化(比如局部加權回歸LWR就屬於非參數學習算法)


偏差和方差

  偏差:描述的是預測值(估計值)的期望與真實值之間的差距。偏差越大,越偏離真實數據。 高偏差對應的是欠擬合。高偏差時,模型在訓練集和測試機上都有很大誤差。

  方差:描述的是預測值的變化范圍,離散程度,也就是離其期望值的距離。方差越大,數據的分布越分散。 高方差對應的是過擬合。高方差時,模型在訓練集上的誤差很小,但是在測試集上的誤差很大。

  如果模型在訓練集上誤差很大,且在測試集上的誤差要更大的多,那么該模型同時有着高偏差和高方差。


監督學習和無監督學習

  監督學習:訓練集中的每個樣本既有特征向量x,也有標簽y。根據樣本的y來對模型進行“監督”,調整模型的參數。監督學習對應的是分類和回歸算法。

  無監督學習:訓練集中的每個樣本只有特征向量x,沒有標簽y。根據樣本之間的相似程度和聚集分布來對樣本進行聚類。無監督學習對應的是聚類算法。


分類和聚類

  分類:事先定義好了類別,類別數不變。當訓練好分類器后,輸入一個樣本,輸出所屬的分類。分類模型是有監督。

  聚類:事先沒有定義類別標簽,需要我們根據某種規則(比如距離近的屬於一類)將數據樣本分為多個類,也就是找出所謂的隱含類別標簽。聚類模型是無監督的。


判別模型和生成模型

  判別模型:由數據直接學習決策函數Y=f(X)或者條件概率分布P(Y|X)作為預測的模型,即判別模型。

  生成模型:由數據學習聯合概率密度分布P(X,Y),然后求出條件概率分布P(Y|X)作為預測的模型,即生成模型:P(Y|X)= P(X,Y)/ P(X)。


歸一化與標准化

  歸一化方法:

  • 把數變為(0,1)之間的小數

  主要是為了數據處理方便提出來的,把數據映射到0~1范圍之內處理,更加便捷快速。

  • 把有量綱表達式變為無量綱表達式

  歸一化是一種簡化計算的方式,即將有量綱的表達式,經過變換,化為無量綱的表達式,成為純量。

  標准化方法:

  • 數據的標准化是將數據按比例縮放,使之落入一個小的特定區間。由於信用指標體系的各個指標度量單位是不同的,為了能夠將指標參與評價計算,需要對指標進行規范化處理,通過函數變換將其數值映射到某個數值區間。

  歸一化,一般的方法是 (x-min(x))/(max(x)-min(x)) 。 標准化,一般方法是(x-mean(x))/std(x) 。 其中mean(x)代表樣本均值,std(x)代表樣本標准差。這兩種方法都是屬於線性轉換,都是按比例縮放的。

  歸一化和標准化的好處:

  • 歸一化的依據非常簡單,不同變量往往量綱不同,歸一化可以消除量綱對最終結果的影響,使不同變量具有可比性。比如兩個人體重差10KG,身高差0.02M,在衡量兩個人的差別時體重的差距會把身高的差距完全掩蓋,歸一化之后就不會有這樣的問題。
  • 標准化的原理比較復雜,它表示的是原始值與均值之間差多少個標准差,是一個相對值,所以也有去除量綱的功效。同時,它還帶來兩個附加的好處:均值為0,標准差為1。

協方差和相關系數

  協方差:表示兩個變量在變化過程中的變化趨勢相似程度,或者說是相關程度。 

 
Cov(X,Y)=E[(Xμx)(Yμy)]


  當X增大Y也增大時,說明兩變量是同向變化的,這時協方差就是正的;當X增大Y卻減小時,說明兩個變量是反向變化的,這時x協方差就是負的。協方差越大,說明同向程度越高;協方差越小,說明反向程度越高。

 

  相關系數:也表示兩個變量在變化過程中的變化相似程度。但是進行了歸一化,剔除了變化幅度數值大小的的影響,僅單純反映了每單位變化時的相似程度。 

 
ρ=Cov(X,Y)σXσY


  翻譯一下:相關系數就是協方差分別除以X的標准差和Y的標准差。

 

  當相關系數為1時,兩個變量正向相似度最大,即X變大一倍,Y也變大一倍;當相關系數為0時,兩個變量的變化過程完全沒有相似度;當相關系數為-1時,兩個變量的負向相似度最大,即X變大一倍,Y縮小一倍。

偏差,誤差和方差

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

 
Error^2=Bias^2+Variance


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

 

 

 

機器學習和深度學習

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

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

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM