1. 程式人生 > >學習深度學習--深度學習中的一些基本概念

學習深度學習--深度學習中的一些基本概念

人類一直沒有停止過探索世界的腳步,從古至今,我們一直渴望著能夠找到一種方法能夠預測未來,解決人類生存最原始的焦慮,從伏羲八卦到現代自然科學,無不在通過對自然界的觀察和各種資料中提取規則,希望能夠應對各種不確定性。在這過程中出現了數學、統計學、概率論、資訊理論、模式識別等等學科,用來解釋自然的規律,在歷史長河中也閃耀著巨匠的名字:夏農,費雪,圖靈……。機器學習和深度學習也是其中的一種方法,那究竟什麼是深度學習?它是怎樣構成的?它能夠解決一些什麼樣的問題?如何通過程式去編寫一個深度學習的程式並將它應用在實際的問題解決中?開個博文來記錄自己的學習過程,所有記錄過程都來自於我對機器學習和深度學習的一些疑問,歡迎各位大佬指點討論。   在講深度學習之前,我們現在聽過了太多的名詞,人工智慧,機器學習,神經網路,深度學習,那麼他們之前是一種什麼樣的關係呢?畫了一張圖來表示一下,深度學習是神經網路的分支,神經網路是機器學習的一種方法,機器學習是人工智慧的一種分支,知道這個之後至少不會被一堆名詞搞暈了。 既然深度學習是機器學習的一種,那先了解下在計算機這麼發達的今天,我們為什麼需要機器學習?隨著電腦科學的發展,現在有大量的程式猿在編寫程式碼,通過邏輯和資料結構為我們構建一個一個的程式,來幫助我們的生活,但是在程式設計的過程中,有一些問題很難通過常規的規則和邏輯程式設計來實現,比如從圖片中識別這是不是一隻貓,這個對於人來說很簡單的事情,對於計算機來說卻難於上青天。若假設所有影象的高和寬都是同樣的 400 畫素大小,一個畫素由紅綠藍三個值構成,那麼一張影象就由近 50 萬個數值表示。那麼哪些數值隱藏著我們必要的資訊呢?是所有數值的平均數,還是四個角的數值,抑或是影象中的某一個特別的點?事實上,要想解讀影象中的內容,你需要尋找僅僅在結合成千上萬的數值時才會出現的特徵,比如邊緣、質地、形狀、眼睛、鼻子等,最終才能判斷影象中是否含有貓。   一種解決以上問題的思路是逆向思考。與其設計一個解決問題的程式,我們不如從最終的需求入手來尋找一個解決方案。事實上,這也是目前的機器學習和深度學習應用共同的核心思想:我們可以稱其為“用資料程式設計”。與其枯坐在房間裡思考怎麼設計一個識別貓的程式,不如利用人類肉眼在影象中識別貓的能力。我們可以收集一些已知包含貓與不包含貓的真實影象,然後我們的目標就轉化成如何從這些影象入手來得到一個可以推斷出影象中是否含有貓的函式。這個函式的形式通常通過我們的知識來對針對特定問題選定:例如我們使用一個二次函式來判斷影象中是否含有貓。但是像二次函式係數值這樣的函式引數的具體值則是通過資料來確定。
  通俗來說,機器學習是一門討論各式各樣適用於不同問題的函式形式,以及如何使用資料來有效地獲取函式引數具體值的學科。深度學習是指機器學習中的一類函式,它們的形式通常為多層神經網路。   那什麼是神經網路呢? 最早的神經網路Perceptron(感知機)誕生於1960年代,被譽為邁向類人機器智慧的第一步。1969年,麻省理工學院的馬文·明斯基(Marvin Minsky)和西摩·帕爾特(Seymour Papert)發表了著作《Perceptrons》,用數學的方法證明這種網路只能實現最基本的功能。這種網路只有兩層神經元,一個輸入層和一個輸出層。辛頓在1986年取得了突破,他發現反向傳播可以用來訓練深度神經網路,即多於兩層或三層的神經網路。但自那以後又過了26年,不斷增強的計算能力才使這一理論得以證實。辛頓和他在多倫多的學生於2012年發表的一篇論文表明,用反向傳播訓練的深度神經網路在影象識別領域打敗了當時最先進的系統——“深度學習”終於面世,並在過去十多年內推動著影象識別、語音識別、機器翻譯、廣告點選預測等各領域的快速發展。   從直觀上來看看神經網路長什麼樣呢?
首先來看神經元,通過樹突接收各種電訊號,然後通過細胞核處理,然後由軸突傳遞給到相關聯的其他神經元。   但是對於計算機來說要怎麼去表達呢?我們先看一個最簡單的神經元:   將這個模型再通用化一點,接收多個輸入,然後通過啟用函式,將資料的資料對映為一個輸出:   然後看神經網路,神經網路就是在神經元的基礎上像對積木一樣,將神經元連線起來,這樣就形成了一個神經網路,那深度學習就是在神經網路的基礎上,增加更多的隱藏層,能夠擬合更復雜的問題。
      那神經網路是不是萬能的呢? 神經網路或者深度學習在廣告預測、影象識別、語音識別等等領域廣泛應用,從目前來看,神經網路創造價值基本是基於監督學習的,什麼是監督學習?簡單來多就是我們知道訓練樣本的輸出y。在實際的使用當中,機器學習解決的大部分問題都是監督學習問題。我們來看看機器學習在現實中的一些應用,然後看看在不同應用場景下的神經網路有什麼不同。     在吳恩達的深度學習課程中,給出了上面的一些例子,用來說明神經網路的一些應用場景和需要的不同的神經網路模型,對於一般的監督學習問題,我們使用標準神經網路就行了,而對於影象識別問題,我們則常用CNN,對於像語音識別這樣處理序列訊號時,我們則需要考慮使用RNN,還有更多更復雜的應用則需要多種模型進行混合使用。這裡又出現了一些新名詞:CNN,RNN,那什麼時CNN?什麼是RNN?先從直觀上來看看長什麼樣子,具體的學習則留在後面進行。       前面在瞭解深度學習的歷史時提到,辛頓在86年就提出了利用反向傳播演算法來訓練深度神經網路,為什麼在時隔26年後才風靡開來, 為什麼深度學習能夠在各個領域帶來如此大的提升?吳恩達教授給了一張很形象的圖來解釋這個問題: 從這張圖上可以看到,在小資料量的時候傳統的機器學習演算法的表現是比較好的,但是隨著資料量的逐步增加,大規模的深度神經網路的表現會遠遠優於其他演算法,而且基本保持了上升的趨勢,而近些年來,隨著數字化的程序加快,感測器裝置的飛速增長,我們對資料的採集變得越來越容易,每天在網際網路上會產生海量的資料,資料量呈幾何增長,加上GPU的出現,算力大幅提升,使得深度學習能夠在更多方面有更好地表現。當然還有演算法的不斷提升,例如:神經網路神經元的啟用函式是Sigmoid函式,後來改成了ReLU函式、優秀的容量控制方法,例如丟棄法、記憶網路和神經編碼器—直譯器這樣的多階設計使得針對推理過程的迭代建模方法變得可能等等,當然還有各類深度學習的框架:如TensorFlow,Caffe 2,PyTorch,CNTK,MXNet等,大大推動了深度學習的發展和廣泛的應用。簡要來說:資料、算力、演算法、產業投入共同造就了深度學習的繁榮。   未來已來,隨著物聯網時代的到來,從人人連線,人物連線到萬物連線,感測器數量爆發增長,區塊鏈技術帶來更加安全的資料交易和共享,資料量將還會有大的提升。算力方面:GPU、量子計算機等,會帶來算力的大幅提升。從產業和研究上看,深度學習依然是熱點,大量的學校企業投入進行研究,相信深度學習在未來還會能夠有更好地表現,當然也希望能夠出現更好地模型和演算法,替代掉深度學習,推動著整個社會智慧化的車輪不斷滾滾向前。     主要參考:吳恩達教授 《深度學習》課程,李沐:《動手深度學習》