深度学习中激活函数的导数在不连续可导时的处理
- 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。

常见激活函数和导数
不连续可导处的导数值取derivative(x+)还是derivative(x-),不同框架如pytorch, caffe, tensorflow可能各有选择。
