CS2321n學習筆記——激活函數、數據預處理、權重初始化

CS2321n學習筆記——激活函數數、據預處理、權重初始化

激活函數

1、sigmoid函數

在這裏插入圖片描述
sigmoid函數曾經一度非常流行,但是它有三個嚴重缺點
1.飽和神經元將使梯度消失
在這裏插入圖片描述
當x=-10時,接近負飽和區,它的導數非常接近0,所以當梯度反向傳播時,經過sigmoid函數的上游傳下來的梯度乘以一個非常接近0的數,得到一個非常接近零的數,經過鏈式法則後,零梯度就會傳遞到下游節點。
當x=0時會得到一個合理的梯度
當x=10時,導數又會接近0,同樣會得到0梯度,從而得不到梯度流的反饋
2.sigmoid函數不是一個零中心函數(x=0時輸出爲0.5)
當神經元的輸入數值始終爲正時會怎麼樣?
在這裏插入圖片描述
結果就是所有值都是正或者所有值都爲負,因爲sigmoid的導數永遠爲正。上游傳回來的梯度時dL/df,爲正或者爲負,再用它乘以局部梯度,df/dw=x,永遠爲正值,相當於把上游梯度的符號傳遞回來了,意味着所有關於w的梯度都同時爲正或者爲負,也就是會同時朝着一個方向改變。
這種方法對於梯度跟新來說效率是非常低的。這也是爲什麼我們經常想要使用均值爲0的數據,這樣我們就能得到正的和負的數值,就不會使梯度全部朝着一個方向改變
3.exp()指數運算的運算代價有點高

2、tanh函數

在這裏插入圖片描述
優點是以0爲中心,但是當它飽和的時候依然會出現梯度消失的問題

3、ReLU函數

在這裏插入圖片描述
優點:
1.不會飽和
2.計算效率高
3.收斂快
4.更符合生物學特性
缺點:
1.不是以零爲中心
2.dead ReLU,如果初始化不好或者學習率太大,會讓部分神經元掛掉(永遠不被激活)

4、Leaky ReLU函數

在這裏插入圖片描述
優點:
1.不存在飽和區
2.計算效率高
3.收斂快
4.不會掛掉神經元
PReLU也是類似的函數,再負區間有一個可以被反向傳播學習的斜率參數

5、ELU函數

在這裏插入圖片描述
優點:
1.有ReLU的所有優點
2.接近零均值
3.建立負飽和區,對噪聲有一定的魯棒性
缺點:
需要計算指數運算exp()

6、MAX()函數

在這裏插入圖片描述

在實踐中使用的策略:
在這裏插入圖片描述
一般先使用ReLU,這是大體上能用的方法中最標準的一種

數據預處理

在這裏插入圖片描述
零中心化:爲了避免得到的梯度全爲正或者全爲負(減去整個圖片的均值)
歸一化數據:爲了讓所有特徵都在相同區間內,做出差不多的貢獻
但一般圖像的數據預處理只有零中心化,而不做其他處理:
在這裏插入圖片描述
在AlexNet中,像素值減去整個圖片的均值,而在VGGNet中,則是減去每個顏色通道的均值。而這個操作並不能改變sigmoid函數缺點,只能在第一層解決梯度消失問題,但是在深度神經網絡中後面的層依然存在梯度消失問題。
零中心化的意義:
在這裏插入圖片描述
從簡單的二維分類任務來看,左圖是沒有被中心化的數據,離座標原點很遠,我們可以用一條直線分離他們,然是如果這條直線稍微轉動一點,就會導致分類不準確,也就是說左邊分類器的損失函數對權重W中的微小擾動非常敏感。而在右邊中心化後的數據中,微小擾動對分類器的準確性影響則沒有那麼大,會使優化變得更容易。這種情況不僅僅在線性分類器中出現,在神經網絡中我們需要交叉使用線性分類器卷積還有非線性激活函數,如果神經網絡中某一層的輸入均值不爲零(沒有零中心化),該層權重的微小擾動就會造成該層輸出的巨大變動,從而造成學習困難

權重初始化

如果一個神經網絡的權重參數都爲0會怎麼樣?
在這裏插入圖片描述
所有神經元會同步更新相同參數,做同樣的事情,得到一堆完全相同的神經元。

所以應該怎麼做呢?
首先可以嘗試小數據的高斯分佈
在這裏插入圖片描述
這樣初始化參數在小的網絡中有用,但是在更深的網絡中會出現問題。
正向傳播時在每層乘以一個隨機權重(小於1的數),在一次次的乘法中參數迅速縮小,所有數值慢慢趨近於0。
在這裏插入圖片描述
反向傳播的時候,也因爲鏈式法則梯度不斷乘以小數導致梯度消失。。
在這裏插入圖片描述
如果初始化權重比較大會怎麼樣呢?
會因爲hanh函數的特性進入飽和區,導致梯度消失。
所以初始化的權重太大或者太小都不行,所以可以使用Xavier初始化法,或者MSRA初始化法進行合適的初始化。

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