1.3)深度学习笔记------浅层神经网络
目錄
1)Neural Network Overview
2)Neural Network Representation
3)Computing a Neural Network’s Output(重點)
4)Vectorizing across multiple examples
5)Activation functions
6)Why need a?nonlinear activation function
7)Derivatives of activation functions
8)Gradient descent for neural networks(重點)
9)Backpropagation intuition(選修)(掌握)
10)Random Initialization
11)Summary
以下筆記是吳恩達老師深度學習課程第一門課第三周的的學習筆記:Shallow neural networks。筆記參考了黃海廣博士的內容,在此表示感謝。?
1)Neural Network Overview
本周我們開始學習如何實現一個神經網絡。現在我們開始快速瀏覽一下如何實現神經網絡,上周我們討論了邏輯回歸。神經網絡的結構與邏輯回歸類似,神經網絡可以看作是多個sigmoid單元堆疊而成。下圖中上方為單個sigmoid單元,而另一個就是神經網絡了。在這個神經網絡里首先對應的3個節點,計算第一層網絡中各個節點的輸出,緊接著計算,位于第二層的節點計算和。整個過程如下:
第一層:輸入層到隱藏層
第一層:隱藏層到輸出層
在這里,我們規定方括號上標 [i] 表示當前所處的層數。
2)Neural Network Representation
我們再來看看我們上一小節中的二層神經網絡圖片(一般規定輸入層為零層),下圖中的神經網絡包含一個隱藏層。輸入特征被稱作神經網絡的輸入層(the input layer)。 神經網絡的隱藏層(a hidden layer)“隱藏”的含義是在訓練集中,這些中間節點的真正數值是無法看到的。輸出層(the output layer)負責輸出預測值。
在寫法上,我們通常把輸入特征記為,隱藏層記為,隱藏層包含四個節點,從上往下,下標依次遞增。隱藏層寫成矩陣向量形式為:
最后,輸出層為。隱藏層和輸出層都是帶有參數 W 和 b 的。它們都使用上標[1]來表示是和第一個隱藏層有關,或者上標[2]來表示是和輸出層有關。
3)Computing a Neural Network’s Output(重點)
介紹完神經網絡的表示,現在我們來推導神經網絡的推導過程,我們就把兩層神經網絡看作是兩次計算邏輯回歸。邏輯回歸計算分為兩個部分,分別計算 z 和 a。
回到兩層的神經網絡,我們從隱藏層的第一個神經元開始計算,如上圖第一個最上面的箭頭所指。從上圖可以看出,輸入與邏輯回歸相似,這個神經元的計算與邏輯回歸一樣分為兩步,小圓圈代表了計算的兩個步驟。
- ?第一步,計算?。
- ?第二步,通過激活函數計算??。
隱藏層的第二個以及后面兩個神經元的計算過程一樣,只是注意符號表示不同,最終分別得到?,詳細結果見下:
? ? ? ? ? ?? ? ? ? ? ?
從隱藏層到輸出層的計算公式為:
其中為:
值得注意的是層與層之間參數矩陣的規格大小。
- 輸入層和隱藏層之間:的 shape 為(4,3),前面的 4 是隱藏層神經元的個數,后面的 3 是輸入層神經元的個數;的 shape 為(4,1),和隱藏層的神經元個數相同。
- 隱藏層和輸出層之間:的 shape 為(1,4),前面的 1 是輸出層神經元的個數,后面的 4 是隱藏層神經元的個數;的 shape 為(1,1),和輸出層的神經元個數相同。
為了提高程序運算速度,我們引入向量化和矩陣運算的思想,將上述表達式轉換成矩陣運算的形式:
4)Vectorizing across multiple examples
上一部分我們只是介紹了單個樣本的神經網絡正向傳播的運算過程。而對于m個訓練樣本,我們也可以使用矩陣相乘的形式來提高計算效率。而且它的形式與上一部分單個樣本的矩陣運算十分相似,比較簡單。先來看使用for循環計算多個樣本輸出:
上圖中,我們使用for循環計算了神經網絡的輸出,現在我們把上面的for循環寫成矩陣運算的形式:
從水平上看,矩陣A代表了各個訓練樣本。從豎直上看,矩陣A的不同的索引對應于不同的隱藏單元。對于矩陣Z,X情況也類似,水平方向上,對應于不同的訓練樣本;豎直方向上,對應不同的輸入特征,而這就是神經網絡輸入層中各個節點。神經網絡上通過在多樣本情況下的向量化來使用這些等式。
5)Activation functions
之前我們都是選用 sigmoid 函數作為激活函數,但有時其他函數的效果會好得多。?下面我們來總結深度學習中常見的激活函數:
sigmoid函數:對出輸出層的激活函數,因為二分類取值范圍在(0,1),一般會選擇sgmoid函數。
tanh函數:效果幾乎總比 sigmoid 函數好(除二元分類的輸出層,因為我們希望輸出的結果介于 0 到 1 之間),因為函數輸出介于 -1 和 1 之間,激活函數的平均值就更接近 0,有類似數據中心化的效果。
然而,tanh 函數存在和 sigmoid 函數一樣的缺點:當 z 趨緊無窮大(或無窮小),導數的梯度(即函數的斜率)就趨緊于 0,這使得梯度算法的速度大大減緩。
ReLU函數:當 z > 0 時,梯度始終為 1,從而提高神經網絡基于梯度算法的運算速度,收斂速度遠大于 sigmoid 和 tanh。然而當 z < 0 時,梯度一直為 0,但是實際的運用中,該缺陷的影響不是很大。
Leaky ReLU函數:Leaky ReLU 保證在 z < 0 的時候,梯度仍然不為 0。理論上來說,Leaky ReLU 有 ReLU 的所有優點,但在實際操作中沒有證明總是好于 ReLU,因此不常用。
6)Why need a?nonlinear activation function
為什么神經網絡需要非線性激活函數?事實證明:要讓你的神經網絡能夠計算出有趣的函數,你必須使用非線性激活函數。
假設所有的激活函數都是線性的,為了簡化計算,我們直接令激活函數g(z)=z,即a=z。那么,淺層神經網絡的各層輸出為:
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ????????????????? ? ??
????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?????????????????????????????????????????????????
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??
對上式化簡得:
輸出仍是輸出x的線性組合,使用線性函數作為激活函數,最終的輸出仍然是輸入x的線性模型。
7)Derivatives of activation functions
在梯度下降反向計算過程中少不了計算激活函數的導數。
我們先來看一下sigmoid函數的導數:
?? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
-
? ? ? ? ? ? ? ? ? ?
tanh函數的導數:
ReLU函數的導數:? ? ? ? ? ? ? ? ? ? ? ? ? ? ?
Leaky ReLU函數導數:? ? ? ? ? ? ? ? ? ??
8)Gradient descent for neural networks(重點)
現在我們來看卡在神經網絡中如何計算梯度。還是我們前面提到的二層神經網絡,你的單隱層神經網絡會有,,,這些參數,還有個表示輸入特征的個數,表示隱藏單元個數,表示輸出單元個數。
二層神經網絡的正向傳播過程為:
???????
???????
反向傳播是計算梯度的過程,這里我們直接給出損失函數對各個參數的梯度:左邊是梯度下降公式,右邊是其向量化代碼。
9)Backpropagation intuition(選修)(掌握)
這一節雖然是選修內容,但還是希望大家掌握,當然不理解也不要緊。
我們仍然使用計算圖的方式來推導神經網絡反向傳播過程。記得之前介紹邏輯回歸時,我們就引入了計算圖來推導正向傳播和反向傳播,其過程如下圖所示:
由于多了一個隱藏層,神經網絡的計算圖要比邏輯回歸的復雜一些,如下圖所示。對于單個訓練樣本,正向過程很容易,反向過程可以根據梯度計算方法逐一推導。
10)Random Initialization
如果在初始時將兩個隱藏神經元的參數設置為相同的大小,那么兩個隱藏神經元對輸出單元的影響也是相同的,通過反向梯度下降去進行計算的時候,會得到同樣的梯度大小,所以在經過多次迭代后,兩個隱藏層單位仍然是對稱的。無論設置多少個隱藏單元,其最終的影響都是相同的,那么多個隱藏神經元就沒有了意義。
在初始化的時候,W 參數要進行隨機初始化,不可以設置為 0。而 b 因為不存在對稱性的問題,可以設置為 0。
以 2 個輸入,2 個隱藏神經元為例:
W = np.random.rand(2,2)* 0.01 b = np.zeros((2,1))這里將 W 的值乘以 0.01(或者其他的常數值)的原因是為了使得權重 W 初始化為較小的值,這是因為使用 sigmoid 函數或者 tanh 函數作為激活函數時,W 比較小,則 Z所得的值趨近于 0,梯度較大,能夠提高算法的更新速度。而如果 W 設置的太大的話,得到的梯度較小,訓練過程因此會變得很慢。
ReLU 和 Leaky ReLU 作為激活函數時不存在這種問題,因為在大于 0 的時候,梯度均為 1。
11)Summary
本節課主要介紹了淺層神經網絡。
下面我們就要進行深層神經網絡的學習了。
總結
以上是生活随笔為你收集整理的1.3)深度学习笔记------浅层神经网络的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 跟上安卓步伐!拥有息屏显示功能的iPho
- 下一篇: Anaconda中软件库更新