Deep Learning.ai學習筆記_第一門課_神經網絡和深度學習

目錄算法

前言數據庫

第一週(深度學習引言)編程

第二週(神經網絡的編程基礎)網絡

第三週(淺層神經網絡)框架

第四周(深層神經網絡)函數

 

 


前言

目標: 掌握神經網絡的基本概念, 學習如何創建神經網絡(包含一個深度神經網絡),以及如何在數據上面訓練他們,最後將用一個深度神經網絡進行辨認貓。性能

(1)瞭解深度學習的概念學習

(2)瞭解神經網絡的結構,使用算法並高效地實現優化

(3)結合神經網絡的算法實現框架,編寫實現一個隱藏層神經網絡spa

(4)創建一個深層的神經網絡(通常把層數大於等於3的神經網絡稱爲深層神經網絡)

 

第一週(深度學習引言)

Deep Learning:

    改變(應用):網絡搜索和廣告推薦

    很好的示例:讀取X光圖像、精準化農業、自動駕駛等

    突破:計算機視覺(圖像識別),語音識別(機器翻譯)

 

觀點: 認爲AI是最新的電力,大約在一百年前,咱們社會的電氣化改變了每一個主要行業,從交通運輸行業到製造業、醫療保健、通信等方面,我認爲現在咱們見到了AI明顯的使人驚訝的能量,帶來了一樣巨大的轉變。

 

什麼是神經網絡?

個人初步理解:給定原始輸入數據,按照特定的計算規則傳遞給神經元,後續通過相應的計算規則繼續傳遞給下一層神經元,當到達最後一層時,獲得的神經元中存儲的數據即爲須要輸出的數據。

簡單描述: 嘗試輸入一個x,便可把它映射成y。

例如,課程中給的關於預測房屋價格的神經網絡示例,以下圖:

 

 

區分結構化數據和非結構化數據:

結構化數據: 數據的基本數據庫, 例如在房價預測中,你可能有一個數據庫,有專門的幾列數據告訴你臥室的大小和數量,這就是結構化數據。

非結構化數據: 如音頻,原始音頻或者你想要識別的圖像或文本中的內容。

 

什麼是監督學習?

個人理解:給定大量得輸入數據,以及對應得輸出結果標記數據。來訓練神經網絡獲得中間計算出對應輸出結果的模型函數。成功獲得該模型後,後續就可使用該模型來預測新的輸入數據的預測結果,從而獲得實際價值。

簡單描述:監督式學習的目標是在給定一個 (x, g(x))的集合下,去找一個函數g。

 

深度學習興起條件:

  • 能夠得到更多的數據
  • 硬件性能的提升,好比GPU
  • 計算能力大大提升
  • 激活函數的選擇(從sigmoid函數轉換到一個ReLU函數,是神經網絡應用方面的一個巨大突破。由於在進行梯度降低計算時, sigmoid函數的梯度會接近零,因此學習的速度會變得很是緩慢,由於當你實現梯度降低以及梯度接近零的時候,參數會更新的很慢,因此學習的速率也會變的很慢。然而,使用ReLU函數偏偏解決這一問題)

 

第二週(神經網絡的編程基礎)

對於本週學習的內容,須要着重理解一下幾個概念及背後的實現原理

  • 梯度降低
  • 邏輯迴歸

 

梯度降低:

在邏輯迴歸算法第三步中須要使用梯度降低法,來求取代價函數J(w, b)的最小值。

梯度降低一個簡單暴力的理解:在一個函數圖像中沿着函數值不斷減少的梯度方向降低(向下走)叫梯度降低。此處可見參考資料[1]

如今問題是要求取J(w, b)的最小值,能夠看下面一個形象化的圖像:

 

 

在這個圖中,橫軸表示你的空間參數w和b。要求J(w, b)最小值,即要求取圖中曲面最低部的一點處的值即爲最佳值。能夠看出大小是按照梯度不斷降低的方式變化。

對參數w的梯度降低更新公式(其中a是學習率,用來控制步長。:=表示更新參數):

 

對參數b的梯度降低更新公式:

 

 

邏輯迴歸算法:

該算法分爲三部分,分別是預測函數部分、損失函數、梯度降低法求取代價函數的最小值。此處可見參考資料[2]

首先說一下預測函數:

給定輸入數據x,傳遞過程當中的特徵權重w和誤差b,計算最終的輸出預測值y,這就是預測函數須要作的事情。

通常狀況下,z = wx + b,你會發現函數z是一個線性函數,並且z值得大小依據x的取值大小而不斷變化,不能給神經網絡的最終預測結構提供幫助。

例如,識別一張貓的圖片,最終的預測結果只有兩種:不是,是。所以,咱們能夠相似處理,把最終輸出的預測值y變爲0和1兩種,0表示是,1表示不是。

那麼如何讓z轉化爲最終的預測值y呢?

此處能夠選擇採用具備二分特性的sigmoid函數,sigmoid函數圖像以下:

 

能夠看出sigmoid函數的取值區間爲(0,1),當x趨近正無窮大時,值趨近1,當x趨近負無窮大時,值趨近0。

