天天看點

不懂代碼也想學會深度學習?這本書告訴你真的很簡單

不懂代碼也想學會深度學習?這本書告訴你真的很簡單

​我們暫且不管深度學習是什麼,深度學習有多強大。作為資訊行業的傑出的工程師,首先需要知道深度學習真正帶來的是什麼?未來,深度學習對社會以及各個行業會帶來什麼影響?擁有大量深度學習人才的中國企業将會在世界上充當何種角色?深度學習又會給我們帶來什麼樣的機遇與挑戰?

 “路漫漫其修遠兮”。深度學習需要大量的資料和龐大的計算資源,而這就将我們的視線帶入 GPU 的世界。如果時至今日,你還以為英偉達(NVIDIA)隻是一家賣顯示卡的公司,那就顯得有點孤陋寡聞了。因為如今的特斯拉自動駕駛系統 Autopilot 2.0、行車預警系統、無人采集系統、智能物流系統等,到處都充斥着 NVIDIA 的身影。正是因為深度學習,NVIDIA才會成為新一輪人工智能公司中的獨角獸。

 深度學習在各個領域帶來的變革才剛剛開始,如黎明破曉一樣讓人心潮澎湃。近期關于無人駕駛、輔助駕駛、智能音箱的新聞越來越多,無論大公司,還是新創公司都在談人工智能,為什麼呢?因為深度學習極大地降低了技術的門檻。

隻要擁有充足的資料,加點硬體成本和時間成本,就可以利用深度學習這一技術實作各種方案,這是新創公司實作彎道超車的機會。

 在深度學習領域最權威的書是Ian Goodfellow 、Yoshua Bengio和Aaron Courville 編寫的《深度學習》。但與深度學習相關,且将知識原理與案例實踐相結合的書籍在市場上并不多見。《深度學習原理與實踐》的創作初衷就是幫助更多的人了解深度學習,并投身于人工智能領域。

不懂代碼也想學會深度學習?這本書告訴你真的很簡單
《深度學習原理與實踐》

陳仲銘,彭淩西 著

一年多以來,作者業餘時間幾乎都用于寫作、編寫示例代碼,也曾經想過放棄,但都堅持了下來。成功不就是一次次堅持而成就的嗎?人生,多多少少也有些夢想,值得我們去付出!

《深度學習原理與實踐》學習建議

我們努力提高自己的能力、學習深度學習和人工智能,并不是為了與别人一決高下,而是超越自己。成功的路上會有很多建議,而針對本書的學習,有下面幾條建議。

學習Python基礎知識。貫穿全書中的代碼由Python程式設計語言編寫而成,但是

本書并沒有對Python代碼進行過多的解釋,而是圍繞和專注于講解深度學習的原理和思想。

是以希望讀者先自行安裝Python 3,了解Python程式設計語言的特性和基本使用方法,有一定的了解後即可直接使用本書的示例代碼,這對于了解深度學習會有所幫助。

實踐是檢驗真理的唯一标準。每一行代碼和函數都是作者親自實作過的,盡管不同伺服器和不同版本的架構會存在一些差異,也可能讀者看到本書代碼時已經稍顯過時,但我仍然希望讀者親自去嘗試實作書中的代碼,畢竟“紙上得來終覺淺”,實踐才是檢驗真理的唯一标準。

不要糾結于架構。深度學習好比“菜單”,資料就是“肉和青菜”,深度學習架構就是“炒菜的鍋和鏟”。誰說紅燒洋芋一定要用“Caffe”牌的鍋,香煎蓮藕一定要用“Google”牌的鏟?我們隻要學會菜單,研究“鍋”和“鏟”的屬性并多加實踐練習,就可以炒出一盤香噴噴的菜。希望讀者不要糾結于本書所用的是Keras架構,還是Tensorflow架構,而是将所有的目光都聚焦在深度學習的原理和案例實踐上。

