1. 程式人生 > 其它 >AI系統——機器學習和深度學習演算法流程

AI系統——機器學習和深度學習演算法流程

現在搞傳統機器學習相關的研究論文確實佔比不太高,有的人吐槽深度學習就是個系統工程而已,沒有數學含金量。但是無可否認的是深度學習是在太好用啦,極大地簡化了傳統機器學習的整體演算法分析和學習流程,更重要的是在一些通用的領域任務重新整理了傳統機器學習演算法達不到的精度和準確率。深度學習這幾年特別火,就像5年前的大資料一樣,不過深度學習其主要還是屬於機器學習的範疇領域內,所以這篇文章裡面我們來嘮一嘮機器學習和深度學習的演算法流程區別。
  • 終於考上人工智慧的研究僧啦,不知道機器學習和深度學習有啥區別,感覺一切都是深度學習
  • 挖槽,聽說學長已經調了10個月的引數準備發有2000億引數的T9開天霹靂模型,我要調參發T10準備拿個Best Paper
現在搞傳統機器學習相關的研究論文確實佔比不太高,有的人吐槽深度學習就是個系統工程而已,沒有數學含金量。 但是無可否認的是深度學習是在太好用啦,極大地簡化了傳統機器學習的整體演算法分析和學習流程,更重要的是在一些通用的領域任務重新整理了傳統機器學習演算法達不到的精度和準確率。 深度學習這幾年特別火,就像5年前的大資料一樣,不過深度學習其主要還是屬於機器學習的範疇領域內,所以這篇文章裡面我們來嘮一嘮機器學習和深度學習的演算法流程區別。
1、機器學習的演算法流程 實際上機器學習研究的就是資料科學(聽上去有點無聊),下面是機器學習演算法的主要流程:主要從1)資料集準備、2)探索性的對資料進行分析、3)資料預處理、4)資料分割、5)機器學習演算法建模、6)選擇機器學習任務,當然到最後就是評價機器學習演算法對實際資料的應用情況如何。 1.1 資料集 首先我們要研究的是資料的問題,資料集是構建機器學習模型流程的起點。簡單來說,資料集本質上是一個M×N矩陣,其中M代表列(特徵),N代表行(樣本)。 列可以分解為X和Y,X是可以指特徵、獨立變數或者是輸入變數。Y也是可以指類別標籤、因變數和輸出變數。
1.2 資料分析 進行探索性資料分析(Exploratory data analysis, EDA)是為了獲得對資料的初步瞭解。EDA主要的工作是:對資料進行清洗,對資料進行描述(描述統計量,圖表),檢視資料的分佈,比較資料之間的關係,培養對資料的直覺,對資料進行總結等。
探索性資料分析方法簡單來說就是去了解資料,分析資料,搞清楚資料的分佈。主要注重資料的真實分佈,強調資料的視覺化,使分析者能一目瞭然看出資料中隱含的規律,從而得到啟發,以此幫助分析者找到適合資料的模型。
在一個典型的機器學習演算法流程和資料科學專案裡面,我做的第一件事就是通過 "盯住資料",以便更好地瞭解資料。個人通常使用的三大EDA方法包括:
  • 描述性統計:平均數、中位數、模式、標準差。
  • 資料視覺化:熱力圖(辨別特徵內部相關性)、箱形圖(視覺化群體差異)、散點圖(視覺化特徵之間的相關性)、主成分分析(視覺化資料集中呈現的聚類分佈)等。
  • 資料整形:對資料進行透視、分組、過濾等。
1.3 資料預處理 資料預處理,其實就是對資料進行清理、資料整理或普通資料處理。指對資料進行各種檢查和校正過程,以糾正缺失值、拼寫錯誤、使數值正常化/標準化以使其具有可比性、轉換資料(如對數轉換)等問題。
例如對影象進行resize成統一的大小或者解析度。
資料的質量將對機器學習演算法模型的質量好壞產生很大的影響。因此,為了達到最好的機器學習模型質量,傳統的機器學習演算法流程中,其實很大一部分工作就是在對資料進行分析和處理。 一般來說,資料預處理可以輕鬆地佔到機器學習專案流程中80%的時間,而實際的模型建立階段和後續的模型分析大概僅佔到剩餘的20%。 1.4 資料分割 訓練集 & 測試集 在機器學習模型的開發流程中,希望訓練好的模型能在新的、未見過的資料上表現良好。為了模擬新的、未見過的資料,對可用資料進行資料分割,從而將已經處理好的資料集分割成2部分:訓練集合測試集。 第一部分是較大的資料子集,用作訓練集(如佔原始資料的80%);第二部分通常是較小的子集,用作測試集(其餘20%的資料)。 接下來,利用訓練集建立預測模型,然後將這種訓練好的模型應用於測試集(即作為新的、未見過的資料)上進行預測。根據模型在測試集上的表現來選擇最佳模型,為了獲得最佳模型,還可以進行超引數優化。 訓練集 & 驗證集 & 測試集 另一種常見的資料分割方法是將資料分割成3部分:1)訓練集,2)驗證集和3)測試集。 訓練集用於建立預測模型,同時對驗證集進行評估,據此進行預測,可以進行模型調優(如超引數優化),並根據驗證集的結果選擇效能最好的模型。 驗證集的操作方式跟訓練集類似。不過值得注意的是,測試集不參與機器學習模型的建立和準備,是機器學習模型訓練過程中單獨留出的樣本集,用於調整模型的超引數和對模型的能力進行初步評估。通常邊訓練邊驗證,這裡的驗證就是用驗證集來檢驗模型的初步效果。 交叉驗證 實際上資料是機器學習流程中最寶貴的,為了更加經濟地利用現有資料,通常使用N倍交叉驗證,將資料集分割成N個。在這樣的N倍資料集中,其中一個被留作測試資料,而其餘的則被用作建立模型的訓練資料。通過反覆交叉迭代的方式來對機器學習流程進行驗證。
這種交叉驗證的方法在機器學習流程中被廣泛的使用,但是深度學習中使用得比較少哈。
1.5 機器學習演算法建模 下面是最有趣的部分啦,資料篩選和處理過程其實都是很枯燥乏味的,現在可以使用精心準備的資料來建模。根據taget變數(通常稱為Y變數)的資料型別,可以建立一個分類或迴歸模型。 機器學習演算法 機器學習演算法可以大致分為以下三種類型之一:
  • 監督學習:是一種機器學習任務,建立輸入X和輸出Y變數之間的數學(對映)關係。這樣的(X、Y)對構成了用於建立模型的標籤資料,以便學習如何從輸入中預測輸出。
  • 無監督學習:是一種只利用輸入X變數的機器學習任務。X變數是未標記的資料,學習演算法在建模時使用的是資料的固有結構。
  • 強化學習:是一種決定下一步行動方案的機器學習任務,它通過試錯學習(trial and error learning)來實現這一目標,努力使reward回報最大化。
