神經網絡反向求導不可導情況處理

神經網絡反向求導不可導情況處理

激活函數不可導

深度學習算法通常需要進行反向求導,來更新模型的參數,這就要求激活函數滿足處處可導的性質,例如傳統的sigmoid函數等。但是,爲了解決梯度消失等問題提出的relu系列函數卻不滿足處處可導性質。
relu(x)=max(x,0) relu(x)=max(x,0)
在這裏插入圖片描述
針對這種類型的激活函數,可以使用次梯度來解決。

次梯度方法(subgradient method)是傳統的梯度下降方法的拓展,用來處理不可導的凸函數。它的優勢是比傳統方法處理問題範圍大,劣勢是算法收斂速度慢。但是,由於它對不可導函數有很好的處理方法,所以學習它還是很有必要的。

c<=f(x)f(x0)xx0c<=\frac{f(x)-f(x_0)}{x-x_0}
對於relu函數,當x>0時,導數爲1,當x<0時導數爲0。因此relu函數在x=0的次梯度c[0,1]c\in[0,1],c可以去[0,1]之間的任意值。

池化不可導

池化層:對輸入的特徵圖進行壓縮,一方面使特徵圖變小,簡化網絡計算複雜度;一方面進行特徵壓縮,提取 主要特徵。卷積網絡中,池化操作使得feature map尺寸發生變化。

針對平均池化:

平均池化層的前向傳播就是把一個patch中的值求取平均來做池化,那麼反向傳播的過程也就是把某個元素的梯度等分爲n份分配給前一層,這樣就保證池化前後的梯度之和保持不變。平均池化層不能簡單的把梯度複製n遍直接反向傳播回去,這樣會使得loss之和變爲原來的n倍,這樣網絡會梯度爆炸。如下圖所示:
如果在前向傳播的過程中使用了不可導的函數,是不是就不能進行反向傳播了?
在這裏插入圖片描述

max池化

最大池化也必須滿足梯度之和不變的原則,最大池化的前向傳播是把patch中最大的值傳遞給後一層,而其他像素的值直接被捨棄掉。那麼反向傳播也就是把梯度直接傳給前一層某一個像素,而其他像素不接受梯度,也就是爲0。最大池化與平均池化前向傳播有一個不同點在於最大池化時需要記錄下池化操作時到底哪個像素的值是最大。如下圖所示:
在這裏插入圖片描述

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