当前位置:   article > 正文

常用激活函数_怎么把激活函数换为cos函数

怎么把激活函数换为cos函数

可见,激活函数能够帮助我们引入非线性因素,使得神经网络能够更好地解决更加复杂的问题。

1. Sigmoid

s i g m o i d ( x ) = 1 1 + e − x sigmoid(x) = \frac{1}{1+e^{-x}} sigmoid(x)=1+ex1

s i g m o i d ′ ( x ) = 1 1 + e − x sigmoid'(x) = \frac{1}{1+e^{-x}} sigmoid(x)=1+ex1

Sigmoid 函数的取值范围在 (0,1) 之间,单调连续,求导容易,一般用于二分类神经网络的输出层。

函数图像和导数图像:
sigmoid

import math
import numpy as np
import matplotlib.pyplot as plt
x = np.arange(-10,10)
a=np.array(x)
y1=1/(1+math.e**(-x)) # 函数值
y2=math.e**(-x)/((1+math.e**(-x))**2) # 导数值
plt.xlim(-11,11)
ax = plt.gca() # get current axis 获得坐标轴对象
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none') # 将右边 上边的两条边颜色设置为空 其实就相当于抹掉这两条边
ax.xaxis.set_ticks_position('bottom')
ax.yaxis.set_ticks_position('left') # 指定下边的边作为 x 轴   指定左边的边为 y 轴
ax.spines['bottom'].set_position(('data', 0)) #指定 data  设置的bottom(也就是指定的x轴)绑定到y轴的0这个点上
ax.spines['left'].set_position(('data', 0))
plt.plot(x,y1,label='Sigmoid',linestyle="-", color="blue") #label为标签
plt.plot(x,y2,label='Deriv.Sigmoid',linestyle="--", color="red") #l
plt.legend(['Sigmoid','Deriv.Sigmoid'])
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

优缺点

优点:
sigmoid 是使用范围最广的一类激活函数,具有指数函数形状,它在物理意义上最为接近生物神经元。此外,(0, 1) 的输出还可以被表示作概率,或用于输入的归一化,代表性的如Sigmoid交叉熵损失函数。

缺点:
(1)首先,Sigmoid 函数软饱和区范围广(左右趋向于无穷的两个部分),容易造成梯度消失,使得网络参数很难得到有效训练。一般来说, sigmoid 网络在 5 层之内就会产生梯度消失现象
(2)此外,sigmoid函数的输出均大于0,使得输出不是0均值,这称为偏移现象,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。这样会使权重更新效率降低。
(3)最后还有一点,Sigmoid 函数包含 exp 指数运算,运算成本也比较大。

注:软饱和: l i m x → ∞ f ′ ( x ) = 0 lim_{\tiny{x\rightarrow \infty} }f'(x)=0 limxf(x)=0

2. Tanh

t a n h ( x ) = s i n h x c o s h x = e x − e − x e x + e − x tanh(x)=\frac{sinhx}{coshx}=\frac{e^x-e^{-x}}{e^x+e^{-x}} tanh(x)=coshxsinhx=ex+exexex

t a n h ′ ( x ) = 1 − t a n h 2 ( x ) tanh'(x)=1-tanh^2(x) tanh(x)=1tanh2(x)

函数图像和导数图像:
tanh

优缺点:
优点:
与sigmoid相比,它的输出均值是0,使得其收敛速度要比sigmoid快,减少迭代次数。

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

3. ReLU

ReLU的全称是Rectified Linear Units,是一种AlexNet时期才出现的激活函数。

r e l u ( x ) = m a x ( 0 , x ) = { 0 x < 0 x x > 0 relu(x)=max(0,x)=

{0x<0xx>0
relu(x)=max(0,x)={0xx<0x>0

r e l u ′ ( x ) = { 0 x < 0 1 x > 0 relu'(x)=

{0x<01x>0
relu(x)={01x<0x>0

函数图像和导数图像:
RELU
优缺点
优点:
(1)在SGD(随机梯度下降算法)中收敛速度够快,大约是 sigmoid/tanh 的 6 倍。。
(2)可以看到,当x<0时,ReLU硬饱和,而当x>0时,则不存在饱和问题。所以,ReLU 能够在x>0时保持梯度不衰减,从而缓解梯度消失问题。这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练。
(3)没有复杂的指数运算,计算简单、效率提高。

缺点:
(1)与Sigmoid类似,ReLU的输出均值也大于0,偏移现象和神经元死亡会共同影响网络的收敛性。
(2)前向传导(forward pass)过程中,如果 x < 0,则神经元保持非激活状态,且在后向传导(backward pass)中「杀死」梯度。这样权重无法得到更新,网络无法学习。神经元死亡是不可逆的。

注:硬饱和: f ′ ( x ) = 0 f′(x)=0 f(x)=0

4. Leaky ReLU & PReLU

为了改善ReLU在x<0时梯度为0造成Dead ReLU,提出了Leaky ReLU使得这一问题得到了缓解。例如在我们耳熟能详的YOLOV3网络中就使用了Leaky ReLU这一激活函数,一般 α \alpha α取0.25。

另外PReLU就是将Leaky ReLU公式里面的当成可学习参数参与到网络训练中

l e a k y − r e l u ( x ) = { α x x < 0 , ( 0 < α < 1 ) x x > 0 leaky-relu(x)=

{αxx<0,(0<α<1)xx>0
leakyrelu(x)={αxxx<0,(0<α<1)x>0

l e a k y − r e l u ′ ( x ) = { α x < 0 , ( 0 < α < 1 ) 1 x > 0 leaky-relu'(x)=

{αx<0,(0<α<1)1x>0
leakyrelu(x)={α1x<0,(0<α<1)x>0

函数图像:
lr

Leaky ReLU 的优点与 ReLU 类似:

  • 没有饱和区,不存在梯度消失问题。
  • 没有复杂的指数运算,计算简单、效率提高。
  • 实际收敛速度较快,大约是 Sigmoid/tanh 的 6 倍。
  • 不会造成神经元失效,形成了“死神经元”。

5. ELU

e l u ( x ) = { α ( e x − 1 ) x < 0 , ( 0 < α < 1 ) x x > 0 elu(x)=

{α(ex1)x<0,(0<α<1)xx>0
elu(x)={α(ex1)xx<0,(0<α<1)x>0

函数图像:
elu
ELU 融合了sigmoid和ReLU,左侧具有软饱和性,右侧无饱和性。右侧线性部分使得ELU能够缓解梯度消失,而左侧软饱能够让ELU对输入变化或噪声更鲁棒。ELU的输出均值接近于零,所以收敛速度更快。

  • 没有饱和区,不存在梯度消失问题。
  • 没有复杂的指数运算,计算简单、效率提高。
  • 实际收敛速度较快,大约是 Sigmoid/tanh 的 6 倍。
  • 不会造成神经元失效,形成了“死神经元”。
  • 输出均值为零
  • 负饱和区的存在使得 ELU 比 Leaky ReLU 更加健壮,抗噪声能力更强。

但是,ELU 包含了指数运算,存在运算量较大的问题。

6. Softmax

Softmax - 用于多分类神经网络输出。

假设有n个元素,第i个元素的Softmax输出值为:

S o f t m a x i ( x ) = e x ∑ i = 1 n e i Softmax_i(x)= \frac{e^x}{\sum_{i=1}^n e^i} Softmaxi(x)=i=1neiex
softmax

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/不正经/article/detail/156642
推荐阅读
相关标签
  

闽ICP备14008679号