深度學習中激活函數的導數在不連續可導時的處理

  • 2019 年 12 月 19 日
  • 筆記

Q: 深度學習中激活函數在不連續可導時的導數怎麼處理呢?

A: 激活函數不要求處處連續可導,在不連續可導處定義好該處的導數即可。

sigmoid函數是處處連續可導的。其他如ReLU,在0處不連續可導。實際上激活函數用ReLU的情況很多。


以caffe中的ReLU為例

在caffe中,給定輸入x, ReLU層可以表述為:

f(x) = x, if x>0;

f(x) = negative_slope * x, if x <=0.

當negative_slop>0時,ReLU是leaky ReLU. negative_slope默認為0, 即標準ReLU。

如下圖程式碼所示,Backward_cpu中bottom_data(即輸入x)=0時,導數為negative_slope。

relu_layer.cpp

常見激活函數和導數

不連續可導處的導數值取derivative(x+)還是derivative(x-),不同框架如pytorch, caffe, tensorflow可能各有選擇。

一些函數及其導數

Tags: