研习深度神经网络DNN
1.從感知機到神經網絡
上圖是一個感知機模型,有若干個輸入和一個輸出(輸出的結果只可以是1或-1)
輸入和輸出有一個線性關系:
神經元激活函數:(二分類)
?由于這個簡單的感知機只可以進行二分類,則對于感知機進行升級,升級如下:
1)加入隱藏層,從而增加模型的表達能力,同時也增加了模型的復雜度
2)輸出層的神經元不止一個輸出,可以有多個輸出
3)擴展了激活函數,從感知機的激活函數sign(z)---->sigmoid,之后又出現了tanX,softmax,ReLu等,通過不同的激活函數提高了神經網絡的表達能力
2.深度神經網絡(DNN)的基本結構
?神經網絡是基于感知機的擴展,深度神經網絡就是有很多隱藏層的神經網絡,所以深度神經網絡也叫做多層感知機。
深度神經網絡的內部神經網絡有3層,第一層輸入,最后一層輸出,其余中間都是隱藏層,層與層之間全連接。在局部的小模型來講和感知機是一樣的,都是線性關系+激活函數,即
Layer 1:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Layer 2:
Z[1]?= W[1]·X + b[1]? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??Z[2]?= W[2]·A[1]?+ b[2]
A[1]?= σ(Z[1])? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ??A[2]?= σ(Z[2])
X其實就是A[0],所以不難看出:
Layer i:
Z[i]?= W[i]·A[i-1]?+ b[i]
A[i]?= σ(Z[i])
(注:σ是sigmoid函數)
因此不管我們神經網絡有幾層,都是將上面過程的重復
系數w的定義:
如下圖:這里的w243指的是第二層的第四個神經元到第三層的第二個神經元
偏置b的定義:
如下圖:b23表示第二層的第三個神經元,a13表示第三層的第一個神經元
3.深度神經網絡前向傳播算法的原理
核心:利用上一層的輸入計算下一層的輸出
以上是代數法,其實一個一個表示輸出很復雜,所以就有了簡化版的寫法,就是矩陣法。
假設第l?1層共有m個神經元,而第l層共有n個神經元,則第l層的線性系數w組成了一個n×m的矩陣Wl,第l層的偏倚b組成了一個?n×1?的向量?bl ,第l-1層的輸出?a?組成了一個?m×1?的向量?a(l?1),第l層的未激活前線性輸出z組成了一個?n×1?的向量?zl?,第l層的輸出?a?組成了一個?n×1?的向量?al?。?
4.深度神經網絡的前向傳播算法
利用若干個權重系數矩陣w,偏置向量b來和輸入值向量x,進行一系列的線性運算和激活運算,從輸入層開始,一層一層向后計算,運算到輸出層得到輸出結果
5.深度神經網絡反向傳播算法要解決的問題
假設有m個訓練樣本?{(x1,y1),(x2,y2),...,(xm,ym)}?,xi為輸入向量,其特征維度是n_in;y為輸出向量,其特征向量為n_out。用m個樣本訓練出一個模型。當有一個新的測試樣本(Xtest,Y?)的時候,預測Ytest的輸出。
我們使用深度神經網絡模型,使輸入層有n_in個神經元,輸出層有n_out個神經元,再加上含有若干個神經元的一些隱藏層。現在的目標就是要找到所有隱藏層和輸出層對應的線性系數矩陣w和偏置向量b,讓所有訓練樣本輸入計算出的結果(輸出)盡可能的接近或等于樣本的輸出。通俗來講就是你的訓練集已經放進了一個完美的標注Ym,神經網絡在訓練的時候會也會訓練出一個標準,用神經網絡那個標準與Ym相比對,會產生一定的差距。損失函數就是Ym結果與神經網絡訓練出的模型具體差多少的定量表達。一般損失函數比較兩個模型差距多少的三種思路是:最小二乘法,極大似然估計法,交叉熵法。對損失函數進行優化求最小化的極值,對應的一系列w和b即為最終的合適的參數。而這個損失函數的優化極值求解過程最常見的一般是通過梯度下降法來步步迭代。
6.深度神經網絡反向傳播算法的基本思路
在進行反向傳播算法前,我們要選擇一個損失函數,來度量訓練樣本計算出的輸出與真實訓練樣本輸出的損失。深度神經網絡可以選擇的損失函數很多,要選擇一個損失函數來用梯度下降法迭代修改每一步的w和b。具體的思路很復雜 ,我暫時還不能很好的理解,請讀者見諒!
7.深度神經網絡反向傳播算法過程
輸入:總層數L,各隱藏層與輸出層的神經元個數,激活函數,損失函數,迭代步長a,最大迭代次數max與停止迭代閾值,輸入的m個訓練樣本
輸出:各隱藏層與輸出層的線性關系系數矩陣w和偏置向量b
8.均方差損失函數+sigmoid激活函數的問題
在講反向傳播算法的時候,我們用均方差損失函數和sigmoid激活函數做了實際例子,但是其實這是有問題的。
看上圖,如果z取值越來越大,函數曲線變得平緩,意味著導數?σ′(z)?也越來越小。而在反向傳播過程中,每一層向前遞推都要乘以導數?σ′(z)得到梯度變化值sigmoid這個曲線就意味著在大多數時候梯度的變化值很小,導致算法收斂速度較慢。那怎么解決這個問題呢?
9.改變損失函數和激活函數
損失函數3種:最小二乘法,極大似然估計法,交叉熵法
激活函數:sigmoid,tanX,softmax,ReLu...
根據經驗,應該兩兩搭配換著;來試一下,哪個效果好選哪個
總結
以上是生活随笔為你收集整理的研习深度神经网络DNN的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: TP LINK GRE L2TP介绍
- 下一篇: int和Integer的区别是什么,一招