目錄算法
前言數據庫
目標: 掌握神經網絡的基本概念, 學習如何創建神經網絡(包含一個深度神經網絡),以及如何在數據上面訓練他們,最後將用一個深度神經網絡進行辨認貓。性能
(1)瞭解深度學習的概念學習
(2)瞭解神經網絡的結構,使用算法並高效地實現優化
(3)結合神經網絡的算法實現框架,編寫實現一個隱藏層神經網絡spa
(4)創建一個深層的神經網絡(通常把層數大於等於3的神經網絡稱爲深層神經網絡)
Deep Learning:
改變(應用):網絡搜索和廣告推薦
很好的示例:讀取X光圖像、精準化農業、自動駕駛等
突破:計算機視覺(圖像識別),語音識別(機器翻譯)
觀點: 認爲AI是最新的電力,大約在一百年前,咱們社會的電氣化改變了每一個主要行業,從交通運輸行業到製造業、醫療保健、通信等方面,我認爲現在咱們見到了AI明顯的使人驚訝的能量,帶來了一樣巨大的轉變。
什麼是神經網絡?
個人初步理解:給定原始輸入數據,按照特定的計算規則傳遞給神經元,後續通過相應的計算規則繼續傳遞給下一層神經元,當到達最後一層時,獲得的神經元中存儲的數據即爲須要輸出的數據。
簡單描述: 嘗試輸入一個x,便可把它映射成y。
例如,課程中給的關於預測房屋價格的神經網絡示例,以下圖:
區分結構化數據和非結構化數據:
結構化數據: 數據的基本數據庫, 例如在房價預測中,你可能有一個數據庫,有專門的幾列數據告訴你臥室的大小和數量,這就是結構化數據。
非結構化數據: 如音頻,原始音頻或者你想要識別的圖像或文本中的內容。
什麼是監督學習?
個人理解:給定大量得輸入數據,以及對應得輸出結果標記數據。來訓練神經網絡獲得中間計算出對應輸出結果的模型函數。成功獲得該模型後,後續就可使用該模型來預測新的輸入數據的預測結果,從而獲得實際價值。
簡單描述:監督式學習的目標是在給定一個 (x, g(x))的集合下,去找一個函數g。
深度學習興起條件:
對於本週學習的內容,須要着重理解一下幾個概念及背後的實現原理:
梯度降低:
在邏輯迴歸算法第三步中須要使用梯度降低法,來求取代價函數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的值,因此它們被稱做超參數。
參考資料: