目錄
1、神經(jīng)網(wǎng)絡(luò)表示
2、計算神經(jīng)網(wǎng)絡(luò)的輸出
3、多個樣本的向量化
4、激活函數(shù)
5、激活函數(shù)的導(dǎo)數(shù)
6、神經(jīng)網(wǎng)絡(luò)的梯度下降法
1、神經(jīng)網(wǎng)絡(luò)表示
- 輸入層:有輸入特征??1、??2、??3
- 隱藏層:四個結(jié)點,表示你無法在訓(xùn)練集中看到他們,使用了sigmoid 激活函數(shù)
-
輸出層:它負(fù)責(zé)產(chǎn)生預(yù)測值,使用了sigmoid 激活函數(shù)
- 符號慣例:其中,??表示輸入特征,??表示每個神經(jīng)元的輸出,??表示特征的權(quán)重,上標(biāo)表示神經(jīng)網(wǎng)絡(luò)的層數(shù)(隱藏層為 1),下標(biāo)表示該層的第幾個神經(jīng)元
- 注意 :計算網(wǎng)絡(luò)的層數(shù)時,輸入層是不算入總層數(shù)內(nèi),所以隱藏層是第一層,輸出層是第二層。第二個慣例是我們將輸入層稱為第零層,所以在技術(shù)上,這仍然是一個三層的神經(jīng)網(wǎng)絡(luò),因為這里有輸入層、隱藏層,還有輸出層。但是在傳統(tǒng)的符號使用中,閱讀研究論文中,人們將這個神經(jīng)網(wǎng)絡(luò)稱為一個兩層的神經(jīng)網(wǎng)絡(luò),不將輸入層看作一個標(biāo)準(zhǔn)的
2、計算神經(jīng)網(wǎng)絡(luò)的輸出
- 小圓圈代表了計算的兩個步驟。
- 第一步,計算??1 [1] , ??1 [1] = ??1 [1]?? ?? + ??1 [1]。
- 第二步,通過激活函數(shù)計算??1 [1] , ??1 [1] = ??(??1 [1] )。
- 隱藏層的第二個以及后面兩個神經(jīng)元的計算過程一樣,只是注意符號表示不同,最終分別得到??2?????[1]、??3[1]、??4 [1]
- ?向量化計算:如果你執(zhí)行神經(jīng)網(wǎng)絡(luò)的程序,用 for 循環(huán)來做這些看起來真的很低效
-
對于神經(jīng)網(wǎng)絡(luò)的第一層,給予一個輸入 ?? ,得到 ?? [1] , ?? 可以表示為 ?? [0] 。通過相似的衍生你會發(fā)現(xiàn),后一層的表示同樣可以寫成類似的形式,得到 ?? [2],??^ = ?? [2](隱藏層和輸出層都使用了sigmoid 激活函數(shù))。具體過程見公式
- ?如上圖左半部分所示為神經(jīng)網(wǎng)絡(luò),把網(wǎng)絡(luò)左邊部分蓋住先忽略,那么最后的輸出單元就
相當(dāng)于一個邏輯回歸的計算單元。當(dāng)你有一個包含一層隱藏層的神經(jīng)網(wǎng)絡(luò),你需要去實現(xiàn)以計算得到輸出的是右邊的四個等式,并且可以看成是一個向量化的計算過程,計算出隱藏層的四個邏輯回歸單元和整個隱藏層的輸出結(jié)果,如果編程實現(xiàn)需要的也只是這四行代碼。
3、多個樣本的向量化
- ?? [2](??),(??)是指第??個訓(xùn)練樣本而[2]是指第二層
- ?證明:??[1] 是一個矩陣,??(1) , ?? (2) , ?? (3)都是列向量,矩陣乘以列向量得到列向量,下面
將它們用圖形直觀的表示出來???????
- ?所以從圖中可以看出,當(dāng)加入更多樣本時,只需向矩陣??中加入更多列
4、激活函數(shù)
- 在前面的神經(jīng)網(wǎng)路的前向傳播中,?? [1] = ??(?? [1] )和?? [2] = ??(?? [2] )這兩步會使用到 sigmoid 函數(shù)。 sigmoid 函數(shù)在這里被稱為激活函數(shù),但是,有時其他的激活函數(shù)效果會更好
- ??(?? [1] ) = ???????(?? [1] ) 效果總是優(yōu)于 sigmoid 函數(shù)。因為函數(shù)值域在-1 和+1 的激活函數(shù),其均值是更接近零均值的。在訓(xùn)練一個算法模型時,如果使用 tanh 函數(shù)代替 sigmoid 函數(shù)中心化數(shù)據(jù),使得數(shù)據(jù)的平均值更接近 0 而不是 0.5
- 但有一個例外:在二分類的問題中,對于輸出層,因為??的值是 0 或 1,所以想讓??^的數(shù)值介于 0 和 1 之間,而不是在-1 和+1 之間。所以需要使用 sigmoid 激活函數(shù)
-
???????對隱藏層使用 tanh 激活函數(shù),輸出層使用 sigmoid 函數(shù)
- ???????sigmoid 函數(shù)和 tanh 函數(shù)兩者共同的缺點是,在??特別大或者特別小的情況下,導(dǎo)數(shù)的梯度或者函數(shù)的斜率會變得特別小,最后就會接近于 0,導(dǎo)致降低梯度下降的速度
- ?選擇激活函數(shù)的經(jīng)驗法則:
如果輸出是 0 、 1 值(二分類問題),則輸出層選擇 sigmoid 函數(shù),然后其它的所有單元都選擇 Relu 函數(shù)。這是很多激活函數(shù)的默認(rèn)選擇,如果在隱藏層上不確定使用哪個激活函數(shù),那么通常會使用 Relu 激活函數(shù)。有時,也會使用 tanh 激活函數(shù),但 Relu 的一個優(yōu)點是:當(dāng) ?? 是負(fù)值的時候,導(dǎo)數(shù)等于 0 。這里也有另一個版本的 Relu 被稱為 Leaky Relu 。當(dāng) ?? 是負(fù)值時,這個函數(shù)的值不是等于 0 ,而是輕微的傾斜。盡管在實際中 Leaky ReLu 使用的并不多,但是這個函數(shù)通常比 Relu 激活函數(shù)效果要好
-
sigmoid 激活函數(shù):除了輸出層是一個二分類問題基本不會用它。tanh 激活函數(shù): tanh 是非常優(yōu)秀的,幾乎適合所有場合。ReLu 激活函數(shù):最常用的默認(rèn)函數(shù),,如果不確定用哪個激活函數(shù),就使用 ReLu 或者Leaky ReLu
-
why:在神經(jīng)網(wǎng)絡(luò)中使用非線性激活函數(shù)的主要原因是,如果不使用非線性激活函數(shù),多層神經(jīng)網(wǎng)絡(luò)就相當(dāng)于單層線性模型,而無法捕捉復(fù)雜的非線性關(guān)系。因此,通過使用非線性激活函數(shù),神經(jīng)網(wǎng)絡(luò)可以學(xué)習(xí)更加復(fù)雜和抽象的模式,從而提高其預(yù)測和分類能力。
-
此外,非線性激活函數(shù)還可以解決梯度消失的問題。在深層神經(jīng)網(wǎng)絡(luò)中,當(dāng)使用線性激活函數(shù)時,每一層的輸出都是前一層輸出的線性組合,這種線性組合對梯度的貢獻(xiàn)非常小,導(dǎo)致梯度在反向傳播時逐漸消失。而非線性激活函數(shù)可以引入非線性變換,增加梯度的大小,從而避免梯度消失問題。 因此,使用非線性激活函數(shù)是神經(jīng)網(wǎng)絡(luò)能夠充分發(fā)揮其優(yōu)勢的重要因素之一
- 因此,不能在隱藏層用線性激活函數(shù),可以用 ReLU 或者 tanh 或者 leaky ReLU 或者其他的非線性激活函數(shù),唯一可以用線性激活函數(shù)的通常就是輸出層
5、激活函數(shù)的導(dǎo)數(shù)
-
在神經(jīng)網(wǎng)絡(luò)中使用反向傳播的時候,你真的需要計算激活函數(shù)的斜率或者導(dǎo)數(shù)。針對以下四種激活,求其導(dǎo)數(shù)如下:
?2) Tanh activation function
?3)Rectified Linear Unit (ReLU)
?4)Leaky linear unit (Leaky ReLU)
6、神經(jīng)網(wǎng)絡(luò)的梯度下降法
-
單隱層神經(jīng)網(wǎng)絡(luò)會有??[1], ?? [1] , ?? [2] , ?? [2] 這些參數(shù),還有個???? 表示輸入特征的個數(shù), ?? [1] 表示隱藏單元個數(shù), ?? [2]表示輸出單元個數(shù)。
-
矩陣 ?? [1] 的維度就是 (?? [1] , ?? [0]),?? [1]就是?? [1] 維向量,可以寫成(?? [1] , 1) ,就是一個的列向量。 矩陣 ?? [2] 的維度就是(?? [2] , ?? [1] ),?? [2]的維度就是(?? [2] , 1) 維度???????
- ??????????????Cost function
- ?訓(xùn)練參數(shù)需要做梯度下降,在訓(xùn)練神經(jīng)網(wǎng)絡(luò)的時候,隨機(jī)初始化參數(shù)很重要,而不是初
始化成全零。當(dāng)你參數(shù)初始化成某些值后,每次梯度下降都會循環(huán)計算以下預(yù)測值:
- ?正向傳播方程如下:
- ?反向傳播方程如下: 這些都是針對所有樣本進(jìn)行過向量化,??是1 × ??的矩陣;這里 np.sum 是 python 的 numpy 命令,axis=1 表示水平相加求和,keepdims 是防止python 輸出那些古怪的秩數(shù)(??, ),加上這個確保陣矩陣???? [2]這個向量輸出的維度為(??, 1)這樣標(biāo)準(zhǔn)的形式。
- ?開始計算反向傳播時,需要計算隱藏層函數(shù)的導(dǎo)數(shù),輸出在使用 sigmoid 函數(shù)進(jìn)行二元分類。這里是進(jìn)行逐個元素乘積,因為??[2]?????? [2]和(?? [1] )這兩個都為(?? [1] , ??)矩陣
7、直觀理解反向傳播
- 邏輯回歸的反向傳播
- ?神經(jīng)網(wǎng)絡(luò)的反向傳播:神經(jīng)網(wǎng)絡(luò)的計算中,與邏輯回歸十分類似,但中間會有多層的計算。下圖是一個雙層神經(jīng)網(wǎng)絡(luò),有一個輸入層,一個隱藏層和一個輸出層
在向量化logistic回歸的梯度輸出證明了dw=x*dzT,這里寫成了dw=dz*x,實際上效果一樣,對于矩陣相乘來說,左右互換結(jié)果就不一樣了,dz寫在前面,等同做了一次轉(zhuǎn)置
向量化邏輯回歸的梯度輸出文章來源:http://www.zghlxwxcb.cn/news/detail-499060.html
反向傳播中使用到矩陣求導(dǎo)的方式:使用矩陣求導(dǎo)的方法,可以大大簡化計算過程,提高計算效率文章來源地址http://www.zghlxwxcb.cn/news/detail-499060.html
到了這里,關(guān)于淺層神經(jīng)網(wǎng)絡(luò)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!