那麼咱們能夠把z值看成參數傳遞給sigmoid函數,若是sigmoid(z) >= 0.5就令y = 1, 不然令y = 0。

可是,邏輯迴歸作的處理是給出最終的估計值sigmoid(z),具體y的值大小是神經網絡最後一步的最終輸出結果。(PS:注意預處理函數此處給出的示例是sigmoid函數,對應其餘狀況須要選擇其餘合適的預處理函數)通常把y^ = o(z)(PS:這裏是使用有y^表示數學字符y帽,o表示預處理函數)

總結,預測函數計算步驟:

z = wx + b, y^ = o(z),其中o是預處理函數。

損失函數:

損失函數又叫作偏差函數,用來衡量算法的運行狀況,Loss function:L(y^, y).

咱們經過這個L稱爲的損失函數,來衡量預測輸出值和實際值有多接近。通常咱們用預測值和實際值的平方差或者它們平方差的一半,可是一般在邏輯迴歸中咱們不這麼作,由於當咱們在學習邏輯迴歸參數的時候,會發現咱們的優化目標不是凸優化,只能找到多個局部最優值,梯度降低法極可能找不到全局最優值,雖然平方差是一個不錯的損失函數,可是咱們在邏輯迴歸模型中會定義另一個損失函數。

咱們在邏輯迴歸中用到的損失函數是:

 

代價函數:

爲了衡量算法在所有訓練樣本上的表現如何,咱們須要定義一個算法的代價函數,算法的代價函數是對m個樣本的損失函數求和而後除以m:  

 

損失函數只適用於像這樣的單個訓練樣本,而代價函數是參數的總代價,因此在訓練邏輯迴歸模型時候,咱們須要找到合適的w和b,來讓代價函數J  的總代價降到最低。

 

最後,看幾處課程中比較重要的幾張圖:

單個樣本邏輯迴歸梯度降低計算過程:

 

多個樣本邏輯迴歸梯度降低計算過程:

 

 

 

第三週(淺層神經網絡)

基於邏輯迴歸重複使用了兩次及以上該模型就可獲得神經網絡,例以下圖:

 

用圓圈表示神經網絡的計算單元,邏輯迴歸的計算有兩個步驟,具體以下圖:

 

常見的激活函數:

 

 

爲何須要非線性激活函數?

若是你使用線性激活函數或者沒有使用一個激活函數,那麼不管你的神經網絡有多少層一直在作的只是計算線性函數,因此不如直接去掉所有隱藏層。(PS: 若是你是用線性激活函數或者叫恆等激勵函數,那麼神經網絡只是把輸入線性組合再輸出。)

總而言之,不能在隱藏層用線性激活函數。 惟一能夠用線性激活函數的一般就是輸出層;除了這種狀況,會在隱層用線性函數的,除了一些特殊狀況,好比與壓縮有關的,那方面在這裏將不深刻討論。在這以外,在隱層使用線性激活函數很是少見。

 

當你訓練神經網絡時,權重隨機初始化是很重要的。對於邏輯迴歸,把權重初始化爲0固然也是能夠的。可是對於一個神經網絡,若是你把權重或者參數都初始化爲0,那麼梯度降低將不會起做用。

若是你要初始化成0,因爲全部的隱含單元都是對稱的,不管你運行梯度降低多久,他們一直計算一樣的函數。這沒有任何幫助,由於你想要兩個不一樣的隱含單元計算不一樣的函數,這個問題的解決方法就是隨機初始化參數。

 

 

第四周(深層神經網絡)

有一個隱藏層的神經網絡,就是一個兩層神經網絡。記住當咱們算神經網絡的層數時,咱們不算輸入層,咱們只算隱藏層和輸出層。

 

在作深度神經網絡的反向傳播時,必定要確認全部的矩陣維數是先後一致的,能夠大大提升代碼經過率。

 

爲何使用深層表示?

深度神經網絡的這許多隱藏層中,較早的前幾層能學習一些低層次的簡單特徵,等到後幾層,就能把簡單的特徵結合起來,去探測更加複雜的東西。好比你錄在音頻裏的單詞、詞組或是句子,而後就能運行語音識別了。同時咱們所計算的以前的幾層,也就是相對簡單的輸入函數,好比圖像單元的邊緣什麼的。到網絡中的深層時,你實際上就能作不少複雜的事,好比探測面部或是探測單詞、短語或是句子。

 

想要你的深度神經網絡起很好的效果,你還須要規劃好你的參數以及超參數。

什麼是超參數?

好比算法中的learning rate a(學習率)、iterations(梯度降低法循環的數量)、L(隱藏層數目)、n[l](隱藏層單元數目)、choice of activation function(激活函數的選擇)都須要你來設置,這些數字實際上控制了最後的參數W和b的值,因此它們被稱做超參數。

 

參考資料:

[1]http://www.javashuo.com/article/p-evhpbupx-by.html

[2] http://www.javashuo.com/article/p-thkpjtpu-x.html

相關文章
相關標籤/搜索