神經網絡、有監督學習與深度學習從屬於筆者的Deep Learning Specialization 課程筆記系列文章,本文主要記述了筆者學習 Andrew NG Deep Learning Specialization 系列課程的筆記與代碼實現。算法
深度學習正在逐步地改變世界,從網絡搜索、廣告推薦這樣傳統的互聯網業務到健康醫療、自動駕駛等不一樣的行業領域。百年前的電氣革命爲社會帶來了新的支柱產業,而現在 AI 正是新時代的電力基礎,驅動社會技術的快速發展。本課程的第一部分,關注於如何構建包括深度神經網絡在內的神經網絡以及如何利用數據訓練該網絡,課程的最後將會構建出可識別動物的深度神經網絡。本課程的第二部分將會講解更多有關於深度學習實踐的相關資料,包括超參數調優、正則化、如何從 Momentum Armrest Prop 以及 AD Authorization 等算法中選擇合適的優化算法。第三部分將會學習如何自定義機器學習項目,如何進行數據預處理、將數據應用到模型訓練、提取交叉校驗的訓練集與驗證集等內容。第四部分將會着眼於卷積神經網絡 CNN,如何構建經典的 CNN 模型。在最後的第五部分,將會學習構建序列模型(Seq2Seq 等)以解決天然語言處理相關的任務;典型的序列模型包括了 RNNs、LSTM 等。數據庫
深度學習每每關聯於大規模神經網絡的訓練,本章咱們即來了解下何謂神經網絡。以經典的房屋價格預測爲例,假設咱們擁有六組房屋數據,每組包含了房屋的面積以及價格;咱們但願尋找合適的函數來根據房屋的尺寸預測房屋價格。若是咱們採用線性迴歸來解決這個問題,咱們會畫出一條 y = kx + b
這樣的函數線,其形式以下黑色線所示:網絡
咱們知道房屋的價格不可能爲負數,所以咱們能夠將使用 ReLU(Rectified Linear Unit)函數來描述尺寸與價格之間的關係,如上圖藍色線型所示。咱們能夠將該問題抽象爲輸入爲房間的尺寸 x,輸出爲房間的價格 y,而某個神經元即爲接受輸入而且進行合適的運算以後輸出目標值的函數:架構
如上圖所示便是最簡單的單元神經網絡,而複雜的神經網絡便是由無數的神經元分層鏈接堆疊而成。譬如實際的房屋價格會由尺寸、臥室數目、所屬區域(Zip Code)以及社區的富裕程度影響。咱們理想的神經網絡便是可以自動幫咱們構建隱層(Hidden Units),即輸入單元之間的關係以進行最好地預測:機器學習
給定輸入以後,神經網絡的任務之一便是爲咱們自動構建隱層;每一個隱層單元都會輸入輸入層的所有特徵做爲輸入值。函數
神經網絡的分類不少,不過截止到目前大多數的有價值的神經網絡都仍是基於機器學習中所謂的有監督學習(Supervised Learning)。在有監督學習中,咱們的訓練數據集中已知了特徵與結果輸出之間的對應關係,而目標就是尋找正確的輸入與輸出之間的關係表示。譬如目前最賺錢的深度學習應用之一,在線廣告中就是輸入有關於網站展現的信息以及部分用戶的信息,神經網絡會預測用戶是否會點擊該廣告;經過爲不一樣的用戶展現他們最感興趣的廣告,來增長用戶的實際點擊率。下表即列舉了幾種常見的領域應用與它們的輸入輸出:性能
計算機視覺近年來也發展迅速,典型的應用之一便是圖片標註;咱們可能隨機輸入一張圖片來尋找與它最相近的圖片。語音識別則是可以將用戶輸入的語音數據轉化爲文字表述;機器翻譯則是能將不一樣語言間的語句進行自由轉化,譬如將某個英文段落轉化爲對應的中文表述。而在自動駕駛中,咱們可能會輸入某張從雷達中獲取的車前圖片,來判斷路上其餘車的相對位置。而對於這些不一樣的行業領域咱們也須要應用不一樣類型的神經網絡,譬如對上文說起的房價預測,咱們就可使用標準的神經網絡;而對於圖片應用則會優先考慮使用卷積神經網絡(CNN)。學習
而對於序列數據,譬如隨時間播放的音頻流,其能夠表示爲一維的時間序列,咱們一般會使用 RNN 來處理這個類型的數據。而在文本處理中,咱們也經常將文本表示爲字符序列,所以也每每會使用 RNN 來處理這個類型的數據。對於自動駕駛這樣更爲複雜的應用,咱們可能會須要同時處理圖片、文本等多種類別的數據,所以會使用混合網絡架構。大數據
模型訓練中咱們常見的另外一組概念就是結構化數據與非結構化數據,結構化數據有點相似於關係型數據庫中存放的數據;譬如上面介紹的房屋價格預測中,咱們會擁有包含了尺寸、臥室數等列的數據表,這種形式的就是所謂結構化數據。結構化數據中每一個特徵,譬如房間尺寸、臥室數目、用戶年齡等都有可解釋的意義;而非結構化數據的典型表明,語音、文本或者圖片,每每會使用像素值或者單個詞做爲特徵向量的組成,這些特徵值每每很難有實際意義的解釋。人類通過長時間的進化以後可以較好地辨析非結構化數據,而利用深度學習技術,如今機器也在不斷提高自身對於非結構化數據的辨析能力。優化
深度學習背後的理論基礎與技術概念已經出現了有數十年,本部分咱們即來討論爲什麼直到近些年深度學習才獲得了爆炸性的發展。咱們能夠用下圖來描述數據集的大小與算法性能(準確率、推準率等)之間的關係:
對於支持向量機、Logistics 迴歸這樣經典的機器學習算法而言,在數據量從零遞增的初始階段,其性能會不斷提高;不過很快就會觸碰到天花板,此時性能很難再隨着數據集的增加而提高。而伴隨着移動互聯網時代的到來,咱們可以從網站、移動應用或者其餘安裝在電子終端設備上的傳感器中獲取到海量的數據;這些數據在開啓大數據時代的同時也爲深度學習的發展提供了堅實的基礎。咱們在上圖中也能夠看出,越是大型的神經網絡隨着數據量的增長,其性能提高的越快,而且其性能天花板也是越高。深度學習崛起的另外一個重要基石就是計算能力的提高,這裏不只指新一代 CPU 或者 GPU 設備,還有是在許多基礎優化算法上的革新,都使得咱們可以更快地訓練出神經網絡。譬如早期咱們會使用 Sigmod 函數做爲神經網絡的激活函數,隨着 x 的增大其梯度會逐漸趨近於零,這就致使了模型收斂變得相對緩慢;而 ReLU 則能較好地避免這個問題,其在正無窮大時梯度值依然保持恆定。簡單地從 Sigmod 函數遷移到 ReLU 即可以爲模型訓練帶來極大的效率提高,這也方便了咱們構建出更復雜的神經網絡。