(1-1)神經網絡與深度學習 | 神經網絡基礎

目錄

什麼是神經網絡?

用神經網絡進行監督學習

應用舉例

結構化數據與非結構化數據

邏輯迴歸算法

logistic迴歸模型

logistic迴歸損失函數

梯度下降法

計算圖

logistic迴歸中的梯度下降法

向量化logistic迴歸

前向傳播

反向傳播


什麼是神經網絡?

以房價預測爲例,首先訓練集有4個輸入特徵,包括面積、臥室數量、地區郵編以及地區富裕程度。此時輸入層有4個特徵,輸出層爲房價,隱藏層設置3個隱藏單元(可變),神經網絡結構如下:

已知這些輸入的特徵,神經網絡的工作就是預測對應的價格。注意各層之間的單元採用全聯接的方式,神經網絡的強大之處在於它能在標記訓練集上,得到清晰的輸入和輸出之間的映射關係。

用神經網絡進行監督學習

應用舉例

神經網絡在監督學習上的應用
輸入(x) 輸出(y) 應用
房屋特徵 房價 房地產
廣告、用戶信息 用戶是否會點擊該廣告(0/1) 在線廣告
圖片 指數(1,...,1000) 圖片標記
音頻片段 文本 語言識別
英語 中文 機器翻譯
圖片、雷達信息 其它車的位置 無人駕駛

針對不同的應用會使用不同的神經網絡結構,如房價預測和在線廣告使用標準的神經網絡(全聯接網絡);圖像領域經常應用CNN(卷積神經網絡);對於語言(單詞序列)和音頻(時間序列)這種序列數據一般使用RNN(循環神經網絡);而對於無人駕駛這種複雜的應用,一般使用混合神經網絡結構。

結構化數據與非結構化數據

  • 結構化數據:輸入特徵有非常清晰明確的定義,如房價預測(房子的面積和臥室數量等特徵定義明確)和廣告點擊預測
  • 非結構化數據:輸入特徵沒有明確的定義,如音頻、圖像和文本

邏輯迴歸算法

logistic迴歸模型

以判斷一幅圖像是否是關於貓的圖像爲例:在計算機中用3個獨立的矩陣來存儲一張彩色圖,分別對應紅、綠、藍三個顏色通道。每個矩陣和圖像同樣大,比如若圖像是64*64像素,那麼每個矩陣的維度就是64*64的。矩陣中的值代表對應像素點該顏色通道上的亮度值(0-255)。

  • 輸入的特徵變量:矩陣中亮度值的堆疊,特徵向量x的維度n_{x} = 64*64*3 = 12288
  • 輸出標籤:y = 0,1  (2分類,0代表不是,1代表是貓)

           

  • 訓練集:{{(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),...,(x^{(m)},y^{(m)})}},m代表訓練集的大小m_{train}(區分於測試集的大小m_{test}
  • 特徵矩陣X:包含每一個樣本的特徵向量,其中X每一列代表一個樣本的特徵向量
  • 標籤矩陣Y:包含每一個樣本的標籤

        

使用邏輯迴歸算法對圖像進行2分類,可以表述爲:

其中,算法輸入是圖像的特徵向量;算法輸出是預測輸入屬於正類的概率,它是由對輸入特徵進行線性組合再通過sigmoid函數得到的。通過sigmoid函數\sigma (z) = 1 / (1 + e^{-z})可以把組合值映射到0-1之間。算法參數包括兩部分權重參數w \in R^{n_{x}},偏置參數b \in R,。

logistic迴歸損失函數

爲了訓練得到一組最優的參數w和b,需定義一個代價函數:

算法的輸出爲:,其中x^{(i)}代表第i個訓練樣本的特徵向量。

 

  • 損失函數:均方誤差定義的損失函數是一個非凸函數,存在很多局部最優值,利用梯度下降法很難得到全局最優值,所以在logistic迴歸中使用第二個損失函數,這個損失函數爲凸函數。

  • 代價函數:用於描述整個訓練集所有樣本損失函數的均值

梯度下降法

通過梯度下降法最小化代價函數,求得一組最優的參數w和b:

梯度下降的迭代過程:讓參數w每次減去代價函數對w的導數值與學習率\alpha的乘積,從而最小化代價函數,更新模型參數,最後得到一個最優的參數值;對偏置參數b的更新也是如此。當代價函數有多個參數時,應該使用偏導數。

計算圖

神經網絡的計算包括前向傳播得到輸出和反向傳播計算梯度更新參數兩部分。

  • 用計算圖來表示簡單前向傳播,假設代價函數爲J(a,b,c)=3(a+bc)

  • 用計算圖來計算簡單的導數:計算\frac{\partial finalOutput}{\partial var}, finalOutput指的是代價函數J,var指的是中間變量. 在Python中一般把\frac{\partial finalOutput}{\partial var}記做d var。用計算圖計算導數其實就是鏈式求導過程。

logistic迴歸中的梯度下降法

考慮單個樣本的損失函數,假設輸入特徵向量x只有兩個特徵x_1,x_2

logistic迴歸的計算圖:

單個樣本一次梯度下降計算過程:

  • w_{1} = w_{1} - \alpha dw_{1} = w_{1} - \alpha x_{1}dz
  • w_{2} = w_{2} - \alpha dw_{2} = w_{1} - \alpha x_{2}dz
  • b = b - \alpha db = b - \alpha dz

m個樣本的梯度下降:

向量化logistic迴歸

向量化指的是消除代碼中顯式for循環,加快運行速度的技巧。python中Numpy的內置的函數,不僅可以去掉顯式for循環,還可以充分實現並行化。不論是基於CPU還是GPU都可以實現並行化,GPU更加擅長並行化。

前向傳播

  z^{(i)}=w^{T}x^{(i)}+b,a^{(i)}=\sigma (z^{(i)}) ,i=1,...,m

Z=np.dot(W.T,X)+b
A=sigmoid(Z)

其中,Z=[z^{(1)},...,z^{(m)}],A=[a^{(1)},...,a^{(m)}],特徵矩陣X(n_{x}*m)包含m個樣本的特徵向量,每一列代表一個樣本的特徵向量。

反向傳播

  • dz^{(i)}=a^{(i)}-y^{(i)},i=1,...,m    Y=[y^{(1)},...,y^{(m)}],A=[a^{(1)},...,a^{(m)}]  ,dZ=[dz^{(1)},...,dz^{(m)}] 
  • dw_{j}+=x_{j}^{(i)}*dz^{(i)} ;i=1,..,m;j=1,...,n_{x} ;dw_{j}/=m
  • db+=dz^{(i)};i=1,...,m; db/=m
dZ=A-Y
dW=np.dot(X,dZ.T) / m
db=np.sum(dZ) / m

完整的向量化邏輯迴歸

for iter in range(1000):  #1000次迭代
    Z=np.dot(w.T,X)+b     #前向傳播
    A=sigmoid(Z)
    dZ=A-Y                #反向傳播
    dW=np.dot(X,dZ.T)/m
    db=np.mean(dZ)
    w=w-alpha*dW
    b=b-alpha*db

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章