神经网络常用激活函数

1.Sigmoid
公式:

σ ( x ) = 1 1 + e − x \sigma \left ( x \right ) =\frac{1}{1+e^{-x} } σ(x)=1+ex1
σ ′ ( x ) = σ ( x ) [ 1 − σ ( x ) ] \sigma '\left ( x \right ) = \sigma\left ( x \right ) \left [ 1-\sigma \left ( x \right ) \right ] σ(x)=σ(x)[1σ(x)]

图像:

在这里插入图片描述
Sigmoid函数的图像是一个S形的曲线,它在x轴上的范围是(−∞,+∞),而在y轴上的范围是(0,1)。当x趋近于负无穷时,σ(x)趋近于0;当x趋近于正无穷时,σ(x)趋近于1。这种特性使得Sigmoid函数非常适合用作二分类问题的输出层激活函数,因为它可以将任意实数值压缩到0和1之间,从而可以被解释为概率值。

优点:
  • Sigmoid函数的输出在(0,1)之间,输出范围有限,优化稳定,可以用作输出层;
  • 连续函数便于求导。
缺点:
  • 会有梯度弥散;
  • 不是关于原点对称;
  • 计算exp时费时。
2.Tahn
公式:

a = t a n h ( z ) = e z − e − z e z + e − z a=tanh\left ( z \right ) =\frac{e^{z}-e^{-z} }{e^{z}+e^{-z}} a=tanh(z)=ez+ezezez
t a n h ( z ) = 2 s i g m o i d ( 2 x ) − 1 tanh\left ( z \right ) =2sigmoid\left ( 2x \right ) -1 tanh(z)=2sigmoid(2x)1

图像:

在这里插入图片描述

优点:
  • 解决了原点对称的问题;
  • 比Sigmoid更快。
缺点:

具有软饱和性,从而造成梯度消失,在两边一样有趋近于0的情况。

3.Relu
公式:

f ( x ) = { x  if  x ≥ 0 0  if  x < 0 f\left ( x \right ) =\begin{cases} x & \text{ if } x\ge 0 \\ 0 & \text{ if } x< 0 \end{cases} f(x)={x0 if x0 if x<0
f ( x ) = m a x ( 0 , x ) f\left ( x \right ) =max\left ( 0,x \right ) f(x)=max(0,x)

图像:

在这里插入图片描述

优点:
  • 收敛速度比s型和tanh快;
  • 在x>0区域上,不会出现梯度消失、饱和的问题;
  • 计算复杂度低,只要一个阈值就可以得到激活值。
缺点:

梯度消失没有完全解决,在x<0时,梯度为0,相当于神经元死亡且不会复活。

4.Leaky Relu
公式:

y i = { x i  if  x i ≥ 0 x i a i  if  x i < 0 y_{i} =\begin{cases} x_{i} & \text{ if } x_{i}\ge 0 \\ \frac{x_{i} }{a_{i} } & \text{ if } x_{i}< 0 \end{cases} yi={xiaixi if xi0 if xi<0
a i a_{i} ai ( 1 , + ∝ ) 区间 \left ( 1, + \propto\right ) 区间 (1,+)区间内的固定参数。

图像:

在这里插入图片描述

优点:

解决神经死亡的问题。

5.softmax

softmax函数可以被视为一种特殊的激活函数,特别是在处理多分类问题时。主要用于多分类问题的输出层,它将一个含任意实数的K维向量压缩(或归一化)到另一个K维实向量中,使得每一个元素的范围都在(0,1)之间,并且所有元素的和为1。

公式:

σ ( z ) j = e z j ∑ k = 1 K e z k \sigma \left ( z \right ) _{j} =\frac{e^{z_{j} } }{ {\textstyle \sum_{k=1}^{K}}e^{z_{k} } } σ(z)j=k=1Kezkezj
其中, z z z是输入向量, z j z_{j} zj z z z中的第 j j j个元素, K K K是类别的总数, σ ( z ) j \sigma \left ( z \right ) _{j} σ(z)j是输出向量中对应于第 j j j个类别的概率值。

softmax在数值上可能出现上溢和下溢的问题。
  • 上溢发生的原因:

当softmax函数中的某个输入值 z j z_{j} zj非常大时,计算 e z j e^{z_{j} } ezj会导致结果变得非常大,甚至可能超过计算机能表示的最大浮点数范围,这种情况通常发生在某个类别得分远高于其他类别时。

  • 解决办法:

对输入向量进行平移,即减去输入向量中的最大值 M = m a x ( z j ) M=max(z_{j}) M=max(zj)。这样,新的输入向量中的最大值变为0,从而避免了上溢。

  • 下溢发生的原因:

当softmax函数中的某个输入值 z j z_{j} zj非常小时,计算 e z j e^{z_{j} } ezj会得到一个近似0的正数。如果多个这样的数相加,和可能依然很小,接近计算机的浮点数下界,导致后续计算中被当成0来处理。特别是这些数被作为分母时,可能导致除以0的错误。

  • 解决办法:

通过减去输入向量中的最大值 M = m a x ( z j ) M=max(z_{j}) M=max(zj)可以避免,因为 e z j − M e^{z_{j}-M } ezjM至少包含一个值为1的项(当 z j = M z_{j}=M zj=M时),这样分母不会为0。
此外,如果softmax的输出需要进一步计算(如计算对数似然),则可以直接对其进行对数化处理,这样可以在数值上更精确。

  • 20
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值