Pytorch學習---深度神經網絡

在深度學習中也借鑑了這樣的結構,每一個神經元(上面說到的簡單單元)接受輸入x,通過帶權重w的連接進行傳遞,將總輸入信號與神經元的閾值進行比較,最後通過激活函數處理確定是否激活,並將激活後的計算結果y輸出,而我們所說的訓練,所訓練的就是這裏面的權重w。

 

激活函數


介紹神經網絡的時候已經說到,神經元會對化學物質的刺激進行,當達到一定程度的時候,神經元纔會興奮,並向其他神經元發送信息。神經網絡中的激活函數就是用來判斷我們所計算的信息是否達到了往後面傳輸的條件。

 

爲什麼激活函數都是非線性的


在神經網絡的計算過程中,每層都相當於矩陣相乘,無論神經網絡有多少層輸出都是輸入的線性組合,就算我們有幾千層的計算,無非還是個矩陣相乘,和一層矩陣相乘所獲得的信息差距不大,所以需要激活函數來引入非線性因素,使得神經網絡可以任意逼近任何非線性函數,這樣神經網絡就可以應用到衆多的非線性模型中,增加了神經網絡模型泛化的特性。早期研究神經網絡主要採用sigmoid函數或者tanh函數,輸出有界,很容易充當下一層的輸入。 近些年Relu函數及其改進型(如Leaky-ReLU、P-ReLU、R-ReLU等),由於計算簡單、效果好所以在多層神經網絡中應用比較多。

但是sigmod由於需要進行指數運算(這個對於計算機來說是比較慢,相比relu),再加上函數輸出不是以0爲中心的(這樣會使權重更新效率降低),當輸入稍微遠離了座標原點,函數的梯度就變得很小了(幾乎爲零)。在神經網絡反向傳播的過程中不利於權重的優化,這個問題叫做梯度飽和,也可以叫梯度彌散。這些不足,所以現在使用到sigmod基本很少了,基本上只有在做二元分類(0,1)時的輸出層纔會使用。可以用全連接層+sigmod來當做注意力模型。

 

與sigmoid函數類似,當輸入稍微遠離了座標原點,梯度還是會很小,但是好在tanh是以0爲中心點,如果使用tanh作爲激活函數,還能起到歸一化(均值爲0)的效果。一般二分類問題中,隱藏層用tanh函數,輸出層用sigmod函數,但是隨着Relu的出現所有的隱藏層基本上都使用relu來作爲激活函數了。

當輸入是負數的時候,ReLU是完全不被激活的,這就表明一旦輸入到了負數,ReLU就會死掉。但是到了反向傳播過程中,輸入負數,梯度就會完全到0,這個和sigmod函數、tanh函數有一樣的問題。 但是實際的運用中,該缺陷的影響不是很大。

 

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