1. 程式人生 > >普通程式設計師如何入門深度學習?

普通程式設計師如何入門深度學習?

摘要: 作為一名軟體工程師,我們應該活到老學到老,時刻與不斷髮展的框架、標準和正規化保持同步。同時,還要能活學活用,在工作中使用最合適的工具,以提高工作效率。隨著機器學習在越來越多的應用程式中尋得了一席之地,越來越多的程式設計師加入AI領域,那麼,入行AI領域需要哪些技能呢? 人工智慧到底有多火 我相信大家之所以能來看這篇文章,也間接說明了人工智慧這幾年的火爆。自從基於深度學習技術的演算法2012年在ImageNet比賽中獲得冠軍以來,深度學習先是席捲了整個學術界,後又在工業界傳播開來,一瞬間各大企業如果沒有AI部門都不好意思對外宣傳了。BAT中,百度宣佈“All In AI”,阿里建立了達摩院及AI實驗室,騰訊也在前不久會議上宣佈“Ai In All”,並具有騰訊優圖、AI Lab和微信AI實驗室。2017年
7月20日,國務院釋出《新一代人工智慧發展規劃》,將人工智慧上升為國家戰略,為中國人工智慧產業做出戰略部署,對重點任務做出明確解析,搶抓重大機遇,構築我國人工智慧發展的先發優勢。 技術的發展往往遵循一個可預期的模式,即先是萌芽,然後炒作,而後幻滅,接著才是技術成熟後的穩步爬升,最後到達應用高峰。研究分析機構Gartner每年都會推出這樣一個分析新興技術發展趨勢的技術炒作週期報告。前段時間,Gartner釋出了2017年的新興技術炒作週期報告,報告聚焦了前端、後端與平臺發展的三大趨勢,提出了AI將無所不在(人工智慧),體驗將透明化和沉浸式(AR、VR),以及平臺全面數字化(區塊鏈)的觀點,建議企業架構師和對技術創新有追求的人員應該積極探索和關注這三大趨勢,從而瞭解掌握這三大趨勢對自己公司和自己職業發展的未來影響。簡單來說這三大趨勢分別對應於括號中我備註的大家平時耳熟能詳的詞語。從曲線圖可以看出,物聯網、虛擬助手、深度學習、機器學習、無人車、納米電子、認知計算以及區塊鏈正處在炒作的高峰。實際上AR、VR屬於計算機視覺,也可以歸於人工智慧範疇,因此總體上來說,未來人工智慧將無處不在。

Gartner把深度學習、強化學習、常規人工智慧、無人車、認知計算、無人機、會話式使用者介面、機器學習、智慧微塵、智慧機器人、智慧工作環境等均列為AI技術範疇。在人機大戰等吸引眼球的活動助推下,很多AI技術目前正處在炒作的高峰期。比如深度學習、機器學習、認知計算以及無人車等。 對比2016年的炒作週期曲線可以發現,有些太過超前的概念仍然不慍不火,比如智慧微塵。有些概念因為炒作過高已經迅速進入到了幻滅期,比如商用無人機去年還處在觸發期,今年就已經接近幻滅期邊緣了。相對而言,正處在炒作高峰的深度學習和機器學習技術有望在2到5年內達到技術成熟和模式成熟。 除了人工智慧這麼火之外,對於軟體工程師,尤其是移動端開發工程師,有一點我們更要關注,那就是移動端深度學習逐漸成為新的深度學習研究趨勢。未來會有越來越多的基於深度學習的移動端應用出現,作為開發者的我們瞭解深度學習更有助於我們開發出優秀的應用,同時提升自身能力,積極抓住機會,應對未來各種變化。

