深度學習如今這麼火熱,大部分人都會有‘那麼它與機器學習有什麼關係?’這樣的疑問,網上比較它們的文章也比較多,若是有機器學習相關經驗,或者作過相似數據分析、挖掘之類的人看完那些文章可能很容易理解,無非就是一個強調‘端到端’全自動處理,一個在特徵工程上須要耗費大量時間和精力(半自動處理);一個算法更復雜、須要更多的數據和算力,能解決更復雜的問題,一個算法可解釋性強,在少許數據集上就能夠到達必定的效果。可是若是對於一個以前並無多少機器學習相關背景、半路出道直接殺入深度學習領域的初學者來說,可能那些文章太過理論。本篇文章嘗試使用傳統機器學習和深度學習兩種不一樣的方法去解決同一個問題,告訴你它們之間有哪些聯繫。html
首先須要指出的是,主流定義上機器學習包含深度學習,後者是前者的一個分支。機器學習中有不一樣的算法,好比線性迴歸、邏輯迴歸、SVM、決策樹、神經網絡等等。因爲使用神經網絡算法的機器學習比較特殊,因此單獨命名這類機器學習爲‘深度學習’(爲何叫深度,後面詳細說)。所以,比較二者聯繫更準確的表述應該是:傳統機器學習和深度學習的關係(這裏的傳統機器學習不包含使用神經網絡算法這一類)。另外須要明確的是,在處理監督學習問題中,機器學習無論採用什麼算法,解決問題最終方式都是一致的:即找出X->Y的映射關係。好比你的模型用線性迴歸或者神經網絡算法,最後都是要從訓練素材中找輸入和輸出之間的映射關係。python
如今就以一個圖片二分類的任務爲例,分別使用基於神經網絡的深度學習和基於邏輯迴歸算法的傳統機器學習兩種方式解決,讓咱們看看它們在解決問題上的區別和聯繫。這個例子並無源代碼,我但願用圖片來講明問題。算法
如上圖,有一堆風景照片,咱們須要訓練一個模型來判斷給定圖片是否屬於綠植風景照,這是一個二分類問題,綠植風景照屬於第一類,其餘屬於第二類。輸入一張圖片,模型輸出圖片類型。如今咱們分別用深度學習和傳統機器學習的方法嘗試去解決該問題。這裏須要明確的是,對於圖片分類而言(或其餘大部分跟CV有關的應用),不論是用深度學習仍是傳統機器學習,都是須要先獲得每張圖片的特徵表示(特徵向量),特徵向量是一張圖片的信息壓縮表示,若是不太瞭解何爲圖像特徵,能夠參考這篇博客:http://www.javashuo.com/article/p-bwhwelmq-ba.html,裏面介紹了圖像特徵的做用和傳統圖像特徵提取方式。網絡
深度學習機器學習
對於深度學習而言,這個圖片二分類問題太簡單了,網上深度學習入門教程一大堆,好比貓狗識別跟這個差很少。在神經網絡開始,咱們使用幾個(卷積層-池化層)的block塊,提取圖片的高維特徵,而後再使用幾個連續的(卷積層)塊提取低維特徵。在神經網絡末尾,咱們再加一個MLP全鏈接網絡作爲特徵分類器,分類器最後包含一個輸出節點(使用Sigmoid激活函數),表明預測爲綠植風景照的機率,機率越接近1表明它爲綠植風景照的可信度越高。這個網絡結構能夠參考2012年將深度學習帶入大衆視野的AlexNet網絡。函數
如上圖,圖片直接輸入到模型,神經網絡負責特徵提取,而且對特徵進行分類,最後輸出機率值。咱們能夠看到,對於深度學習方式而言,咱們在預測一張圖的分類時,只須要將圖片傳給神經網絡(可能須要事先調整一下圖片尺寸),而後在神經網絡的輸出端就能夠直接獲得它所屬分類的機率值。這種全自動、無需人工干預的工做方式咱們稱之爲「端到端」(End-To-End)的方式。咱們能夠將上述網絡結構(like-alexnet)使用python代碼構建出來,而後圖像化顯示:學習
如上圖所示,神經網絡在處理該圖片分類任務時,從開始到結束一條龍服務。神經網絡接收一張214*214大小的3通道彩圖,矩陣形狀爲(214,214,3)。而後通過特徵提取,獲得一個256維的特徵向量。最後進行特徵分類,直接輸出它的機率。注意上圖爲了簡化結構,神經網絡僅僅包含必要的卷積層、池化層以及全鏈接層,實際狀況可能還須要歸一化、Dropout等結構。(忽略上圖Input和Output中的?號,它表示batch-size,即穿過神經網絡的圖片數量)須要說明的是,隨着問題的複雜性加大(好比圖片特徵不明顯,分類數量增多,數據複雜等等),咱們還能夠靈活調整上圖中神經網絡的結構,圖中是最簡單的直線型網絡結構(Sequential結構),咱們能夠設計出來分支結構、循環結構、殘差結構,這些都是能夠用來提取更復雜的特徵、解決更復雜的問題,固然這樣的話訓練須要的數據、算力、時間相應就會增長。關於神經網絡的輸入輸出能夠參考這篇博客:http://www.javashuo.com/article/p-czbaymfq-y.htmlspa
傳統機器學習設計
看完深度學習解決該問題的流程,咱們再來看一下如何使用傳統機器學習來解決該問題。傳統機器學習作不到‘端到端’的全自動處理,對於一個具體的任務須要拆分紅幾步去解決,第一步就是特徵工程,(以圖片分類任務爲例)須要人爲肯定使用哪一種特徵以及特徵提取方式,第二步纔是對已有特徵進行訓練,獲得一個特徵分類模型。這裏有兩個問題,一是人爲肯定使用哪一種特徵,須要專業人士判斷;而是知道要使用什麼特徵後,如何去提取?相比深度學習而言,傳統機器學習能夠總結爲‘半自動’模式:htm
如上圖所示,傳統機器學習在解決當前具體問題時,須要人工確認使用什麼特徵,以及提取該特徵的方法,最後才能用獲得的特徵去訓練機器學習模型去作分類。那麼這裏有個比較重要:選擇什麼特徵更有利於問題的解決呢?既要考慮特徵對原數據的表明性,又要考慮特徵提取的可行性。具體到當前圖片二分類任務時,咱們能夠看到數據集中,綠植風景照大部分都是綠色,和其餘圖片在像素分佈上有很大差別,所以咱們能夠選取‘顏色分佈’來作爲解決本次任務的圖像特徵,具體採用‘顏色直方圖’的方式去生成每張圖片的特徵向量。
顏色直方圖簡單理解就是統計圖片中每種顏色所佔比例,RGB圖片每一個通道顏色值在0-255之間,若是咱們將這個區間分紅10等份(子區間)而後計算每一個子區間顏色佔比(和爲1),那麼就能夠獲得3個10維向量,將這3個向量合併組成一個30維的向量,那麼這個30維向量就是基於顏色分佈的圖像特徵。因爲這種方式提取到的特徵沒有考慮顏色在圖片中的位置分佈,所以一般作法是,先將一張圖切成若干等份,而後分別計算單個圖片區域的特徵向量,最後將全部圖片區域的特徵向量拼接起來獲得最終的圖像特徵。若是將圖片切成5份,那麼最終獲得的特徵向量維度爲:5*3*10=150,這個特徵向量從必定程度上表明瞭顏色位置分佈。
如上圖所示,利用顏色直方圖能夠爲每張圖片提取到一個150維的特徵向量,後面咱們再用這些特徵向量訓練機器學習模型,因爲是一個二分類問題,咱們直接選用‘邏輯迴歸’算法便可。須要明確的是,一些常見的圖像特徵點提取方法好比SIFT、SURF等等在這裏是無效的,由於這些方式提取獲得的特徵向量更側重描述原圖像中像素之間的局部聯繫,很顯然對於咱們這個圖片二分類任務而言,根據顏色分佈提取到的特徵更適合解決本問題。這也同時說明,在傳統機器學習中的特徵提取環節很是重要,特徵工程也是制約傳統機器學習發展的一大瓶頸。
看完上面的舉例,如今總結一下:
深度學習在解決問題的時候採用‘端到端’的全自動模式,中間無需人爲干預,可以自動從原有數據中提取到有利於解決問題的特徵,該部分原理相對來說‘可解釋性弱’。同時,神經網絡的結構多變,能夠根據問題的複雜程度靈活調整網絡結構,更復雜的網絡結構須要更多更豐富的訓練數據去擬合參數,相對應對算力的要求也高一些。而對於傳統機器學習來說,一個很重要的工做就是特徵工程,咱們必須人工篩選(挑選)什麼特徵有利於問題的解決,好比本篇文章中的例子,像素分佈就是一個很好的特徵,同時咱們還須要人工去提取這些特徵,這部分原理相對來說‘可解釋性更強’。對於特徵工程這塊工做而言,它對人工專業性要求較高,由於對於稍微複雜的問題,很難識別出數據集的哪些特徵有利於解決問題,尤爲像圖片、語音、文本等等非結構化數據,這個也是制約傳統機器學習發展的瓶頸之一。無論怎樣,其實深度學習和傳統機器學習解決問題的思路基本是一致的,咱們能夠看到本文中兩種解決問題的過程當中都會生成一個特徵向量,一個256維,一個150維,最後根據特徵向量分類。有問題的朋友歡迎留言討論。