引數調優 傳說中的調參俠主要乾的就是這個工作啦。超引數本質上是機器學習演算法的引數,直接影響學習過程和預測效能。由於沒有萬能的超引數設定,可以普遍適用於所有資料集,因此需要進行超引數優化。
以隨機森林為例。在使用randomForest時,通常會對兩個常見的超引數進行優化,其中包括mtry和ntree引數。mtry(maxfeatures)代表在每次分裂時作為候選變數隨機取樣的變數數量,而ntree(nestimators)代表要生長的樹的數量。
另一種在10年前仍然非常主流的機器學習演算法是支援向量機SVM。需要優化的超引數是徑向基函式(RBF)核心的C引數和gamma引數。C引數是一個限制過擬合的懲罰項,而gamma引數則控制RBF核的寬度。 調優通常是為了得出超引數的較佳值集,很多時候不要去追求找到超參一個最優值,其實調參俠只是調侃調侃,真正需要理解掌握演算法原理,找到適合資料和模型的引數就可以啦。 特徵選擇 特徵選擇從字面上看就是從最初的大量特徵中選擇一個特徵子集的過程。除了實現高精度的模型外,機器學習模型構建最重要的一個方面是獲得可操作的見解,為了實現這一目標,能夠從大量的特徵中選擇出重要的特徵子集非常重要。 特徵選擇的任務本身就可以構成一個全新的研究領域,在這個領域中,大量的努力都是為了設計新穎的演算法和方法。從眾多可用的特徵選擇演算法中,一些經典的方法是基於模擬退火和遺傳演算法。 除此之外,還有大量基於進化演算法(如粒子群優化、蟻群優化等)和隨機方法(如蒙特卡洛)的方法。 1.6 機器學習任務 在監督學習中,兩個常見的機器學習任務包括分類和迴歸。 分類 一個訓練好的分類模型將一組變數作為輸入,並預測輸出的類標籤。下圖是由不同顏色和標籤表示的三個類。每一個小的彩色球體代表一個數據樣本。三類資料樣本在二維中的顯示,這種視覺化圖可以通過執行PCA分析並顯示前兩個主成分(PC)來建立;或者也可以選擇兩個變數的簡單散點圖視覺化。 效能指標 如何知道訓練出來的機器學習模型表現好或壞?就是使用效能評價指標(metrics),一些常見的評估分類效能的指標包括準確率(AC)、靈敏度(SN)、特異性(SP)和馬太相關係數(MCC)。 迴歸 最簡單的迴歸模式,可以通過以下簡單等式很好地總結:Y = f(X)。其中,Y對應量化輸出變數,X指輸入變數,f指計算輸出值作為輸入特徵的對映函式(從機器學習模型中得到)。上面的迴歸例子公式的實質是,如果X已知,就可以推匯出Y。一旦Y被計算(預測)出來,一個流行的視覺化方式是將實際值與預測值做一個簡單的散點圖,如下圖所示。 對迴歸模型的效能進行評估,以評估擬合模型可以準確預測輸入資料值的程度。評估迴歸模型效能的常用指標是確定係數(R²)。此外,均方誤差(MSE)以及均方根誤差(RMSE)也是衡量殘差或預測誤差的常用指標。 2、深度學習演算法流程 深度學習實際上是機器學習中的一種正規化,所以他們的主要流程是差不多的。深度學習則是優化了資料分析,建模過程的流程也是縮短了,由神經網路統一了原來機器學習中百花齊放的演算法。 在深度學習正式大規模使用之前呢,機器學習演算法流程中藥花費很多時間去收集資料,然後對資料進行篩選,嘗試各種不同的特徵提取機器學習演算法,或者結合多種不同的特徵對資料進行分類和迴歸。 下面是機器學習演算法的主要流程:主要從1)資料集準備、2)資料預處理、3)資料分割、4)定義神經網路模型,5)訓練網路。 深度學習不需要我們自己去提取特徵,而是通過神經網路自動對資料進行高維抽象學習,減少了特徵工程的構成,在這方面節約了很多時間。 但是同時因為引入了更加深、更復雜的網路模型結構,所以調參工作變得更加繁重啦。例如:定義神經網路模型結構、確認損失函式、確定優化器,最後就是反覆調整模型引數的過程。 參考文獻
  • [1] https://github.com/dataprofessor/infographic
  • [2] 陳仲銘. 《深度學習:原理與實踐》.[M]