深度学习 **函数(续)tanh、Relu、Leaky Relu

深度学习 **函数(续)tanh、Relu、Leaky Relu

tanh函数

tanh函数是右上角那个,可以看到他是sigmoid函数的放大加平移,它的值域 ( − 1 , 1 ) (-1,1) (1,1),它在绝大多数场合取代了sigmoid函数,因为函数值域在-1 和+1的**函数,其均值是更接近零均值的。在训练一个算法模型时,如果使用 tanh 函数代替sigmoid 函数中心化数据,使得数据的平均值更接近 0 而不是 0.5。
【注】可以看到在我之前写的二分类的性别分类中,最后的输出层用了sigmoid函数,在二分类问题中,sigmoid函数可以把概率变成0-1之间。

这两个函数,通病就是我们在反向的时候,梯度下降到函数的两边时候,梯度下降很慢很慢,是吧?我拿其中一个函数圈出来深度学习 **函数(续)tanh、Relu、Leaky Relu
可以看到这两边的斜率几乎没什么变化。所以我们在做训练的时候还有个更吊的**函数

Relu

修正线性单元的函数(ReLu),ReLu 函数图像是第一张图的第三个曲线。公式 a = m a x ( 0 , z ) a=max(0,z) a=max(0,z) .所以,只要????是正值的情况下,导数恒等于 1,当????是负值的时候,导数恒等于0

z在 ReLu 的梯度一半都是0,但是,有足够的隐藏层使得z值大于0,所以对大多数的训练数据来说学习过程仍然可以很快。

Leaky Relu

这里也有另一个版本的 Relu 被称为 Leaky Relu。当????是负值时,这个函数的值不是等于 0,而是轻微的倾斜,就是右下角的图。这个函数通常比 Relu **函数效果要好,尽管在实际中 Leaky ReLu 使用的并不多。

好奇小姜在线提问:为什么引入Leaky Relu?
Relu 进入负半区的时候,梯度为 0,神经元此时不会训练,产生所谓的稀疏性,而 Leaky ReLu 不会有这问题。

【小结】
sigmoid **函数:除了输出层是一个二分类问题基本不会用它。
tanh **函数:tanh 是非常优秀的,几乎适合所有场合。
ReLu **函数:最常用的默认函数,如果不确定用哪个**函数,就使用 ReLu 或者Leaky ReLu。