吳恩達深度學習(20)-激活函數的導數和神經網絡的梯度下降

2021-01-08 極客Array

激活函數的導數(Derivatives of activation functions)

在神經網絡中使用反向傳播的時候,你真的需要計算激活函數的斜率或者導數。

針對以下四種激活,求其導數如下:

1)sigmoid activation function

其具體的求導如下(如果你學過微積分,那麼這個求導對於你來說其實並不難):

公式1:

註:

當z = 10或z=-10 d/dz g(z)≈0

當z= 0 d/dz g(z)=g(z)(1-g(z))=1/4

在神經網絡中

a=g(z);

g(z)'=d/dz g(z)=a(1-a)

2) Tanh activation function

其具體的求導如下:

公式2: g(z)=tanh(z)=(e^z-e^(-z))/(e^z+e^(-z) )

在神經網絡中;

3)Rectified Linear Unit (ReLU)

g(z)=max(0,z)

註:通常在z= 0的時候給定其導數1,0;當然z=0的情況很少

4)Leaky linear unit (Leaky ReLU)

與ReLU類似

註:通常在z=0的時候給定其導數1,0.01;當然z=0的情況很少

神經網絡的梯度下降(Gradient descent for neural networks)

下面會給你實現反向傳播或者說梯度下降算法的方程。

你的單隱層神經網絡會有W^([1]),b^([1]),W^([2]),b^([2])這些參數,

還有個n_x表示輸入特徵的個數,n^([1])表示隱藏單元個數,n^([2])表示輸出單元個數。

在我們的例子中,我們只介紹過的這種情況,那麼參數:

矩陣W^([1])的維度就是(n^([1]),n^([0])),

b^([1])就是n^([1])維向量,可以寫成(n^([1]),1),就是一個的列向量。

矩陣W^([2])的維度就是(n^([2]),n^([1])),

b^([2])的維度就是(n^([2]),1)維度。

你還有一個神經網絡的成本函數,假設你在做二分類任務,那麼你的成本函數等於:

Cost function:

公式2:

loss function和之前做logistic回歸完全一樣。

訓練參數需要做梯度下降,在訓練神經網絡的時候,隨機初始化參數很重要,而不是初始化成全零(對的,如果全部初始化成0,這個就和我們之前說的那個為什麼用非線性激活函數一個道理,其實都沒有什麼意義了,因為大家都是0)。當你參數初始化成某些值後,每次梯度下降都會循環計算以下預測值:

公式3: dW^([1])=dJ/(dW^([1]) ),db^([1])=dJ/(db^([1]) )

公式4: dW^([2])=dJ/(dW^([2]) ),db^([2])=dJ/(db^([2]) )

其中

公式5: W^([1])W^([1])-adW^([1]),b^([1])b^([1])-adb^([1])

公式6: W^([2])W^([2])-adW^([2]),b^([2])b^([2])-adb^([2])

正向傳播方程如下(之前講過):

forward propagation:

(1) z^([1])=W^([1]) x+b^([1])

(2) a^([1])=σ(z^([1]))

(3) z^([2])=W^([2]) a^([1])+b^([2])

(4) a^([2])=g^([2]) (z^([z]))=σ(z^([2]))

反向傳播方程如下:

back propagation:

dW^([1])=1/m dz^([1]) x^T

((db^([1]))┬)┬((n^([1]),1))=1/m np.sum(dz^([1]),axis=1,keepdims=True)

上述是反向傳播的步驟,

註:這些都是針對所有樣本進行過向量化,Y是1×m的矩陣;

這裡np.sum是python的numpy命令,

axis=1表示水平相加求和,

keepdims是防止python輸出那些古怪的秩數(n,),加上這個確保陣矩陣db^([2])這個向量輸出的維度為(n,1)這樣標準的形式。

目前為止,我們計算的都和Logistic回歸十分相似,但當你開始計算反向傳播時,你需要計算,是隱藏層函數的導數,輸出在使用sigmoid函數進行二元分類。

這裡是進行逐個元素乘積,因為W^([2]T) dz^([2])和(z^([1]))這兩個都為(n^([1]),m)矩陣;

還有一種防止python輸出奇怪的秩數,需要顯式地調用reshape把np.sum輸出結果寫成矩陣形式。

以上就是正向傳播的4個方程和反向傳播的6個方程

