以下為在Coursera上吳恩達老師的DeepLearning.ai課程項目中,第一部分《神經網絡和深度學習》第二周課程部分關鍵點的筆記。筆記並不包含全部小視頻課程的記錄,如需學習筆記中舍棄的內容請至 Coursera 或者 網易雲課堂。同時在閱讀以下筆記之前,強烈建議先學習吳恩達老師的視頻課程。
1. 二分類問題
對於二分類問題,大牛給出了一個小的Notation。
- 樣本:
,訓練樣本包含
個; - 其中
,表示樣本
包含
個特征;
,目標值屬於0、1分類;- 訓練數據:

輸入神經網絡時樣本數據的形狀:


目標數據的形狀:
![Y=[y_{(1)},y_{(2)},\cdots,y_{(m)}]](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PVklM0QlNUJ5XyU3QiUyODElMjklN0QlMkN5XyU3QiUyODIlMjklN0QlMkMlNUNjZG90cyUyQ3lfJTdCJTI4bSUyOSU3RCU1RCs=.png)

2. logistic Regression
邏輯回歸中,預測值:
![\[\hat h = P(y=1|x)\]](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PSU1QyU1QiU1Q2hhdCtoKyUzRCtQJTI4eSUzRDElN0N4JTI5JTVDJTVE.png)
其表示為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)。
![J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PUolMjh3JTJDYiUyOSUzRCU1Q2RmcmFjJTdCMSU3RCU3Qm0lN0QlNUNzdW1fJTdCaSUzRDElN0QlNUUlN0JtJTdETCUyOCU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQyt5JTVFJTdCJTI4aSUyOSU3RCUyOSUzRC0lNUNkZnJhYyU3QjElN0QlN0JtJTdEJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2xlZnQlNUJ5JTVFJTdCJTI4aSUyOSU3RCU1Q2xvZyU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQiUyODEteSU1RSU3QiUyOGklMjklN0QlMjklNUNsb2clMjgxLSU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyOSU1Q3JpZ2h0JTVE.png)
- 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表達式如下:


![J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PUolMjh3JTJDYiUyOSUzRCU1Q2RmcmFjJTdCMSU3RCU3Qm0lN0QlNUNzdW1fJTdCaSUzRDElN0QlNUUlN0JtJTdETCUyOCU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQyt5JTVFJTdCJTI4aSUyOSU3RCUyOSUzRC0lNUNkZnJhYyU3QjElN0QlN0JtJTdEJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2xlZnQlNUJ5JTVFJTdCJTI4aSUyOSU3RCU1Q2xvZyU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQiUyODEteSU1RSU3QiUyOGklMjklN0QlMjklNUNsb2clMjgxLSU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyOSU1Q3JpZ2h0JTVE.png)
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函數是單調函數,不會改變原函數的單調性):
![\log P(y|x)=\log\left[\hat y^{y}(1-\hat y )^{(1-y)}\right]=y\log\hat y+(1-y)\log(1-\hat y)](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PSU1Q2xvZytQJTI4eSU3Q3glMjklM0QlNUNsb2clNUNsZWZ0JTVCJTVDaGF0K3klNUUlN0J5JTdEJTI4MS0lNUNoYXQreSslMjklNUUlN0IlMjgxLXklMjklN0QlNUNyaWdodCU1RCUzRHklNUNsb2clNUNoYXQreSUyQiUyODEteSUyOSU1Q2xvZyUyODEtJTVDaGF0K3klMjk=.png)
概率
越大越好,即判斷正確的概率越大越好。這里對上式加上負號,則轉化成了單個樣本的Loss function,我們期望其值越小越好:

m個訓練樣本
假設樣本之間是獨立同分布的,我們總是希望訓練樣本判斷正確的概率越大越好,則有:
同樣引入log函數,加負號,則可以得到Cost function:
![J(w,b)=\dfrac{1}{m}\sum_{i=1}^{m}L(\hat y^{(i)}, y^{(i)})=-\dfrac{1}{m}\sum_{i=1}^{m}\left[y^{(i)}\log\hat y^{(i)}+(1-y^{(i)})\log(1-\hat y^{(i)})\right]](/image/aHR0cDovL3d3dy56aGlodS5jb20vZXF1YXRpb24_dGV4PUolMjh3JTJDYiUyOSUzRCU1Q2RmcmFjJTdCMSU3RCU3Qm0lN0QlNUNzdW1fJTdCaSUzRDElN0QlNUUlN0JtJTdETCUyOCU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQyt5JTVFJTdCJTI4aSUyOSU3RCUyOSUzRC0lNUNkZnJhYyU3QjElN0QlN0JtJTdEJTVDc3VtXyU3QmklM0QxJTdEJTVFJTdCbSU3RCU1Q2xlZnQlNUJ5JTVFJTdCJTI4aSUyOSU3RCU1Q2xvZyU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyQiUyODEteSU1RSU3QiUyOGklMjklN0QlMjklNUNsb2clMjgxLSU1Q2hhdCt5JTVFJTdCJTI4aSUyOSU3RCUyOSU1Q3JpZ2h0JTVE.png)
