請別再把深度學習與機器學習混為一談了!
譯文【51CTO.com快譯】眾所周知,雖然同屬于人工智能的范疇,但是深度學習是一種特殊的機器學習形式。從流程上說,機器學習和深度學習都是從運用測試數據來訓練某個模型開始,通過一系列的優化過程,進而找到最適合模型的數據權重。顯然,這兩種方法都可以處理數值(回歸)和非數值(分類)的問題,只是在對象識別和語言翻譯等應用領域,深度學習模型往往比機器學習模型更加適用。
細說機器學習
機器學習算法通常分為:監督(用各種答案來標注訓練數據)和非監督(任何可能存在的標簽都不會被顯示在訓練算法中)兩種。
監督式機器學習又可以進一步被分為:分類(預測諸如:抵押貸款支付逾期的概率等非數字性的答案)和回歸(預測諸如:某種網紅商品的銷售量等數字性的答案)。
無監督學習則可以進一步分為:聚類(查找相似對象組,如:跑步鞋、步行鞋和禮服鞋)、關聯(查找對象的共同邏輯,如:咖啡和奶油)、以及降維(進行投射、特征選擇與提取)。
分類算法
分類問題屬于監督式學習范疇。它需要在兩個或多個類之間進行選擇,并最終為每一個類分配概率。最常見的算法包括:樸素貝葉斯、決策樹、邏輯回歸、k近鄰和支持向量機(SVM)。您還可以使用諸如:隨機森林等其他集成方法(模型的組合),以及AdaBoost和XGBoost之類的增強方法。
回歸算法
回歸問題也屬于監督式學習范疇。它要求模型能夠預測出一個數字。其中最簡單且最快的算法是線性(最小二乘)回歸。不過它通常只能給出一個不夠準確的結果。其他常見的機器學習回歸算法(除了神經網絡)還包括:樸素貝葉斯、決策樹、k近鄰、LVQ(學習矢量量化)、LARS(最小角回歸)、Lasso、彈性網絡、隨機森林、AdaBoost和XGBoost等。顯然,在回歸和分類的機器學習算法之間有一定的重疊度。
聚類算法
聚類問題屬于無監督式學習范疇。它要求模型找出相似的數據點組。其中最流行的算法是K-Means聚類。其他常見的算法還包括:均值漂移聚類、DBSCAN(基于密度的帶噪聲應用空間聚類)、GMM(高斯混合模型)和HAC(凝聚層級聚類)。
降維算法
降維問題也屬于無監督式學習范疇。它要求模型刪除或合并那些對結果影響很小或沒有影響的變量。它通常與分類或回歸結合起來使用。常見降維算法包括:刪除缺失值較多的變量、刪除低方差的變量、決策樹、隨機森林、刪除或合并高相關性的變量、后向特征消除、前向特征選擇、因子分析、PCA(主成分分析)等。
各種優化方法
我們需要通過訓練和評估,優化參數的權重,來找到一組最接近真實情況的數值,進而將監督式學習算法最終轉化為恰當的模型。在實際應用中,這些算法的優化常常依賴于那些陡降的變體,例如:隨機梯度下降,它本質上是在隨機起點上執行多次陡降(steepest descent)。
而對于隨機梯度下降法的常見改進包括:根據動量修正梯度的方向因素,或調整從一個數據(或稱為epoch或batch)到下一個數據學習率的進展。
數據清理
為了讓雜亂無章的數據能夠為機器學習所用,我們必須對數據進行全面的過濾,其中包括:
1.初次查看數據,排除那些有大量丟失數據的列。
2.再次查看數據,選擇需要進行預測的列(即,特征選擇)。這也是您在迭代時可能希望更改的內容。
3.在其余列中排除那些缺少數據的行。
4.糾正明顯的拼寫錯誤,合并相應的答案。例如:U.S.、US、USA和America都應該被合并為一個類別。
5.排除具有超出范圍數據的行。例如:如果您正在分析紐約市內出租車的出行情況,那么您需要過濾掉那些開到該城市區域邊界之外的地理坐標行。
當然,您也可以酌情增加其他步驟,這主要取決于您收集到的數據類型。您甚至可以在機器學習管道(請參見-https://www.infoworld.com/article/3198252/data-in-intelligence-out-machine-learning-pipelines-demystified.html)中設置一些數據清理的步驟,以便按需進行修改與復用。
數據編碼和標準化
為了對數據進行分類,您需要將文本標簽編碼為另一種形式。常見的有如下兩種:
一種是label編碼,它將每一個文本標簽值都替換為一個數字。另一種是one-hot編碼,它將每一個文本標簽值都替換為帶有二進制值(1或0)的列。一般來說,由于label編碼有時會使機器學習算法誤認為:被編碼的列已經是一個有序列了,因此我們首選采用one-hot編碼。
為了讓數值數據適用于機器回歸,我們通常需要對數據進行規范化。否則,更大范圍的數字可能會主導特征向量之間的歐氏距離(Euclidian distance,它是在m維空間中兩個點之間的真實距離),而該影響可能會以其他字段為代價被放大,進而導致陡降的優化難以收斂。目前,針對機器學習的數據規范化與標準化有著多種方法,其中包括:最小值標準化、均值標準化、以及按單位長度擴展等。有時該過程也被稱為特性擴展(https://en.wikipedia.org/wiki/Feature_scaling)。
特征工程
特征是指被觀察到的現象的可測量特性。“特征”的概念通常與解釋變量相關。此處的解釋變量,經常被用于諸如線性回歸之類的統計技術。而特征向量則會將單行的所有特征,組合成一個數值型的向量。
選擇特征的巧妙之處在于是否能選出解釋問題的最小獨立變量集。如果兩個變量高度相關,則要么將它們合并成為一個單獨的特征,要么去掉其中的一個。有時候,我們在進行主成分分析時,可以把相關的變量轉換成一組線性無關的變量。
在實際應用中,我們能夠通過簡單的方式,來構造新的特征或減少特征向量的維數。例如,用死亡年份減去出生年份,就得到了死亡年齡,這是針對壽命和死亡率分析的主要自變量。當然,在其他情況下,特性的構建并非如此淺顯。
分割數據
監督式機器學習的通常做法是:將數據集分成各個子集進行訓練、驗證和測試。其中的一種工作方式是:將80%的數據分配給訓練數據集,而將其他的10%分配給驗證和測試數據集。目前,大部分訓練都是針對數據集進行的。在每一個epoch結束時,我們將針對驗證數據集進行預測。
那些驗證數據集中的錯誤,不但可以被用于識別停止的條件,并驅動超級參數的調優,而且可以幫助您確定目標模型是否對訓練數據進行了過度的擬合。
對于測試數據集的預測通常是在最終模型上完成的。如果某個測試數據集從未被用于訓練,我們有時則稱之為holdout數據集。
作為其他常見的分割數據方案,交叉驗證能夠重復地將整個數據集分割成一套訓練數據集,以及一套驗證數據集。
機器學習庫
在Python中,Spark MLlib(https://www.infoworld.com/article/3141605/review-spark-lights-up-machine-learning.html)和Scikit-learn(https://www.infoworld.com/article/3158509/review-scikit-learn-shines-for-simpler-machine-learning.html)都是機器學習庫的最佳選擇。在R語言中,常見的機器學習包有CARAT、randomForest、e1071和KernLab。而在Java中,您可以用到Java-ML、RapidMiner和Weka。
細說深度學習
作為機器學習的一種應用形式,深度學習在被訓練模型的輸入和輸出之間存在著不止一個隱藏層。在大多數討論場合中,深度學習意味著使用深度技術的神經網絡。當然,除了神經網絡,深度學習還會使用一些算法來實現其他類型的隱藏層。
“人工”神經網絡的概念由來已久,它是由相互連接的閾值開關,構成了人工神經元網絡,可以像動物大腦和神經系統(如:視網膜)那樣學習識別模式。
Backprop
當兩個神經元在訓練中同時活躍(active)時,學習基本上是通過加強兩個神經元之間的連接來實現的。在當前的神經網絡軟件中,最常見的方法是:使用一種稱為誤差反向傳播(或稱backprop、BP)的規則,來增加神經元之間連接的權值。
人工神經網絡中的神經元
每一個神經元都擁有一個傳播函數。該函數可通過加權來轉換連接神經元的輸出。傳播函數將輸出傳遞給激活函數,激活函數在輸入超過閾值時就會被觸發。
神經網絡中的激活函數
在上個世紀40、50年代,人工神經元普遍使用的是被稱為感知器(perceptrons)的一步式激活函數。如今的神經網絡引入了諸如:邏輯函數、s形函數(sigmoid function)、雙曲正切函數、修正線性單元(ReLU)等平滑激活函數。其中,ReLU雖然存在著“在學習率設置過高時,神經元會在訓練中‘死亡’”的問題,但是它仍然是快速收斂的最佳選擇。
激活函數的輸出可以傳遞給某個輸出函數,進行附加整形。不過,輸出函數通常是恒等函數,因此激活函數的輸出會直接被傳遞給連接在下游的神經元中。
神經網絡拓撲結構
常見的神經網絡拓撲結構是:
1. 在前饋網絡中,神經元可分為:一個輸入層、n個隱藏處理層和一個輸出層。每一層的輸出都只會輸入到下一層。
2. 在具有快捷連接的前饋網絡中,一些連接可以跳過一到多個中間層。
3. 在遞歸神經網絡中,神經元可以直接或間接地通過下一層來影響自己。
訓練神經網絡
神經網絡的監督學習和其他機器學習類似:我們用一組訓練數據來表示網絡,將網絡輸出與期望的輸出進行比較,以生成錯誤向量,接著根據錯誤向量再對網絡進行修正。在應用糾正之前,那些共同運行的批量訓練數據被稱為epoch。
在實現細節上,相對于模型的權值和偏差方面的梯度,反向傳播使用誤差(或成本)函數,來發現正確的方向,從而最小化誤差。因此,應用的正確性取決于優化算法和學習速率的變量。正如前面提到的,該變量通常需要足夠的小,以保證收斂性,并避免造成ReLU神經元“死亡”。
神經網絡的優化器
通常,神經網絡的優化器會使用某種形式的梯度下降算法,來驅動反向傳播。同時,它會用到一種避免陷入局部極小值的機制,例如:只優化那些隨機選擇的小批量(隨機梯度下降),以及對梯度使用動量修正的方式。另外,一些優化算法(如:AdaGrad、RMSProp和Adam)還會通過查看梯度的歷史,來調整模型參數的學習率。
與所有的機器學習類似,您需要根據一個單獨的驗證數據集,來檢查神經網絡的預測。如果不這樣做的話,您所創建的神經網絡可能只能記住輸入的信息,而無法學習并成為廣義的預測器。
深入學習的各種算法
一個針對真實問題的深度神經網絡,可能由十多個隱藏層所組成,其拓撲結構也可能繁簡不同。一般而言,網絡中的層級越多,其優勢是能夠識別的特征就越多,而劣勢則為計算所需的時間就越長,訓練也就越困難。
卷積神經網絡(CNN)常被用于機器視覺等應用之中。該網絡通常使用卷積、池化、ReLU、全連接、以及丟失層來模擬視覺的皮層。其中,卷積層主要是對于許多小的重疊區域進行積分。池化層執行的是一種非線性的下采樣(down-sampling)形式。ReLU層用到了非飽和激活函數f(x) = max(0,x)。在一個完全連接的層級中,神經元與前一層的所有激活都有聯系。丟失層主要負責計算網絡訓練如何“懲罰”那些預測標簽和真實標簽之間的偏差,使用Softmax或交叉熵(cross-entropy)損失函數來進行分類,或使用歐式(Euclidean)損失函數進行回歸。
遞歸神經網絡常被用于自然語言處理(NLP)、序列處理、長短時記憶(LSTM)網絡、基于注意力的神經網絡。在前饋神經網絡中,信息通過隱藏層從輸入流向輸出。這有效地限制了該網絡一次性只能處理一個狀態。
在遞歸神經網絡(RNN)中,信息通過反復循環,讓網絡只記住最近的一次輸出,以便對序列和時序進行分析。當然,RNN存在著兩個常見的問題:爆炸性的漸變(我們很容易通過夾持來修復)和消失的漸變(不太容易修復)。
在LSTMs中,該網絡能夠用forgetting和gating來修改以前信息的權重,并記住它們。通過此類長、短期記憶,該網絡解決了梯度消失的問題。同時,LSTMs也可以處理數百個過去輸入的序列。
注意力模塊是一些將權重應用到輸入向量上的通用門。它的分層神經注意編碼器(hierarchical neural attention encoder)使用多層注意模塊,來處理成千上萬的過去的輸入。
雖然不屬于神經網絡,但是隨機決策森林(RDF)對于一系列分類和回歸問題也十分有用。由多個層級構成的RDF,能夠輸出單個樹的預測統計平均值(一般為分類模式或回歸平均值)。在隨機方面,RDF對單個樹使用引導聚合(也稱為bagging),并針對樹的特性進行隨機取子集。
同樣不屬于深度神經網絡的XGBoost (eXtreme Gradient boost),是一個可擴展的端到端樹狀增強系統。它在許多機器學習的挑戰中都取得了先進的成果。不同于RDF,它的梯度樹增強是從單個決策樹或回歸樹開始的。通過優化,其后續的樹是基于前續樹的殘留而構建的。
目前,業界公認最好的Python深度學習框架包括:TensorFlow、Keras、PyTorch和MXNet。Deeplearning4j是最好的Java深度學習框架之一。而ONNX和TensorRT則是用于深度學習模型的運行時(runtime)。
深度學習與機器學習的比較
一般而言,經典(非深度)機器學習算法的訓練和預測速度,要比深度學習算法快得多。一到多個CPU足以訓練一個經典的模型。而深度學習模型通常需要硬件加速器,如GPU、TPU或FPGA來進行訓練,以及大規模的部署。如果沒有它們,此類模型可能需要幾個月的訓練時間。
自然語言處理是深度學習的一個分支,它包括語言翻譯、自動化摘要、協同參考解析、語篇分析(discourse analysis)、形態分割(morphological segmentation)、命名實體識別、自然語言生成、自然語言理解、詞性標注、情感分析和語音識別等。
深度學習的另一個主要應用領域是圖像分類。它包括:帶定位的圖像分類、目標檢測、目標分割、圖像風格轉換、圖像著色、圖像重建、圖像超分辨率和圖像合成等。
此外,深度學習已經被成功地用于預測分子之間的相互作用,以幫助制藥公司設計新藥,搜索亞原子粒子,并將自動解析用于構建人腦三維顯微鏡圖像等方面。
原文標題:Deep learning vs. machine learning: Understand the differences,作者:Martin Heller
【51CTO譯稿,合作站點轉載請注明原文譯者和出處為51CTO.com】