相關焦點

  • 吳恩達授課,斯坦福CS230深度學習課程資源開放
    課程主要內容CS230 與吳恩達在 Coursera 上的深度學習專項課程一樣分 5 部分,即神經網絡與深度學習、提升深度神經網絡、機器學習項目的策略、卷積神經網絡及序列模型。在第一課中介紹了神經網絡和深度學習的基礎。主要在課堂內介紹了深度學習的直觀概念,並藉助兩個模塊從頭開始學習神經網絡到底是什麼。
  • 吳恩達深度學習筆記(12)-計算圖計算梯度下降
    邏輯回歸中的梯度下降(Logistic Regression Gradient Descent)本節我們討論怎樣通過計算偏導數來實現邏輯回歸的梯度下降算法。它的關鍵點是幾個重要公式,其作用是用來實現邏輯回歸中梯度下降算法。但是在本節中,將使用計算圖對梯度下降算法進行計算。
  • 通過函數圖像,了解26種神經網絡激活函數都長啥樣.
    在神經網絡中,激活函數決定來自給定輸入集的節點的輸出,其中非線性激活函數允許網絡複製複雜的非線性行為。正如絕大多數神經網絡藉助某種形式的梯度下降進行優化,激活函數需要是可微分(或者至少是幾乎完全可微分的)。此外,複雜的激活函數也許產生一些梯度消失或爆炸的問題。因此,神經網絡傾向於部署若干個特定的激活函數(identity、sigmoid、ReLU 及其變體)。
  • ReLU到Sinc的26種神經網絡激活函數可視化大盤點
    在神經網絡中,激活函數決定來自給定輸入集的節點的輸出,其中非線性激活函數允許網絡複製複雜的非線性行為。正如絕大多數神經網絡藉助某種形式的梯度下降進行優化,激活函數需要是可微分(或者至少是幾乎完全可微分的)。此外,複雜的激活函數也許產生一些梯度消失或爆炸的問題。
  • Pytorch_第九篇_神經網絡中常用的激活函數
    神經網絡中常用的激活函數Introduce理論上神經網絡能夠擬合任意線性函數,其中主要的一個因素是使用了非線性激活函數(因為如果每一層都是線性變換,那有啥用啊,始終能夠擬合的都是線性函數啊)。本文主要介紹神經網絡中各種常用的激活函數。以下均為個人學習筆記,若有錯誤望指出。
  • 如何選擇神經網絡激活函數:有效的改善模型學習模式的能力
    激活函數是神經網絡中用於計算輸入和偏差的加權和的函數,用於確定神經元是否可以釋放。 它通常通過梯度下降法的某種梯度處理來操縱數據,然後產生神經網絡的輸出,該輸出包含數據中的參數。 有時這些激活函數通常稱為傳遞函數。激活函數具有改善數據學習模式的能力,從而實現了特徵檢測過程的自動化,並證明它們在神經網絡的隱藏層中的使用合理性,並且對於跨領域進行分類很有用。
  • 高效「煉丹」必備技能:一文實現深度學習數學原理入門,還有吳恩達...
    尤其是深度學習算法開發人員,追求模型結構優化和提高編程效率是永遠的目標。但是,如果只做代碼「搬運工」,不了解神經網絡背後的數學原理,很難對項目有深刻全面的理解,debug反而會更難、耗時更長。就以深度學習中常用的神經網絡來說,典型模型包括多層感知機(DLP)、卷積神經網絡(CNN)、循環神經網絡(RNN)等等,不同的項目,對神經網絡的調參需求也不相同。
  • 從梯度下降到擬牛頓法:詳解訓練神經網絡的五大學習算法
    問題形式化神經網絡中的學習過程可以形式化為最小化損失函數問題,該損失函數一般是由訓練誤差和正則項組成。誤差項會衡量神經網絡擬合數據集的好壞,也就是擬合數據所產生的誤差。正則項主要就是通過給特徵權重增加罰項而控制神經網絡的有效複雜度,這樣可以有效地控制模型過擬合問題。訓練損失函數取決於神經網絡中的自適應參數(偏置項和突觸權重)。
  • 人工智慧-深度學習-激活函數ReLU,Sigmoid,TanH,ELU,MaxOut
    激活函數:在多層神經網絡中,上層節點的輸出和下層節點的輸入之間具有一個函數關係,這個函數稱為激活函數(又稱激勵函數)激活函數的本質:激活函數是來向神經網絡中引入非線性因素的,通過激活函數,神經網絡就可以擬合各種曲線。
  • 從ReLU到GELU,一文概覽神經網絡的激活函數
    選自mlfromscratch作者:Casper Hansen機器之心編譯參與:熊貓、杜偉激活函數對神經網絡的重要性自不必多言,機器之心也曾發布過一些相關的介紹文章,比如《一文概覽深度學習中的激活函數根據每一層前面的激活、權重和偏置,我們要為下一層的每個激活計算一個值。但在將該值發送給下一層之前,我們要使用一個激活函數對這個輸出進行縮放。本文將介紹不同的激活函數。在閱讀本文之前,你可以閱讀我前一篇介紹神經網絡中前向傳播和反向傳播的文章,其中已經簡單地提及過激活函數,但還未介紹其實際所做的事情。
  • 斯坦福的神經網絡用這種激活函數,高保真還原圖像視頻
    SIREN在這個方向上進行了突破,通過採用周期性激活函數Sine代替常見的非線性激活函數(如ReLU、TanH等),以連續的方式進行數據存儲。相比於ReLU、TanH等非周期性的激活函數來說,SIREN將正弦周期函數用作激活函數,相當於為神經網絡引入了周期性。
  • 神經網絡和深度學習簡史(全)
    這裡有一個重要現實:神經網絡的神經元和感知機並不完全相同,但是,可用一個激活函數來計算輸出,該函數仍然是非線性的,但是可微分,和Adaline神經元一樣;該導數不僅可以用於調整權值,減少誤差,鏈式法則也可用於計算前一層所有神經元導數,因此,調整它們權重的方式也是可知的。
  • 深度學習基礎篇:如何選擇正確的激活函數?
    然而,當大量的信息撲面而來,究竟如何區分相關信息和無關信息呢?大腦在得到大量信息時,會努力理解和分類有用信息和不那麼有用的信息。而在深度學習中,我們也需要一種類似的機制來分類傳入的信息。不是所有信息都是有用的,一些只是噪音。激活函數可以幫助神經網絡做這種隔離。它激活有用的信息,並抑制無關的數據點。激活函數如此重要,那麼都有哪些比較熱門呢?它們是如何工作的?
  • 神經網絡為何非激活函數不可?
    本文作者 Vandit Jain 對激活函數的相關知識進行了一個較為全面的總結,重點聚焦於以下幾個方面:一、激活函數是什麼?簡單地說,激活函數就是加入到人工神經網絡中的一個函數,目的在於幫助神經網絡從數據中學習複雜模式。
  • 理解神經網絡:從神經元到RNN、CNN、深度學習
    隨著時間的推移,證明了神經網絡在精度和速度方面,比其他的算法性能更好。並且形成了很多種類,像CNN(卷積神經網絡),RNN,自編碼,深度學習等等。神經網絡對於數據科學和或者機器學習從業者,就像線性回歸對於統計學家一樣。因此,對神經網絡是什麼有一個基本的理解是有必要的,比如,它是怎麼構成的,它能處理問題的範圍以及它的局限性是什麼。
  • 吳恩達機器學習筆記 - 線性回歸、代價函數與梯度下降
    漁網圖像中(theta_0,theta_1)在漁網的最底部取得,使得代價函數達到最小值;h_theta(x) 圖像中預測的函數曲線對訓練數據的擬合效果達到最優;四、梯度下降算法如何在程序中求代價函數的最小值呢?可以使用經典的梯度下降算法,迭代求代價函數 J(theta_0, theta_1) 的最小值。
  • 一文看懂各種神經網絡優化算法:從梯度下降到Adam方法
    一階優化算法 這種算法使用各參數的梯度值來最小化或最大化損失函數E(x)。最常用的一階優化算法是梯度下降。 函數梯度:導數dy/dx的多變量表達式,用來表示y相對於x的瞬時變化率。往往為了計算多變量函數的導數時,會用梯度取代導數,並使用偏導數來計算梯度。
  • 深入理解深度學習中的激活函數
    但我們也知道感知機有個局限性,即無法單層表示非線性變化,而神經網絡往往通過激活函數用來表示非線性變化。即激活函數的作用就是引入非線性。簡單地說,sigmoid函數只能處理兩個類,這不適用於多分類的問題。所以softmax可以有效解決這個問題。並且softmax函數很多情況都運用在shenjingwanglu神經網路中的最後一層網絡中,使得值得區間在0,1之間,而不是二分類的。ReLUReLU是最近幾年非常受歡迎的激活函數。
  • 神經網絡中的激活函數
    什麼是神經網絡激活函數?激活函數有助於決定我們是否需要激活神經元。如果我們需要發射一個神經元那麼信號的強度是多少。激活函數是神經元通過神經網絡處理和傳遞信息的機制為什麼在神經網絡中需要一個激活函數?在神經網絡中,z是輸入節點與節點權值加上偏差的乘積。
  • 一分鐘看完梯度下降法
    今天,我想講一下梯度下降法(Gradient Descent),基於線性回歸損失函數的梯度下降法。