Introduction to deep learning--Week 1-Neural Networks and Deep Learning

什麼是神經網絡

通過一個預測房價的案例來了解:
假設有一組數據,房子的大小和對應的房價,通過這些數據可以擬合出一根如圖所示的曲線。
這裏寫圖片描述
而神經網絡就是,輸入房間大小,通過神經元,輸入得到房價:
這裏寫圖片描述

通過神經元的堆砌可以獲得更大的神經網絡,假設現在通過一個家庭的大小,和房子周圍的步行程度,周圍學校質量等因素來決定房子的價格。而這三個屬性又通過房子大小、臥室數量、郵編等因素交叉決定,如下圖:
這裏寫圖片描述

監督學習

給定特徵x,擬合一個函數,得到輸出y
這裏寫圖片描述
神經網絡中的監督學習,案例有:
1.房價預測,輸入是房子的各種特徵,輸出是價格
2.在廣告應用中,輸入是廣告信息,用戶信息,給用戶推薦廣告,判讀用戶是否會打開這個廣告,這對廣告商來說十分重要
3.在計算機視覺中,輸入一張圖片,獲得想要的屬性,可以是1到1000的數字,表明是哪一張照片
4.在語音識別方面,可以輸入音頻片段,然後輸出文本
5.在機器翻譯中,輸入一段英文,輸入是他的中文翻譯
6.在自動駕駛方面,輸入前方路況的一張照片,和對應的雷達信息,訓練後的NN的輸出就是周圍其他車子的位置,這是無人駕駛的關鍵組件。

將這個神經網絡系統嵌入到更大型的系統中,比如無人駕駛系統

在案例1,2中用的是標準NN,在圖像領域中,用的是CNN。對於案例3的audio,隨着時間播放,所以自然的認爲是一維時間序列,對於序列數據,常用RNN。在案例5中,單詞是一個一個出現的,也看做是序列數據,使用RNN或者更復雜的RNNs。對於案例6,裏面有圖片又有序列的雷達信息,所以可能會用更復雜的混合神經網絡。

結構化數據數據 & 非結構化數據

這裏寫圖片描述
對於結構化數據,比如上述案例中的房價預測、在線廣告,都有一個數據庫,在這個數據庫中,每一個項,即特徵,都有清晰的定義,比如size,bedrooms之類的。
對於非結構化數據,特徵是,音頻中的每一幀,圖像中的像素點,或者文本中的每個單詞。

從歷史角度來看,兩者相比,計算機難以理解非結構化數據,但對於人類卻更擅長理解非結構化數據。由於神經網絡的興起,計算機能更好的理解非結構化數據。NN在很多短期經濟價值的創造是基於結構化數據的,比如更好的廣告系統 等。

爲啥子深度學習又火了

這裏寫圖片描述
&emsp&emsp用上面這個圖來說明爲什麼DL這麼火
&emsp&emspx軸代表數據量,y軸代表性能,比如過濾垃圾郵件的準確率,廣告準確點擊率,或者是用於無人駕駛中判斷其他車輛位置的神經網絡的準確率。根據傳統機器學習方法,可以得到一個關於數據量的函數,即最下面紅色那個曲線。它的性能在一開始的時候,隨着數據的增加會上升,但是達到一定量的數據之後,就不再上升,是因爲這些模型無法處理海量數據。在過去20年,有很多問題,但那時候的數據量只有(x軸上的第一個小箭頭)那麼多,多虧了數字化社會,手機海量數據變得容易起來。人們在數字設備花費的時間越來越多,數字設備上的活動都能創造數據。比如價格變得便宜的相機,被內嵌在手機、物聯網中的各種傳感器,越來越多數據被收集到了。在過去的20年那裏,收集到的海量數據遠遠超過了傳統機器學習方法所能處理的規模。
如果訓練一個小型的NN,它的性能可能是黃色曲線那樣,訓練一箇中等size的NN,可能得到如圖藍色的曲線,如果訓練一個大型的NN則效果可能是綠色曲線。
想要效果能達到綠色曲線那樣,有兩個條件,一是需要訓練一個規模足夠大的NN,能夠發揮出海量數據的優點,二要數據量能達到(x軸上的第2個小箭頭)。規模在推動深度學習的進步,所謂規模,一個是神經網絡的規模,有很多神經元,很多參數,很多連接,另一個是指數據的規模。
要想讓NN效果好,要麼訓練一個更大的NN,要麼使用更多的數據,但這都只能在一定程度上起作用。因爲最終,要麼你耗盡了數據,要麼數據規模太多,需要訓練的時間太久,但只是增加scale就能讓效果提升很多。

x軸是帶標籤的數據的量,在訓練神經網絡的時候,輸入x和標籤y,即(x,y).
m代表訓練集的規模,或者是訓練樣本的數量

在訓練集還小的時候,各種算法的性能相對排名不是很明確。所以當訓練集不是很大的時候,效果會取決於skills at hand engineering features,以及一些算法方面處理的細節。所以,可能會有人訓練了一個SVM,在數據集小的時候,效果比一個NN還好。
只有當數據集很大的時候,可以看到large NN的效果遠遠領先其他算法。

data的規模,計算機的computation能力,以及近幾年的算法方面的創新,都讓DL效果越來越好。算法方面的創新都是爲了讓NN運行的更快,比如激活函數sigmoid轉變爲ReLU。在使用梯度下降算法中,在sigmoid函數中,越往兩邊走,梯度會逐漸接近於0,學習率會越來越小,學習速度會變慢,當改爲後者時,只要輸入爲正,梯度就不會爲0,後者讓梯度下降算法運行得更快。

快速計算的兩一個原因,在訓練NN過程中,有了idea,就code,然後就experiment,然後回去改一些細節,迭代的速度影響很大。如果10分鐘能這樣迭代一次,就能嘗試更多的改進,因爲computation的速度也會影響迭代速度,迭代速度也會影響到算法的更新。(我承認下面這個圖我畫的巨醜逃。。。
這裏寫圖片描述 同時,專用的硬件也在發展,比如GPU。