多閱讀相關文獻。讀傑出的書籍,有如和傑出的人物促膝交談。深度學習的知識日新月異,在知識更新疊代迅速的時代,我們需要掌握知識的本質内容,而掌握本質内容的最好方法之一就是閱讀與知識點相關的論文文獻,去了解與思考為什麼要這樣,這樣做的優缺點是什麼。多閱讀相關的文獻,我們就會更好地把握住深度學習知識的本質。

《深度學習原理與實踐》特色 大量圖例,簡單易懂。

作者親自繪制了大量插圖,力求還原深度學習的算法思想,分解和剖析晦澀的算法,用圖例來表示複雜的問題。生動的圖例也能給讀者帶來閱讀樂趣,快樂地學習算法知識,體會深度學習的算法本質。

簡化公式,生動比喻。

深度學習和機器學習類的書中通常會有大量複雜冗長的算法公式,為了避免出現讀者讀不懂的情況,本書盡可能地統一了公式和符号,簡化相關公式,并加以生動的比喻進行解析。在啟發讀者的同時,鍛煉讀者分析問題和解決問題的能力。

算法原理,代碼實作。

在介紹深度學習及相關算法的原理時,不僅給出了對應的公式,還給出了實作和求解公式的代碼,讓讀者明确該算法的作用、輸入和輸出。原理與代碼相結合,使得讀者對深度學習的算法實作更加具有親切感。

深入淺出,精心剖析。

了解深度學習需要一定的機器學習知識,本書在第1章介紹了深度學習與機器學習的關系,并簡要介紹了機器學習的内容。在内容安排上,每章依次介紹模型架構的應用場景、結構和使用方式,最後通過真實的案例去全面分析該模型結構。目的是讓讀者可以抓住深度學習的本質。

入門實踐,案例重制。

每一章最後的真實案例不是直接堆砌代碼,而是講解使用該算法模型的原因和好處。從簡單的背景知識出發,使用前文講解過的深度學習知識實作一個實際的工程項目。實踐可以用于及時檢驗讀者對所學知識的掌握程度,為讀者奠定深度學習的實踐基礎。

什麼是深度學習

2016 年年初,由 Google DeepMind 開發的AlphaGo在圍棋大戰中打敗了南韓的圍棋大師李世石。就如同 1997 年 IBM 的“深藍”計算機戰勝了世界首席國際象棋大師卡斯帕羅夫一樣,媒體開始鋪天蓋地般地宣傳人工智能時代的來臨。同時,資本開始追捧與人工智能産業相關的公司,一時間收購并購人工智能企業的狂潮席卷而來。

在描述 DeepMind 勝利的時候,很多媒體都會把人工智能(Artificial Intelligence)、機器學習(Machine Learning)和深度學習(Deep Learning)混為一談。雖然從嚴格定義上來說,DeepMind 在 AlphaGo 程式中對上述3種技術都有所使用,但其真正使用得更多的是深度學習。

下面來了解人工智能、機器學習、深度學習這三者之間的關系。

如圖1所示,人工智能包含着機器學習,而深度學習則是機器學習的重要分支之一,它們三者是包含與被包含的關系。

從20世紀50年代,人工智能第一次提出至今,人工智能的問題基本上已經定型,大緻分為6個具體的方向:問題求解、知識推理、規劃問題、不确定性推理、通信感覺與行動、學習問題。而

機器學習主要有 3 個方向:分類、回歸、關聯性分析。最後到深度學習則是對機器學習中的神經網絡進行深度拓展。

​圖 1  深度學習、機器學習、人工智能之間關系

人工智能的概念從 1950 年左右開始被提出,而機器學習則是在 1980 年左右被提出的,最近熱門的深度學習則是在 2010 年左右被提出的。

人工智能實際上包含了我們經常使用到的算法,例如在問題求解方面,最經典的算法是 A* 搜尋算法和 a-b 剪枝算法,又如人工智能中的學習問題則包含了機器學習的大部分内容。現階段已經有很多資料介紹機器學習相關的算法,較為著名的機器學習十大算法有:決策樹、支援向量機 SVM、随機森林算法、邏輯回歸、樸素貝葉斯、KNN 算法、K-means 算法、Adaboost 算法、Apriori 算法、PageRank 算法。

