tensorflow学习笔记——常用的激活函数

1.sigmoid

公式:

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

图像:

从图中可以看到,sigmoid激活函数会将所有输入都转到0-1范围内。如此之外,它的倒数有一个常用到的性质:

S(x)^{'}=\frac{e^{-x}}{(1+e^{-x})^{2}}=S(x)(1-S(x))

即它的倒数可由自身表示。

  • 优点:它输出映射在0-1内,单调连续,可以用来作分类,并且求导比较容易;
  • 缺点:具有软饱和性,一旦输入过大或过小,一阶导数就变得接近于0,很容易产生梯度消失的现象。

tesorflow使用:tf.sigmoid(x)

2.tanh

公式:

tanh=\frac{sinhx}{coshx}=\frac{e^{x}-e^{-x}}{e^{x}+e^{-x}}

注意:

sinx=\frac{e^{ix}-e^{-ix}}{2}

sinhx=\frac{e^{x}-e^{-x}}{2}称为双曲正弦函数

图像:

它将整个实数区间映射到了(-1,1),tanh函数也具有软饱和性。它的输出是以0为中心,tanh的收敛速度比sigmoid要快,由于存在软饱和性,所以tanh也存在梯度消失的问题。

tensorflow使用:tf.tanh(x)

3.ReLU

公式:

f(x)=max(0,x)

图像:

relu函数在x<0时,输出始终为0。由于x>0时,relu函数的导数为1,所以relu函数能够在x>0时保持梯度不断衰减,从而缓解梯度消失的问题,还能加快收敛速度,还能是神经网络具有稀疏性表达能力,因此它应该是目前使用最广泛的激活函数(博主在论文里经常见到)。

不过由于当x<0时,relu函数的导数为0,导致对应的权重无法更新,可能导致部分神经元无法被激活。

tensorflow使用:tf.nn.relu(x)

针对ReLU激活函数可能导致部分神经元无法被激活的情况,由很多改进版,比如Leaky ReLU,当x小于0时,也会有一个较小的斜率(比如0.2),但不为0。

tensorflow使用:tf.nn.leaky_relu(x,alpha=0.2)

4. softplus 

softplus函数可以看作是relu函数的平滑版本

f(x)=log(1+e^{x})

图像:

tensorflow使用:tf.nn.softplus(features, name = None)

发布了42 篇原创文章 · 获赞 178 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_40692109/article/details/104343894