計算機視覺工程師在面試過程中主要考察三個內容:圖像處理、機器學習、深度學習。然而,各類資料紛繁複雜,或是簡單的知識點羅列,或是有着詳細數學推導令人望而生畏的大部頭。爲了督促自己學習,也爲了方便後人,決心將常考必會的知識點以通俗易懂的方式設立專欄進行講解,努力做到長期更新。此專欄不求甚解,只追求應付一般面試。希望該專欄羽翼漸豐之日,可以爲大家免去尋找資料的勞累。每篇介紹一個知識點,沒有先後順序。想了解什麼知識點可以私信或者評論,如果重要而且恰巧我也能學會,會盡快更新。最後,每一個知識點我會參考很多資料。考慮到簡潔性,就不引用了。如有冒犯之處,聯繫我進行刪除或者補加引用。在此先提前致歉了!
爲什麼使用激活函數?
很多任務是非線性的
沒有激活函數的網絡只能實現y=kx+b
這是線性的,無法解決非線性問題
激活函數f()是非線性的
f(kx+b)實現了線性到非線性的轉變,提升了網絡的表達能力
下圖就是一個非線性二分類任務的例子
常用激活函數
Sigmoid
輸出是0到1
適用於二分類任務最後一層的輸出(輸出是0到1,可以認爲是概率)
導數最大是0.25
反向傳播造成梯度消失
輸出不是以0爲中心
冪運算複雜度高
基於以上三點,幾乎不使用Sigmoid
tanh
注意:一些面試題問你 tanh(x)=2*Sigmoid(x)-1 對不對?
錯的
tanh(x)=2*Sigmoid(2x)-1
Sigmoid的升級版
輸出以0爲中心
但是依然存在梯度消失、冪運算複雜度高的問題
ReLU
激活函數的第一選擇
計算複雜度低
x>0時不存在梯度消失
缺點是Dead ReLU(x<0時,等於0,沒有被激活)
輸出不是以0爲中心
Leaky ReLU(PReLU)
ReLU升級版
解決Dead ReLU
0.1可調
ELU
最小值逼近-a,具有飽和性
介於PReLU和ReLU之間
輸出更加接近以0爲中心,對噪聲具有魯棒性
(這兩點不懂,請大佬指教)
冪運算複雜度高
理論上,PReLU和ELU都比ReLU好
但是一般使用ReLU:
- 不用設置a參數
- PReLU和ELU提升不大
- ReLU邏輯相對簡單,沒有ELU的冪運算
- 如果沒有較大提升,使用ReLU的習慣性難以被撼動
Dead ReLU
如果x<0
反向傳播的時候ReLU激活函數的導數爲0
該神經元的參數就不更新了
與該神經元相連的前面的所有神經元也不更新了
導致一些神經元會失去意義
爲什麼希望輸出以0爲中心?
以0爲中心,輸出有正有負,反向傳播梯度有正有負
可以滿足有的參數增大,有的參數減小
如果輸出全大於0,梯度的正負全部相同
所有參數只可能一起增大或者一起縮小
以上“所有參數”指的是一個神經元對應的所有參數
爲什麼梯度正負取決於輸出(下圖的x是上一層的輸出)?
這是反向傳播的簡單推導
對於同一個神經元,最後一個公式的求導部分是常數
所以,梯度方向取決於x的正負
完
歡迎討論 歡迎吐槽