圖 2  深度神經網絡示例圖

深度學習的定義在過去的十年一直在不斷變化,其中大部分學者認為深度學習應該“具有兩層以上的神經網絡”,圖2所示為深度學習的神經網絡示例,其特點是:

· 具有更多的神經元;

· 具有更複雜的網絡連接配接方式;

· 擁有驚人的計算量;

· 能夠自動提取資料高維特征。

本文介紹的深度網絡主要是指具有深層的神經網絡,包括:

人工神經網絡(ANN)、卷積神經網絡(CNN)、循環神經網絡(RNN)

機器學習的一般方法

機器學習按照方法主要可以分為兩大類:監督學習和無監督學習。其中監督學習主要由分類和回歸等問題組成,無監督學習主要由聚類和關聯分析等問題組成。

深度學習則屬于監督學習當中的一種

機器學習中的監督學習是指使用算法對結構化或者非結構化的有标注的資料進行解析,從資料中學習,擷取資料中特定的結構模型,然後使用這些結構或者模型來對未知的新資料進行預測。通俗來說,

監督學習就是通過對資料進行分析,找到資料的表達模型

,有了這個模型就可以對新輸入的資料套用該模型來做決策。

在訓練階段(對資料進行分析的階段),首先需要根據原始的資料進行特征提取,這個過程叫作特征工程。得到特征後,我們可以使用決策樹、随機森林等模型算法去分析資料之間的特征或者關系,最終得到關于輸入資料的模型(Model)。在預測階段,同樣按照特征工程的方法提取了資料後,使用訓練階段得到的模型對特征向量進行預測,最終得到所屬的标簽(Labels)。

​圖 3  監督學習一般方法

機器學習算法中的每一種不同的模型都有其自身的規則去解釋輸入的數

,然後對新輸入的資料進行預測和判斷。例如決策樹的模型,就是建構一個樹形結構,每一個節點代表一種資料的類型,每一個葉子節點則代表一種類别。線性回歸模型則利用線性回歸方程建立一組參數來表示輸入的資料之間的關系,而神經網絡則有一組權重參數向量來代表節點之間的關系。

到目前為止,我們有各種各樣的機器學習算法可以對資料進行模組化。通過算法對資料進行模組化後,我們可以學習到資料之間的關聯性,提取資料的高維特征,并且訓練完的新模型可以對相類似的新資料進行預測。可現實情況真的會這麼理想嗎?圖3中對應的每一個步驟所花費的時間是相同的嗎?

機器學習領域當中最出彩的莫過于計算機視覺,這裡我們暫且抛開計算機視覺的圖像擷取需要通過硬體編碼而擷取彩色或者灰階圖像等一系列硬體的工作。

舉一個例子

,如果我們想要識别道路上的停車牌,首先不是直接對圖檔進行滑動視窗,而是先進行邊緣檢測、中值濾波、高斯濾波等圖像預處理操作,待得到工程師們認為可以使用的圖像之後,才開始對圖像進行分析,産生一系列的物體候選框。

然後通過圖像檢測的算法對各個視窗進行特征檢測,通過機器學習的算法提取每個視窗的特征,或者可以通過資料挖掘的算法對資料進行壓縮,進而提取到更加抽象的特征資料資訊。接着我們需要定義分類器,對停車牌中的字母進行判斷,例如可以使用簡單的 SVM 分類器對“STOP”4 個字母的抽象資訊進行分類。到此為止,算是能夠使用機器學習的算法去感覺圖像,識别輸入的圖像是否為停車牌。

雖然上面的圖像分類結果基本可用,但是還遠遠達不到全自動化識别的目的。當遇到雨雪天氣時,馬路一旁的标志牌已經不是那麼清晰可見,抑或标志牌被樹木遮擋時,标志牌的特征也會改變。這時傳統機器學習算法就不是那麼有效了,這也是一直困擾學者們的一大難題,是以各種旋轉不變性、光照不變性算法相繼被提出,但始終沒有某一種算法特别奏效。

