我們知道,邏輯迴歸可以用來分類,但僅僅是對於特徵量很少時,當特徵量特別多時,就不適用了,所以引入了神經網絡。
聲明一下,當類別數C>=3時,輸出層有C個結點,否則只用一個結點就可以了;激活函數就是非線性函數比如sigmoid、Relu等。
1.神經網絡
首先了解一下單一神經元內部的構造(圖片來源https://blog.csdn.net/tyhj_sf/article/details/79932893)我們可以看到,一個神經元裏邊做了兩件事,計算theta的轉置*x(此時theta是一個4*1的矩陣,x也是4*1的矩陣,經過計算得到一個數)第二件事是將算出來的值帶入到sigmoid函數(logistics)中計算,然後將計算出來的值傳遞給下一層,理解了這個,再來看多個神經元就好理解了。
神經網絡的代價函數
具體推導公式參考https://blog.csdn.net/CarryLvan/article/details/103120782
2.梯度檢測
估計梯度值,對比其和自己代碼算出來的值是否相絲(確保他們只有幾位小數的差距),判斷程序算出來的梯度值正確與否。(進行學習,或訓練網絡時要關掉梯度檢驗;計算量很大,速度慢,檢測確定後要及時關閉)
3.隨機初始 化
不管是梯度下降還是高級優化算法,都需要對theta進行初始化,建議用隨機初始化(不能設置爲0)範圍在接近0的[-epsilon,epsilon]之內。
4.流程化總結
4.1選擇一種網絡架構(神經元之間的連接方式:隱藏層的層數和每一層的結點個數)
輸入層:特徵個數m
輸出層:分類類別數o(轉化成向量)
隱藏層:默認只有一個隱藏層,若隱藏層個數>1,那麼默認每一個隱藏層的神經單元相等(通常情況下,隱藏單元越多越好,但需要相匹配,可以等於輸入神經元個數,也可以是輸入神經元的若干倍)
4.2訓練神經網絡的步驟
1)隨機初始化權重(小到接近於0的值)
2)執行前向傳播算法,得到預測結果
3)計算代價函數J(theta)
4)實現反向傳播算法,求出偏導數項
5)梯度檢測(注意不用時關閉)
6)使用梯度下降、最優算法LBFGS、共軛梯度法等來最小化代價函數J(theta)