以下為在Coursera上吳恩達老師的DeepLearning.ai課程項目中,第一部分《神經網絡和深度學習》第二周課程部分關鍵點的筆記。筆記並不包含全部小視頻課程的記錄,如需學習筆記中舍棄的內容請至 Coursera 或者 網易雲課堂。同時在閱讀以下筆記之前,強烈建議先學習吳恩達老師的視頻課程。
1. 二分類問題
對於二分類問題,大牛給出了一個小的Notation。
- 樣本:
,訓練樣本包含
個;
- 其中
,表示樣本
包含
個特征;
,目標值屬於0、1分類;
- 訓練數據:
輸入神經網絡時樣本數據的形狀:
目標數據的形狀:
2. logistic Regression
邏輯回歸中,預測值:
其表示為1的概率,取值范圍在 之間。 引入Sigmoid函數,預測值:
其中
注意點:函數的一階導數可以用其自身表示,
這里可以解釋梯度消失的問題,當 時,導數最大,但是導數最大為
,這里導數僅為原函數值的0.25倍。 參數梯度下降公式的不斷更新,
會變得越來越小,每次迭代參數更新的步伐越來越小,最終接近於0,產生梯度消失的現象。
3. logistic回歸 損失函數
Loss function
一般經驗來說,使用平方錯誤(squared error)來衡量Loss Function:
但是,對於logistic regression 來說,一般不適用平方錯誤來作為Loss Function,這是因為上面的平方錯誤損失函數一般是非凸函數(non-convex),其在使用低度下降算法的時候,容易得到局部最優解,而不是全局最優解。因此要選擇凸函數。
邏輯回歸的Loss Function:
- 當
時,
。如果
越接近1,
,表示預測效果越好;如果
越接近0,
,表示預測效果越差;
- 當
時,
。如果
越接近0,
,表示預測效果越好;如果
越接近1,
,表示預測效果越差;
- 我們的目標是最小化樣本點的損失Loss Function,損失函數是針對單個樣本點的。
Cost function
全部訓練數據集的Loss function總和的平均值即為訓練集的代價函數(Cost function)。
- Cost function是待求系數w和b的函數;
- 我們的目標就是迭代計算出最佳的w和b的值,最小化Cost function,讓其盡可能地接近於0。
4. 梯度下降
用梯度下降法(Gradient Descent)算法來最小化Cost function,以計算出合適的w和b的值。
每次迭代更新的修正表達式:
在程序代碼中,我們通常使用dw來表示 ,用db來表示
。
5. 邏輯回歸中的梯度下降法
對單個樣本而言,邏輯回歸Loss function表達式:
反向傳播過程:
前面過程的da、dz求導:
再對 和b進行求導:
梯度下降法:
6. m個樣本的梯度下降
對m個樣本來說,其Cost function表達式如下:
Cost function 關於w和b的偏導數可以寫成所有樣本點偏導數和的平均形式:
7. 向量化(Vectorization)
在深度學習的算法中,我們通常擁有大量的數據,在程序的編寫過程中,應該盡最大可能的少使用loop循環語句,利用python可以實現矩陣運算,進而來提高程序的運行速度,避免for循環的使用。
邏輯回歸向量化
- 輸入矩陣X:
- 權重矩陣w:
- 偏置b:為一個常數
- 輸出矩陣Y:
所有m個樣本的線性輸出Z可以用矩陣表示:
python代碼:
db = 1/m*np.sum(dZ)
單次迭代梯度下降算法流程
Z = np.dot(w.T,X) + b A = sigmoid(Z) dZ = A-Y dw = 1/m*np.dot(X,dZ.T) db = 1/m*np.sum(dZ) w = w - alpha*dw b = b - alpha*db
8. python的notation
雖然在Python有廣播的機制,但是在Python程序中,為了保證矩陣運算的正確性,可以使用reshape()函數來對矩陣設定所需要進行計算的維度,這是個好的習慣;
如果用下列語句來定義一個向量,則這條語句生成的a的維度為(5,),既不是行向量也不是列向量,稱為秩(rank)為1的array,如果對a進行轉置,則會得到a本身,這在計算中會給我們帶來一些問題。
a = np.random.randn(5)
如果需要定義(5,1)或者(1,5)向量,要使用下面標准的語句:
a = np.random.randn(5,1) b = np.random.randn(1,5)
可以使用assert語句對向量或數組的維度進行判斷。assert會對內嵌語句進行判斷,即判斷a的維度是不是(5,1),如果不是,則程序在此處停止。使用assert語句也是一種很好的習慣,能夠幫助我們及時檢查、發現語句是否正確。
assert(a.shape == (5,1))
可以使用reshape函數對數組設定所需的維度
a.reshape((5,1))
8. logistic regression代價函數的解釋
Cost function的由來
預測輸出 的表達式:
其中, 。
可以看作預測輸出為正類(+1)的概率:
當 時,
;當
時,
。
將兩種情況整合到一個式子中,可得:
對上式進行log處理(這里是因為log函數是單調函數,不會改變原函數的單調性):
概率 越大越好,即判斷正確的概率越大越好。這里對上式加上負號,則轉化成了單個樣本的Loss function,我們期望其值越小越好:
m個訓練樣本
假設樣本之間是獨立同分布的,我們總是希望訓練樣本判斷正確的概率越大越好,則有:
同樣引入log函數,加負號,則可以得到Cost function: