神經網路與深度學習課程學習筆記(第二章)
第二章 神經網路基礎
自學Andrew Ng老師的神經網路公開課,作一些筆記,老師講的非常詳細,通俗易懂,感覺不需要做第一章的筆記,所以沒有
2.1 二分分類
什麼是二分分類問題,用影象中是否有小貓的例子來說明,影象的顏色畫素數值是演算法的輸入,是否有小貓是演算法的輸出。
在logistic迴歸和神經網路中需要用到的關鍵符號,以及它們的表示方法。比如對於所有的訓練樣本,要寫成一個大的矩陣,矩陣的每一列是一個訓練樣本輸入,多個樣本就橫著寫,訓練樣本的輸出也是這樣寫,每一列是一個訓練樣本輸出。
2.2 logistic迴歸
Logistic迴歸是一種監督學習演算法,用來輸出估計狀態集合為0,1的學習結果。
我們的目的是輸出估計的0或1,或者說,輸出估計值為1的概率,如果採用線性函式:wx+b,無法輸出兩個狀態,則我們使用sigmod函式,從而設則sigmod函式可以在z為非常大時輸出1,在z為非常小時輸出0。
對於引數,一種寫法時theta,theta0表示b,也就是x^0的引數,theta其他值對應w,教程中不使用theta而是使用w和b,更容易理解。
2.3 代價函式
右上角帶括號的角標是指第i個樣本,統一寫法。
如何訓練引數w和b,我們的目的是讓y/hat與y的差距儘可能小,設計一個損失函式(誤差函式),
這個函式可以是歐幾里得距離,但是會在下一步梯度下降法時出現很多區域性最優解,從而這裡設計
這個公式也能做到損失函式的要求,還能夠避免梯度下降法的區域性最優解。
將所有的訓練樣本的損失函式求均值後,得到的值為代價函式
損失函式是針對單個訓練樣本,代價函式是所有訓練樣本損失函式的均值,用來控制整個模型的訓練程度,我們的訓練就是針對代價函式。
2.4 梯度下降法
本節就講了上一節提出的代價函式,如何取得能夠使代價函式最小的w和b的值,用到的方法就是梯度下降法。梯度下降法就是重複的更新w和b,每次更新的步長就是和,是學習率,值越大,步長越大。然後後邊還講了導數和偏導數的概念,還好學過高數,不難。
2.5 導數
這節直接跳過
2.6 更多導數例子
這節就是講導數會變的情況,講的是真的細啊
2.7 計算圖
介紹了計算圖的概念,就是把一個公式拆分成多個子公式,形成一個圖的形式。
2.8 計算圖的導數計算
這節通過反向計算計算圖的導數,分別求代價函式J相對於各個項的導數,引出了反向計算。反向計算是為了得到代價函式中的每一個引數的導數,從而通過導數結合前邊的梯度下降法,就可以按梯度的方向去更新引數,最終尋找到代價函式的最小值。
2.9 logistic迴歸中的梯度下降法
這一節是將前幾節的梯度下降法,logistic迴歸公式,還有反向計算結合起來,舉例
這幾個公式,然後反向計算關於引數的導數,就可以用到梯度下降法中了。本節講的是單個樣本的例子。
計算出來的
2.10 向量化
本節介紹了python中用向量來代替迴圈實現向量運算的好處,就是快,老師用一個例子來演示了,向量用1.5ms,用迴圈需要500ms,這還是小資料,大資料下計算速率差別更大。所以建議能用向量運算的時候就去用,儘量不要用迴圈單個元素的乘。
2.11 向量化的更多例子
本節前半段介紹了除了計算兩個向量的乘法可以使用向量化的方法以外,對於計算向量的指數、對數、倒數、絕對值等等數學運算,也可以用向量化方法取代迴圈依次計算每一個項的方法。
後邊介紹了對於logistics迴歸演算法中,可以將所有的引數寫成一個向量,然後裡邊關於依次計算引數倒數和更新引數倒數的步驟就可以使用向量化的方法來取代。
2.12 向量化的logistics迴歸
使用向量化可以替代迴圈實現對啟用函式的計算,首先其次其中和看作是向量,寫作和,可以用和來計算。
2.13 向量化logistics迴歸的反向傳播演算法
是怎麼來的?和的關係是啥?
本節講了如何將整個logistics迴歸演算法用向量化的方式來替代,logistics迴歸的迴圈版本需要每次迴圈每個樣本,對每個樣本進行計算和迭代,向量化的版本取代了這個迴圈。
2.14 Python中的廣播
這次講的是Python中的broadcasting,我不知道這裡翻譯成廣播對不對,反正意思就是Python可以在矩陣運算中,將不符合行列數量匹配的矩陣之間進行運算,會將較小的那個矩陣擴充套件成較大的那個的行列數。同理也適用於矩陣與向量和實數做的運算。
上文公式中我們使用了和來表示常數引數矩陣,然而在神經網路中這個量是向量,這裡就用到了Python廣播,將向量的和擴充套件成和。
2.15 關於Python/numpy中向量的說明
這個問題我以前經常會遇到,之前沒有總結過。
當使用Python做科學運算時,總會使用到numpy,但要注意資料結構的問題,區分開陣列和矩陣的區別。使用
a=np.random.randn(5)
生成的a是一個數組,陣列的轉置依然是這個陣列,不滿足矩陣的運算;使用
a=np.random.randn(5,1)
生成的a是一個矩陣,矩陣滿足矩陣運算。如果將兩個a求sharp,第一個得到的是(5,)這樣一個結果,第二個得到的是(5,1)這樣一個結果。
經常會有一些問題是因為這裡資料結構區別導致的,要多加註意,老師建議總是去使用矩陣,而不是陣列,如果有陣列,就使用reshape將其變為矩陣。另外,多的使用assert去檢查a.shape是否滿足要求,可以避免難以除錯的bug。
2.16 ipython筆記本
這節講怎麼用ipython筆記本除錯程式碼和提交作業。
2.17 (選修)logistics損失函式的解釋
本節講的明顯比前邊的複雜一些,分兩部分。
首先是解釋logistics中損失函式
是怎麼推匯出來的,這個式子是首先由:
將這兩個式子合併:
另外老師說對求最大值等效於求的最大值,所以
之後對整個式子加負號,是因為計算損失函式的最小值,所以將計算log函式的最大值取負數,最後