人工智能一百问-2深度学习里说的激活函数是什么意思?

很多刚刚接触深度学习的朋友,在看书籍、博文的时候,经常会看到一个名词:激活函数。那激活函数到底是干什么的呢?

实际上激活函数并不是真正用来“激活”什么的,而是用来对神经元计算出来的结果进行计算和处理的。目的是把特征保留下来,去除数据中的冗余,并且使得神经网络能够解决非线性问题。
简单来说,激活函数就是把计算结果再进行一次处理,加入一些非线性因素,使得神经网络可以更好地解决比较复杂的问题。

常用的激活函数有:

一、Sigmoid函数

Sigmoid函数函数是目前被了解最多的一种激活函数,在生物学中也是常见的S型函数,又被称为S型生长曲线,它长这个样子:

公式定义是这样的:

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

它具有单调递增、反函数单调递增、连续可导、输出值都大于0等性质,所以我们可以把变量通过这个函数映射到[0,1]之间。

它的优点:

  • 1 )输出在(0,1)之间,单调连续,连续可导,可以用作输出层。
  • 2 )求导比较容易

它的缺点:

  • 1)比较容易产生梯度消失,导致训练出问题
  • 2)输出并不是以0位中心
二、Tanh函数

Tanh函数也是一种比较常见的激活函数,它实际是Sigmoid的一种变型。它长这个样子:

它的公式是:
t a n h ( x ) = 1 − e − 2 x 1 + e − 2 x tanh(x) = \frac {1 - e^{-2x}} {1+e^{-2x}} tanh(x)=1+e2x1e2x

它的优点是:

  • 1)Tanh函数的输出均值是0,因此收敛速度比Sigmoid函数快
  • 2)迭代次数相对较少

它的缺点是:

  • 1)与Sigmoid相同,有可能产生梯度消失的
三、ReLU函数

ReLU(Rectified Linear Units)是目前比较常用的激活函数,它与Sigmoid相比,收敛速度回更快,而且运算复杂度更低。它长这个样子:

它的公式为:

f ( x ) = m a x ( 0 , x ) f(x) = max(0,x) f(x)=max(0,x)

因为在x>0的时候x可以保持梯度不衰减,从而可以缓解梯度消失的问题。

优点:

  • 1)相比Sigmoid函数和tanh函数,ReLU函数收敛速度更快
  • 2)ReLU的实现比较简单
  • 3)ReLU可以有效缓解梯度消失问题

缺点:

  • 1 )随着训练的进行,可能会出现神经元死亡、权重无法更新的情况
  • 2 )偏移现象和神经元死亡会影响收敛性
四、Softplus函数

Softplus函数可以看做ReLU函数的平滑形式。并且如果对Softplus函数进行求导,得到的函数就是Sigmoid函数。它长这个样子:

上图是Softplus和ReLU的对比
Softplus的表达式为:

S o f t p l u s ( x ) = l o g ( 1 + e x ) Softplus(x) = log(1+e^x) Softplus(x)=log(1+ex)

Softplus优点:

  • 1)相比Sigmoid和tanh计算量相对小
  • 2)对于深层次网络,Softplus函数不会像Sigmoid函数那样很容易出现梯度消失的情况

缺点:
-1)反向传播时计算耗费较大

五、Softmax函数

Softmax函数是深度学习中常用的激活函数之一,经常作为神经网络最后一层,用来进行多分类。它并不是一个简单的运算,所以木有图,但这里可以给出在运用的时候的例子:

前面计算的结果输入到Softmax层中,得到结果,结果是一组概率,概率之和为1,而概率最大的那个,就是我们倾向选择的结果

它的公式为:

f ( x i ) = e x p ( x i ) ∑ x = 1 n e x p ( x ) f(x_i) = \frac {exp(x_i)} {\sum_{x=1}^nexp(x)} f(xi)=x=1nexp(x)exp(xi)

Softmax和前面的函数都不同,主要表现在:Softmax函数主要针对的是多分类问题,而其他的主要是二分类问题

六、Swish 函数

Google Brain也提出了一个形似ReLu的激活函数, Swish。它长这个样子:

它的公式为:
f ( x ) = x σ ( β x ) f(x) = x {\sigma}({\beta}x) f(x)=xσ(βx)

它的优点是:

  • 1)处处连续可导
  • 2)计算起来不那么麻烦
  • 3)拥有和ReLU同样的有点同时一定程度上避免了死区问题。

因此在google的论文中,他们宣称Swish函数普遍优于ReLu(及其变体),并且更适用于深层的网络结构。

七、我们应该如何选用合适的激活函数?

这里我们讨论的是隐藏层的激活函数选用,输出层激活函数的选择通常是基于其预测值类型

  • 首先要认识到,目前没有一个公认的“最优的”激活函数,不同的激活函数可能在不同类型的数据上做到较好的效果。
  • 其次,由于tanh和sigmoid函数这两个最早的激活函数由于其缺陷现在已经不太使用了,因而我们通常都是用ReLu函数起手。
  • 如果ReLu的效果不好(特别是发现有很多神经元长期失活),然后不妨试试看它的各种变体(新潮点可以选择Swish函数)或是softplus。
  • 如果能够不计时间调参的话,可以简单在原来的激活函数上自定义,通常是乘以一个常数的超参数来调节。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值