什麼是機器學習(Machine Learning,ML)? 深度學習的基礎是機器學習,事實上深度學習只是機器學習的一個分支。因此我們要入門深度學習就要先了解一些機器學習的基礎知識。 機器學習最基本的做法,是使用演算法來解析資料、從中學習,然後對真實世界中的事件做出決策和預測。與傳統的為解決特定任務、硬編碼的軟體程式不同,機器學習是用大量的資料來“訓練”,通過各種演算法從資料中學習如何完成任務。 有人曾舉過一個例子,很形象生動,當你使用手機的語音識別進行喚醒時,有沒有想過實現這一功能的全部內部流程呢? 我們日常互動的大部分計算機程式,都可以使用最基本的命令來實現,但是基於機器學習的程式卻沒有那麼簡單,想象下如何寫一個程式來回應 喚醒詞 ,例如“Okay,Google”,“Siri”,和“Alexa”。如果在一個只有你自己和程式碼編輯器的房間裡,僅使用最基本的指令編寫這個程式,你該怎麼做?不妨思考一下……這個問題非常困難。你可能會想像下面的程式: if input_command == 'Okey,Google' :      run_voice_assistant () 但實際上,你能拿到的只有麥克風裡採集到的原始語音訊號,可能是每秒44,000個樣本點。怎樣才能識別出語音內容?或者簡單點,判斷這些訊號中是否包含喚醒詞。
如果你被這個問題難住了,不用擔心。這就是我們為什麼需要機器學習。 雖然我們不知道怎麼告訴機器去把語音訊號轉成對應的字串,但我們自己可以。換句話說,就算你不清楚怎麼編寫程式,好讓機器識別出喚醒詞“Alexa”,你自己完全 能夠  識別出“Alexa”這個詞。由此,我們可以收集一個巨大的 資料集(dataset) ,裡面包含了大量語音訊號,以及每個語音型號 是否  對應我們需要的喚醒詞。使用機器學習的解決方式,我們並非直接設計一個系統去 準確地  辨別喚醒詞,而是寫一個靈活的程式,並帶有大量的 引數(parameters) 。通過調整這些引數,我們能夠改變程式的行為。我們將這樣的程式稱為模型。總體上看,我們的模型僅僅是一個機器,通過某種方式,將輸入轉換為輸出。在上面的例子中,這個模型的 輸入 是一段語音訊號,它的輸出則是一個回答 {yes, no} ,告訴我們這段語音訊號是否包含了喚醒詞。 如果我們選擇了正確的模型,必然有一組引數設定,每當它聽見“Alexa”時,都能觸發 yes 的回答;也會有另一組引數,針對“Apricot”觸發 yes 。我們希望這個模型既可以辨別“Alexa”,也可以辨別“Apricot”,因為它們是類似的任務。 這時候你大概能猜到了,如果我們隨機地設定這些引數,模型可能無法辨別“Alexa”,“Apricot”,甚至任何英文單詞。在而大多數的深度學習中, 學習 就是指在 訓練過程 中更新模型的行為(通過調整引數)。 換言之,我們需要用資料訓練機器學習模型,其過程通常如下:

1.初始化一個幾乎什麼也不能做的模型;
2.抓一些有標註的資料集(例如音訊段落及其是否為喚醒詞的標註);
3.修改模型使得它在抓取的資料集上能夠更準確執行任務;
4.重複以上步驟2和3,直到模型看起來不錯。

