邏輯回歸中的梯度下降(Logistic Regression Gradient Descent)
本節我們討論怎樣通過計算偏導數來實現邏輯回歸的梯度下降算法。
它的關鍵點是幾個重要公式,其作用是用來實現邏輯回歸中梯度下降算法。
但是在本節中,將使用計算圖對梯度下降算法進行計算。必須要承認的是,使用計算圖來計算邏輯回歸的梯度下降算法有點大材小用了。但是,以這個例子作為開始來講解,可以使你更好的理解背後的思想。從而在討論神經網絡時,你可以更深刻而全面地理解神經網絡。
接下來讓我們開始學習邏輯回歸的梯度下降算法。
假設樣本只有兩個特徵x_1和x_2,為了計算z,我們需要輸入參數w_1、w_2 和b,除此之外還有特徵值x_1和x_2。因此z的計算公式為: z=w_1 x_1+w_2 x_2+b
回想一下邏輯回歸的公式定義如下:
^y=a=σ(z) 其中z=w^T x+b , σ(z)=1/(1+e^(-z) )
損失函數:
代價函數:
假設現在只考慮單個樣本的情況,單個樣本的代價函數定義如下:
其中a是邏輯回歸的輸出,y是樣本的標籤值。
現在讓我們畫出表示這個計算的計算圖。 這裡先複習下梯度下降法,w和b的修正量可以表達如下:
如圖:在這個公式的外側畫上長方形。
然後計算: ^y=a=σ(z) 也就是計算圖的下一步。最後計算損失函數L(a,y)。
有了計算圖,我就不需要再寫出公式了。
因此,為了使得邏輯回歸中最小化代價函數L(a,y),我們需要做的僅僅是修改參數w和b的值。前面我們已經講解了如何在單個訓練樣本上計算代價函數的前向步驟。
現在讓我們來討論通過反向計算出導數。 因為我們想要計算出的代價函數L(a,y)的導數,首先我們需要反向計算出代價函數L(a,y)關於a的導數,在編寫代碼時,你只需要用da 來表示(dL(a,y))/da 。
通過微積分得到:
如果你不熟悉微積分,也不必太擔心,我會列出本課程涉及的所有求導公式。那麼如果你非常熟悉微積分,我們鼓勵你主動推導前面介紹的代價函數的求導公式,使用微積分直接求出L(a,y)關於變量a的導數。如果你不太了解微積分,也不用太擔心。現在我們已經計算出da,也就是最終輸出結果的導數。 現在可以再反向一步,在編寫Python代碼時,你只需要用dz來表示代價函數L關於z 的導數dL/dz,也可以寫成(dL(a,y))/dz,這兩種寫法都是正確的。 dL/dz=a-y 。
因為
並且da/dz=a(1-a), 而
因此將這兩項相乘
為了簡化推導過程,假設n_x這個推導的過程就是我之前提到過的鏈式法則。
如果你對微積分熟悉,放心地去推導整個求導過程,如果不熟悉微積分,你只需要知道dz=(a-y)已經計算好了。
現在進行最後一步反向推導,也就是計算w和b變化對代價函數L的影響,特別地,可以用:
視頻中, dw_1 表示L/(w_1 )=x_1dz, dw_2 表示L/(w_2 )=x_2dz, db=dz。
因此,關於單個樣本的梯度下降算法,你所需要做的就是如下的事情:
使用公式dz=(a-y)計算dz,
使用
dw_1=x_1dz 計算dw_1,
dw_2=x_2dz計算dw_2,
db=dz 來計算db,
然後:
更新w_1=w_1-adw_1,
更新w_2=w_2-adw_2,
更新b=b-αdb。
這就是關於單個樣本實例的梯度下降算法中參數更新一次的步驟。
現在你已經知道了怎樣計算導數,並且實現針對單個訓練樣本的邏輯回歸的梯度下降算法。但是,訓練邏輯回歸模型不僅僅只有一個訓練樣本,而是有m個訓練樣本的整個訓練集。
因此在下一個筆記中,我們將這些思想應用到整個訓練樣本集中,而不僅僅只是單個樣本上。