二元分類與 Logistic 迴歸從屬於筆者的Deep Learning Specialization 課程筆記系列文章,本文主要記述了筆者學習 Andrew NG Deep Learning Specialization 系列課程的筆記與代碼實現。注意,本篇有大量的數學符號與表達式,部分網頁並不支持;能夠前往源文件查看較好的排版或者在本身的編輯器中打開。算法
本部分將會介紹神經網格構建與訓練的基礎知識;通常來講,網絡的計算過程由正向傳播(Forward Propagation)與反向傳播(Back Propagation)兩部分組成。這裏咱們將會以簡單的 Logistic 迴歸爲例,講解如何解決常見的二元分類(Binary Classification)問題。這裏咱們將會嘗試訓練出簡單的神經網絡以自動識別某個圖片是否爲貓,爲貓則輸出 1,不然輸出 0。計算機中的圖片每每表示爲紅、綠、藍三個通道的像素值;若是咱們的圖像是 64 64 像素值大小,咱們的單張圖片的特徵維度即爲 64 64 * 3 = 12288,便可以使用 $n_x = 12288$ 來表示特徵向量的維度。網絡
上標 $^{(i)}$ 表示第 $i$ 個訓練用例,而上標 $^{[l]}$ 則表示第 $l$ 層。機器學習
在深度學習中,使用結點表明輸入、激活函數或者數據,邊表明權重或者誤差,下圖便是兩個典型的神經網絡:
編輯器
在貓咪識別問題中,咱們給定了未知的圖片,能夠將其表示爲 $X in R^{n_x}$ 的特徵向量;咱們的任務就是尋找合適的算法,來根據特徵向量推導出該圖片是貓咪的機率。在上面的介紹中咱們假設了 Logistic 函數的參數爲 $w in R^{n_x} $ 以及 $b in R$,則輸出的計算公式能夠表示爲:
$$
hat{y} = sigma(w^Tx + b)
$$
這裏的 $sigma$ 表示 Sigmoid 函數,該函數的表達式與線型以下:函數
上圖中能夠發現,當 $t$ 很是大時,$e^{-t}$ 趨近於 0,總體的函數值趨近於 1;反之,若是 $t$ 很是小的時候,總體的函數值趨近於 0。學習
咱們的訓練目標是在給定訓練數據 ${(x^{(1)}, y^{(1)}),...,(x^{(m)},y^{(m)})}$ 的狀況下使得 $hat{y}^{(i)}$ 儘量接近 $y^{(i)}$,而所謂的損失函數便是用於衡量預測結果與真實值之間的偏差。最簡單的損失函數定義方式爲平方差損失:
$$
L(hat{y},y) = frac{1}{2} (hat{y} - y)^2
$$
不過 Logistic 迴歸中咱們並不傾向於使用這樣的損失函數,由於其對於梯度降低並不友好,不少狀況下會陷入非凸狀態而只能獲得局部最優解。這裏咱們將會使用以下的損失函數:
$$
L(hat{y},y) = -(yloghat{y} + (1-y)log(1-hat{y}))
$$
咱們的優化目標是但願損失函數值越小越好,這裏咱們考慮兩個極端狀況,當 $y = 1$ 時,損失函數值爲 $-loghat{y}$;此時若是 $hat{y} = 1$,則損失函數爲 0。反之若是 $hat{y} = 0$,則損失函數值趨近於無窮大。當 $y = 0$ 時,損失函數值爲 $-log(1-hat{y})$;若是 $hat{y} = 1$,則損失函數值也變得無窮大。這樣咱們能夠將 Logistic 迴歸中總的代價函數定義爲:
$$
J(w,b) =
frac{1}{m}sum_{i=1}^mL(hat{y}^{(i)} - y^{(i)}) =
-frac{1}{m} sum_{i=1}^m [y^{(i)}loghat{y}^{(i)} + (1-y^{(i)})log(1-hat{y}^{(i)})]
$$
在深度學習的模型訓練中咱們經常會接觸到損失函數(Loss Function)與代價函數(Cost Function)的概念,其中損失函數代指單個訓練用例的錯誤程度,而代價函數每每是整個訓練集中全部訓練用例的損失函數值的平均。優化