什麼是機器學習演算法? 從本質上講,機器學習採用了可以從資料中學習和預測資料的演算法。這些演算法通常來自於統計學,從簡單的迴歸演算法到決策樹等等。 什麼是機器學習模型? 一般來說,它是指在訓練機器學習演算法後建立的模型構件。一旦有了一個經過訓練的機器學習模型,你就可以用它來根據新的輸入進行預測。機器學習的目的是正確訓練機器學習演算法來建立這樣的模型。 機器學習已廣泛應用於資料探勘、計算機視覺、自然語言處理、生物特徵識別、搜尋引擎、醫學診斷、檢測信用卡欺詐、證券市場分析、DNA序列測序、語音和手寫識別、戰略遊戲和機器人等領域。雖然深度學習技術的發展,也促進了語音和文字領域的發展,但變化最顯著的還是屬於計算機視覺領域。而且由於作者是做計算機視覺的,因此這裡也沒法深入介紹語音和自然語言處理領域的過多細節,就簡要介紹下計算機視覺領域的技術發展和相關的應用,後續的實驗環節,大部分也會是基於深度學習的影象應用為主。 機器學習四要素 針對識別喚醒語的任務,我們將語音片段和標註(label)放在一起組成資料集。接著我們訓練一個機器學習模型,給定一段語音,預測它的標註。這種給定樣例預測標註的方式,僅僅是機器學習的一種,稱為 監督學習 。深度學習包含很多不同的方法,我們會在後面的章節討論。成功的機器學習有四個要素:資料、轉換資料的模型、衡量模型好壞的損失函式和一個調整模型權重來最小化損失函式的演算法。 資料(Data) 越多越好。事實上,資料是深度學習復興的核心,因為複雜的非線性模型比其他機器學習需要更多的資料。 模型(Models) 通常,我們拿到的資料和最終想要的結果相差甚遠。例如,想知道照片中的人是不是開心,我們希望有一個模型,能將成千上萬的低階特徵(畫素值),轉化為高度抽象的輸出(開心程度)。選擇正確模型並不簡單,不同的模型適合不同的資料集。在這本書中,我們會主要聚焦於深度神經網路模型。這些模型包含了自上而下聯結的資料多層連續變換,因此稱之為 深度學習 在討論深度神經網路之前,我們也會討論一些簡單、淺顯的模型。 損失函式(Loss Functions) 我們需要對比模型的輸出和真實值之間的誤差。損失函式可以衡量輸出結果對比真實資料的好壞。例如,我們訓練了一個基於圖片預測病人心率的模型。如果模型預測某個病人的心率是100bpm,而實際上僅有60bpm,這時候,我們就需要某個方法來提點一下這個的模型了。 類似的,一個模型通過給電子郵件打分來預測是不是垃圾郵件,我們同樣需要某個方法判斷模型的結果是否準確。典型的機器學習過程包括將損失函式最小化。通常,模型包含很多引數。我們通過最小化損失函式來“學習”這些引數。可惜,將損失降到最小,並不能保證我們的模型在遇到(未見過的)測試資料時表現良好。由此,我們需要跟蹤兩項資料:
  • 訓練誤差(training error):這是模型在用於訓練的資料集上的誤差。類似於考試前我們在模擬試卷上拿到的分數。有一定的指向性,但不一定保證真實考試分數。
  • 測試誤差(test error):這是模型在沒見過的新資料上的誤差,可能會跟訓練誤差很不一樣(統計上稱之為過擬合)。類似於考前模考次次拿高分,但實際考起來卻失誤了。
