深度学习理论——激活函数sigmoid,tanh,ReLU,Leaky ReLU,Maxout

1.sigmoid

f(x)=\frac{1}{1+e^{-x}}

能够将实数域变换到0-1之间,因解释性良好在很早以前广泛使用

但因为它有两个致命缺点所以现在已经很少用了

1)梯度消失

如果输入太大或者太小,sigmoid的梯度会接近于0,那么参数将无法更新,模型就不收敛;另外初始化也需要小心,如果初始化的权重太大,经过激活函数时也会使神经元饱和,无法更新参数

2)输出不是0均值

sigmoid的输出并非0均值,对于后面的层来说,梯度就容易都是正的(对于后面的某个神经元,f(x)=wx+b, 对于参数w,梯度是x,而x是前面的sigmoid的输出,该输出的均值是正的),更新参数的时候永远都用正梯度更新

 

2.Tanh

f(x)=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

深度学习理论——激活函数sigmoid,tanh,ReLU,Leaky ReLU,Maxout_第1张图片

将实数域转换到-1~1之间,解决了sigmoid非0均值的问题,但是梯度消失的问题依然存在,所以总是好于sigmoid

 

3. ReLU

f(x)=max(0,x)

优点:

(1)由于是线性的,不存在梯度消失的问题,加速梯度下降法的收敛速度

(2)仅用阈值判断,不需要像sigmoid,tanh进行计算

缺点:

需要设置较小的学习率来避免神经元“死掉”:如果一个很大的梯度经过ReLU激活函数,参数更新后这个神经元的值会变得非常小(wx+b的b会变得很小,有可能使wx+b变成负值),那么下一轮经过ReLu的梯度就是0,参数就不会更新了,在这之后这个ReLU的梯度永远都会是0,参数也永远无法在更新了

 

4. Leaky ReLU

为了对付ReLU的缺点,当x<0时也会有一个很小的梯度

f(x)=I(x<0)(\alpha x))+I(x\geq 0)(x)

有人提出对alpha也可以进行从参数化处理,训练过程中进行更新

 

5.Maxout

f(x)=max(w_{1}x+b_{1}, w_{2}x+b_{2})

可以发现ReLU只是Maxout的特殊形式,所以它保持了ReLU的优点,

缺点:加倍了模型的参数,导致存储变大

 

最常用的还是relu,学习率设定不要太大,一定不要使用sigmoid,可以试试tanh

另外,实际使用中也很少使用混合类型的激活函数

你可能感兴趣的:(深度学习)