随着時間的推移,深度學習迅速地改變了這一切。

選擇深度學習的原因

在深度學習出現之前,機器學習的工程師們往往需要花費數天、數周,甚至數月的時間去收集資料,然後對資料進行篩選,嘗試各種不同的特征提取方法對資料進行提取,或者結合幾種不同的特征對資料進行分類和預測。作者曾經使用傳統機器學習檢測資料時,就花費了大量的時間嘗試使用各種不同的算法、特征提取方式和分類器,對資料進行特征提取。經過大量的嘗試,才找到滿足業務要求的特定方法模型。

随着深度學習的爆發,最新的深度學習算法已經遠遠超越了傳統的機器學習算法對于資料的預測和分類精度。

深度學習不需要我們自己去提取特征,而是自動地對資料進行篩選,自動地提取資料高維特征。

深度學習的一般方法(見圖4)與傳統機器學習中的監督學習一般方法(見圖3)相比,少了特征工程,節約了工程師們大量工作時間。

圖 4 深度學習一般方法

選擇深度學習

,一方面因為它節省工程師們的時間,降低工程師的工作量,提高工作效率,進而讓工程師們把更多的時間和精力投入在更有價值的研究方向上;另一方面是深度學習的效果,已經在衆多領域開始超越傳統的機器學習算法,甚至在某些領域能夠獲得比人類預測的更好的效果;此外,深度學習還可以與大資料無縫結合,輸入龐大的資料集進行大資料端到端的學習過程,這種大道至簡的理念吸引着無數的研究者。

深度學習已經不僅僅是計算機科學領域的問題,它結合了更多關于神經網絡的問題,涉及生物學、神經科學等衆多領域,仍有非常巨大的發展空間。深度學習就像一座寶礦,我們看到的或許隻是冰山一角……

深度學習前的思考

聽上去顯得有點高端大氣,但想要正确開啟深度學習之門,最好的方法是先回答下面 4 個問題:

· 需要給深度網絡模型輸入什麼樣的資料?

· 想要從深度網絡模型中提取什麼樣類型的資料?

· 選擇哪種深度網絡模型更加适用于手頭上的資料?

· 根據這個深度網絡模型我們希望從新的資料得到一個什麼樣的結果?

第一個問題是給模型輸入什麼樣的數

據,回答這個問題的時候我們就大概知道應該選擇什麼樣的資料作為樣本,樣本的形式是圖檔、文檔,還是語音。明确了要從模型中提取什麼類型的資料體後,我們就會更加清晰地定義網絡模型的損失函數。

第三個問題可以讓我們進一步理清脈絡

,将問題落實到神經網絡的細節中,例如卷積神經網絡 CNN 中大概是用多少層的網絡,循環神經網絡 RNN 中應該定義多少層循環和時間步等。最後一個問題将更加有利于我們把深度學習的算法與模型結合到工程項目當中,真正幫助我們解決實際問題。

如果我們能夠很好地回答上述這 4 個問題,表明我們對所遇到的問題有了充分的了解和分析,也就能夠針對特定的任務(資料和場景)去尋找到合适的工作流程或者工作方式,快速建立屬于自己的深度學習模型了!

不懂代碼也想學會深度學習?這本書告訴你真的很簡單
本書系統全面、循序漸進地介紹了深度學習的各方面知識,包括技術經驗、使用技巧和實踐案例。

本書詳細介紹了目前深度學習相關的常用網絡模型(ANN、DNN、CNN、RNN),以及不同網絡模型的算法原理和核心思想。本書利用大量的執行個體代碼對網絡模型進行了分析,這些案例能夠加深讀者對網絡模型的認識。

此外,本書還提供完整的進階内容和對應案例,讓讀者全面深入地了解深度學習的知識和技巧,達到學以緻用的目的。

異步社群三周年活動月開啟,更多好禮等你來
不懂代碼也想學會深度學習?這本書告訴你真的很簡單
不懂代碼也想學會深度學習?這本書告訴你真的很簡單