優化演算法(Optimization Algorithms) 最後,我們需要演算法來通盤考慮模型本身和損失函式,對引數進行搜尋,從而逐漸最小化損失。最常見的神經網路優化使用梯度下降法作為優化演算法。簡單地說,輕微地改動引數,觀察訓練集的損失將如何移動。然後將引數向減小損失的方向調整。 什麼是深度學習 這是機器學習的一個子領域,近年來表現出了很大的潛力。它涉及到大腦中神經元結構和功能的演算法。Andrew Ng曾用下圖對比說明傳統機器學習演算法和深度學習演算法的特點。從圖中可以看出,隨著資料的增多,到達一定量後,深度學習演算法的表現會明顯優於傳統的機器學習演算法。
深度學習中最令人激動的特性之一是它在特徵學習上的表現。該演算法在從原始資料中檢測特徵方面表現地特別好。有一個很好的例子,就是通過深度學習技術來識別汽車圖片中的車輪。下圖說明了典型機器學習與深度學習之間的區別:
在機器學習中特徵選擇部分一般需要人的先驗知識的介入來設計好的特徵提取方法,比如人知道輪子一般是圓的,一般出現在交通工具上,有輪胎、輪轂等部件,基於先驗知識,人可以選取適合提取輪子特徵的方法,再設計分類器以識別輪子。而深度學習通常由多個層組成。它們通常將更簡單的模型組合在一起,通過將資料從一層傳遞到另一層來構建更復雜的模型。通過大量資料的訓練自動得到一個能識別輪子的模型,不需要人工設計特徵提取環節。這是深度學習隨著資料量的增加而優於其他學習演算法的主要原因之一。 隨著深度學習的發展,為了方便演算法人員訓練模型,調整引數等,很多公司開源了優秀的深度學習框架,到目前為止,主要的深度學習框架如下圖所示。目前工業界用的比較多的是Caffe和TensorFlow,Caffe主要在計算機視覺上用的較多,TensorFlow由谷歌開源,相關文件較好,適用範圍廣,基於Python語音,入門簡單,建議新手入門可以選擇TensorFlow。但是這些只是深度學習的平臺框架而已,真正重要的還是學習好深度學習的理論,有了理論各種平臺都不是問題。
TensorFlow簡介 TensorFlow是專門為機器學習而設計的快速數值計算Python庫,它由谷歌開源,旨在讓世界各地更多的研究人員和開發人員掌握深度學習。為了加速深度學習領域的發展,2015年11月9日,Google釋出深度學習框架TensorFlow並宣佈開源。在短短的一年時間內,在GitHub上,TensorFlow就成為了最流行的深度學習專案。 TensorFlow在計算機視覺、語音識別、推薦系統和自然語言處理等場景下都有豐富的應用。雖然Tenforflow開源時間剛滿一年,但是它正在以迅猛的速度滲入到我們的尋常生活中。它支援Linux平臺,Windows平臺,Mac平臺,甚至還宣稱要釋出相應的移動端平臺。其次,TensorFlow提供了非常豐富的深度學習相關的API,可以說目前所有深度學習框架裡,提供的API最全的,包括基本的向量矩陣計算、各種優化演算法、各種卷積神經網路和迴圈神經網路基本單元的實現、以及視覺化的輔助工具、等等。 你可以按照官方的教程安裝TensorFlow,安裝好之後,你就可以用它提供的多個API來訓練機器學習模型了。具體的教程可以參考TensorFlow官網 ,不想看英文的也可以參考 TensorFlow中文社群. 雖然TensorFlow是最受歡迎的機器學習庫,不過也有其他幾個很棒的選擇,如Torch(Facebook使用)、Caffe(出自Berkeley AI研究所的深度學習框架)等等。其中Caffe是第一個在工業上得到廣泛應用的開源深度學習框架,也是第一代深度學習框架裡最受歡迎的框架,目前也有很多企業和科研人員在使用。 學習資料 一旦對基礎知識有了一定的瞭解,你應該知道自己對機器學習的哪些方面比較感興趣,你想在應用程式中使用機器學習,還是想研究機器學習。下面是一些優秀的參考資料,可以幫助你係統的學習。 書籍: 深度學習技術發展迅速,各種平臺框架也迭代很快,推薦相關的書籍其實不太好推薦。在這裡我只推薦兩本書: 第一本是《白話深度學習與TensorFlow》,這本書寫的非常通俗易懂,沒有太多理論知識介紹,基本是深度學習的基礎知識和TensorFlow的相關例程,適合沒有深度學習基礎,想入門深度學習的人看。 第二本是美國Ian,Goodfellow 寫的《Deep Learning》,這本書有中文翻譯版《深度學習》,但是這本書基本是講深度學習理論的,沒有基礎的話很難看懂,但是翻譯者提供了PDF在GitHub上,想看的可以去下載: https://github.com/exacity/deeplearningbook-chinese 網路資源: 對於新手入門個人覺得很多網上的手冊、教程和部落格都很不錯。這篇文章主要面向零基礎的想了解DeepLearning的人員,太複雜專業的暫時就不推薦了,以下是一些基礎的入門資源。 1.吳恩達的深度學習線上課程:這是吳恩達成立DeepLearning.ai線上教育網站後的第一個課程,網易雲課堂引進了,偏工程可以學習一下,還有相關證書,吳恩達給你的人工智慧第一課. 2.莫煩Python:這是一個在澳大利亞讀博的中國人,他會講Python和深度學習的教程,有視訊。Python基本是現在做深度學習的必會語言了,喜歡的可以去這裡學習https://morvanzhou.github.io/about/ 3.臺灣李巨集毅教授的線上課程:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML17_2.html ,還有一個300多頁的ppt,比較系統,也最通俗易懂的:PPT連結 4.TensorFlow中文社群:http://www.tensorfly.cn
5.想學習caffe框架的,也可以參考徐其華的部落格:http://www.cnblogs.com/denny402/tag/caffe/ 結語 “整個世界就是一個大資料問題” - Andrew McAfee 掌握機器學習就像是馴服一頭野獸。但是,如果你已經吃透它,那麼它就是你身邊一個非常有價值的資源。暫時想到的就這麼多,願大家一同進步…… 參考資料: 1.https://udarajay.com/applied-machine-learning-the-less-confusing-guide/?spm=5176.100239.blogcont223187.31.wGjoeK 2. http://zh.gluon.ai/chapter_preface/index.html

公眾號玉剛說聚焦於『Android開發前沿、AI技術等、職業發展、生活感悟、妹子圖』,歡迎大家關注玉剛說: