吳恩達(Andrew Ng)相信大家都不陌生了。8 月 8 日,吳恩達在他自己創辦的線上教育平臺 Coursera 上線了他的人工智慧專項課程(Deep Learning Specialization)。此課程廣受好評,通過視訊講解、作業與測驗等讓更多的人對人工智慧有了瞭解與啟蒙,國外媒體報導稱:吳恩達這次深度學習課程是迄今為止,最全面、系統和容易獲取的深度學習課程,堪稱普通人的人工智慧第一課。
該專項課程的Coursera地址:
https://www.coursera.org/specializations/deep-learning
另外,網易雲課堂前段時間宣佈跟吳恩達合作,拿到了獨家版權,開設了深度學習微專業課,並且提供中文字幕翻譯,降低了學習門檻。但是隻有視訊和課件材料,沒有Coursera 上的作業、考試等環節,也不會提供證書,需要證書的還得去 Coursera 上學習。這裡附上網易雲課堂該專項課程的地址:
http://mooc.study.163.com/smartSpec/detail/1001319001.htm
好了,在接下來的一段時間裡,我將同步開始學習Coursera上深度學習專項課程,並將筆記以部落格的形式記錄下來。專項課程的第一門課是《神經網路與深度學習》。今天介紹第一講:深度學習概述。
1. What is a neural network?
簡單來說,深度學習(Deep Learning)就是更復雜的神經網路(Neural Network)。那麼,什麼是神經網路呢?下面我們將通過一個簡單的例子來引入神經網路模型的概念。
假如我們要建立房價的預測模型,一共有六個房子。我們已知輸入x即每個房子的面積(多少尺或者多少平方米),還知道其對應的輸出y即每個房子的價格。根據這些輸入輸出,我們要建立一個函式模型,來預測房價:y=f(x)。首先,我們將已知的六間房子的價格和麵積的關係繪製在二維平面上,如下圖所示:
一般地,我們會一條直線來擬合圖中這些離散點,即建立房價與面積的線性模型。但是從實際考慮,我們知道價格永遠不會是負數。所以,我們對該直線做一點點修正,讓它變成折線的形狀,當面積小於某個值時,價格始終為零。如下圖藍色折線所示,就是我們建立的房價預測模型。
其實這個簡單的模型(藍色折線)就可以看成是一個神經網路,而且幾乎是一個最簡單的神經網路。我們把該房價預測用一個最簡單的神經網路模型來表示,如下圖所示:
該神經網路的輸入x是房屋面積,輸出y是房屋價格,中間包含了一個神經元(neuron),即房價預測函式(藍色折線)。該神經元的功能就是實現函式f(x)的功能。
值得一提的是,上圖神經元的預測函式(藍色折線)在神經網路應用中比較常見。我們把這個函式稱為ReLU函式,即線性整流函式(Rectified Linear Unit),形如下圖所示:
上面講的只是由單個神經元(輸入x僅僅是房屋面積一個因素)組成的神經網路,而通常一個大型的神經網路往往由許多神經元組成,就像通過樂高積木搭建複雜物體(例如火車)一樣。
現在,我們把上面舉的房價預測的例子變得複雜一些,而不是僅僅使用房屋面積一個判斷因素。例如,除了考慮房屋面積(size)之外,我們還考慮臥室數目(#bedrooms)。這兩點實際上與家庭成員的個數(family size)有關。還有,房屋的郵政編碼(zip code/postal code),代表了該房屋位置的交通便利性,是否需要步行還是開車?即決定了可步行性(walkability)。另外,還有可能郵政編碼和地區財富水平(wealth)共同影響了房屋所在地區的學校質量(school quality)。如下圖所示,該神經網路共有三個神經元,分別代表了family size,walkability和school quality。每一個神經元都包含了一個ReLU函式(或者其它非線性函式)。那麼,根據這個模型,我們可以根據房屋的面積和臥室個數來估計family size,根據郵政編碼來估計walkability,根據郵政編碼和財富水平來估計school quality。最後,由family size,walkability和school quality等這些人們比較關心的因素來預測最終的房屋價格。
所以,在這個例子中,x是size,#bedrooms,zip code/postal code和wealth這四個輸入;y是房屋的預測價格。這個神經網路模型包含的神經元個數更多一些,相對之前的單個神經元的模型要更加複雜。那麼,在建立一個表現良好的神經網路模型之後,在給定輸入x時,就能得到比較好的輸出y,即房屋的預測價格。
實際上,上面這個例子真正的神經網路模型結構如下所示。它有四個輸入,分別是size,#bedrooms,zip code和wealth。在給定這四個輸入後,神經網路所做的就是輸出房屋的預測價格y。圖中,三個神經元所在的位置稱之為中間層或者隱藏層(x所在的稱之為輸入層,y所在的稱之為輸出層),每個神經元與所有的輸入x都有關聯(直線相連)。
這就是基本的神經網路模型結構。在訓練的過程中,只要有足夠的輸入x和輸出y,就能訓練出較好的神經網路模型,該模型在此類房價預測問題中,能夠得到比較準確的結果。
2. Supervised Learning with Neural Networks
目前為止,由神經網路模型創造的價值基本上都是基於監督式學習(Supervised Learning)的。監督式學習與非監督式學習本質區別就是是否已知訓練樣本的輸出y。在實際應用中,機器學習解決的大部分問題都屬於監督式學習,神經網路模型也大都屬於監督式學習。下面我們來看幾個監督式學習在神經網路中應用的例子。
首先,第一個例子還是房屋價格預測。根據訓練樣本的輸入x和輸出y,訓練神經網路模型,預測房價。第二個例子是線上廣告,這是深度學習最廣泛、最賺錢的應用之一。其中,輸入x是廣告和使用者個人資訊,輸出y是使用者是否對廣告進行點選。神經網路模型經過訓練,能夠根據廣告型別和使用者資訊對使用者的點選行為進行預測,從而向使用者提供使用者自己可能感興趣的廣告。第三個例子是電腦視覺(computer vision)。電腦視覺是近些年來越來越火的課題,而電腦視覺發展迅速的原因很大程度上是得益於深度學習。其中,輸入x是圖片畫素值,輸出是圖片所屬的不同類別。第四個例子是語音識別(speech recognition)。深度學習可以將一段語音訊號辨識為相應的文字資訊。第五個例子是智慧翻譯,例如通過神經網路輸入英文,然後直接輸出中文。除此之外,第六個例子是自動駕駛。通過輸入一張圖片或者汽車雷達資訊,神經網路通過訓練來告訴你相應的路況資訊並作出相應的決策。至此,神經網路配合監督式學習,其應用是非常廣泛的。
我們應該知道,根據不同的問題和應用場合,應該使用不同型別的神經網路模型。例如上面介紹的幾個例子中,對於一般的監督式學習(房價預測和線上廣告問題),我們只要使用標準的神經網路模型就可以了。而對於影象識別處理問題,我們則要使用卷積神經網路(Convolution Neural Network),即CNN。而對於處理類似語音這樣的序列訊號時,則要使用迴圈神經網路(Recurrent Neural Network),即RNN。還有其它的例如自動駕駛這樣的複雜問題則需要更加複雜的混合神經網路模型。
CNN和RNN是比較常用的神經網路模型。下圖給出了Standard NN,Convolutional NN和Recurrent NN的神經網路結構圖。
CNN一般處理影象問題,RNN一般處理語音訊號。他們的結構是什麼意思?如何實現CNN和RNN的結構?這些問題我們將在以後的課程中來深入分析並解決。
另外,資料型別一般分為兩種:Structured Data和Unstructured Data。
簡單地說,Structured Data通常指的是有實際意義的資料。例如房價預測中的size,#bedrooms,price等;例如線上廣告中的User Age,Ad ID等。這些資料都具有實際的物理意義,比較容易理解。而Unstructured Data通常指的是比較抽象的資料,例如Audio,Image或者Text。以前,計算機對於Unstructured Data比較難以處理,而人類對Unstructured Data卻能夠處理的比較好,例如我們第一眼很容易就識別出一張圖片裡是否有貓,但對於計算機來說並不那麼簡單。現在,值得慶幸的是,由於深度學習和神經網路的發展,計算機在處理Unstructured Data方面效果越來越好,甚至在某些方面優於人類。總的來說,神經網路與深度學習無論對Structured Data還是Unstructured Data都能處理得越來越好,並逐漸創造出巨大的實用價值。我們在之後的學習和實際應用中也將會碰到許多Structured Data和Unstructured Data。
3. Why is Deep Learning taking off?
如果說深度學習和神經網路背後的技術思想已經出現數十年了,那麼為什麼直到現在才開始發揮作用呢?接下來,我們來看一下深度學習背後的主要動力是什麼,方便我們更好地理解並使用深度學習來解決更多問題。
深度學習為什麼這麼強大?下面我們用一張圖來說明。如下圖所示,橫座標x表示資料量(Amount of data),縱座標y表示機器學習模型的效能表現(Performance)。
上圖共有4條曲線。其中,最底下的那條紅色曲線代表了傳統機器學習演算法的表現,例如是SVM,logistic regression,decision tree等。當資料量比較小的時候,傳統學習模型的表現是比較好的。但是當資料量很大的時候,其表現很一般,效能基本趨於水平。紅色曲線上面的那條黃色曲線代表了規模較小的神經網路模型(Small NN)。它在資料量較大時候的效能優於傳統的機器學習演算法。黃色曲線上面的藍色曲線代表了規模中等的神經網路模型(Media NN),它在在資料量更大的時候的表現比Small NN更好。最上面的那條綠色曲線代表更大規模的神經網路(Large NN),即深度學習模型。從圖中可以看到,在資料量很大的時候,它的表現仍然是最好的,而且基本上保持了較快上升的趨勢。值得一提的是,近些年來,由於數字計算機的普及,人類進入了大資料時代,每時每分,網際網路上的資料是海量的、龐大的。如何對大資料建立穩健準確的學習模型變得尤為重要。傳統機器學習演算法在資料量較大的時候,效能一般,很難再有提升。然而,深度學習模型由於網路複雜,對大資料的處理和分析非常有效。所以,近些年來,在處理海量資料和建立複雜準確的學習模型方面,深度學習有著非常不錯的表現。然而,在資料量不大的時候,例如上圖中左邊區域,深度學習模型不一定優於傳統機器學習演算法,效能差異可能並不大。
所以說,現在深度學習如此強大的原因歸結為三個因素:
- Data
-
Computation
-
Algorithms
其中,資料量的幾何級數增加,加上GPU出現、計算機運算能力的大大提升,使得深度學習能夠應用得更加廣泛。另外,演算法上的創新和改進讓深度學習的效能和速度也大大提升。舉個演算法改進的例子,之前神經網路神經元的啟用函式是Sigmoid函式,後來改成了ReLU函式。之所以這樣更改的原因是對於Sigmoid函式,在遠離零點的位置,函式曲線非常平緩,其梯度趨於0,所以造成神經網路模型學習速度變得很慢。然而,ReLU函式在x大於零的區域,其梯度始終為1,儘管在x小於零的區域梯度為0,但是在實際應用中採用ReLU函式確實要比Sigmoid函式快很多。
構建一個深度學習的流程是首先產生Idea,然後將Idea轉化為Code,最後進行Experiment。接著根據結果修改Idea,繼續這種Idea->Code->Experiment的迴圈,直到最終訓練得到表現不錯的深度學習網路模型。如果計算速度越快,每一步驟耗時越少,那麼上述迴圈越能高效進行。
4. About this Course
這裡簡單列一下本系列深度學習專項課程有哪些:
- Neural Networks and Deep Learning
-
Improving Deep Neural Networks: Hyperparameter tuning, Regularization and Optimization
-
Structuring your Machine Learning project
-
Convolutional Neural Networks
-
Natural Language Processing: Building sequence models
目前我們正在學習的是第一門課《Neural Networks and Deep Learning》。Coursera上關於這門課的教學日程安排如下:
- Week 1: Introduction
-
Week 2: Basics of Neural Network programming
-
Week 3: One hidden layer Neural Networks
-
Week 4: Deep Neural Networks
這門課我打算用5次筆記進行總結。
5. Summary
本節課的內容比較簡單,主要對深度學習進行了簡要概述。首先,我們使用房價預測的例子來建立最簡單的但個神經元組成的神經網路模型。然後,我們將例子複雜化,建立標準的神經網路模型結構。接著,我們從監督式學習入手,介紹了不同的神經網路型別,包括Standard NN,CNN和RNN。不同的神經網路模型適合處理不同型別的問題。對資料集本身來說,分為Structured Data和Unstructured Data。近些年來,深度學習對Unstructured Data的處理能力大大提高,例如影象處理、語音識別和語言翻譯等。最後,我們用一張對比圖片解釋了深度學習現在飛速發展、功能強大的原因。歸納其原因包含三點:Data,Computation和Algorithms。
更多AI資源請關注公眾號:AI有道(ID:redstonewill)