很多刚刚接触深度学习的朋友,在看书籍、博文的时候,经常会看到一个名词:激活函数。那激活函数到底是干什么的呢?
实际上激活函数并不是真正用来“激活”什么的,而是用来对神经元计算出来的结果进行计算和处理的。目的是把特征保留下来,去除数据中的冗余,并且使得神经网络能够解决非线性问题。
简单来说,激活函数就是把计算结果再进行一次处理,加入一些非线性因素,使得神经网络可以更好地解决比较复杂的问题。
常用的激活函数有:
一、Sigmoid函数
Sigmoid函数函数是目前被了解最多的一种激活函数,在生物学中也是常见的S型函数,又被称为S型生长曲线,它长这个样子:
image
公式定义是这样的:
它具有单调递增、反函数单调递增、连续可导、输出值都大于0等性质,所以我们可以把变量通过这个函数映射到[0,1]之间。
它的优点:
- 1 )输出在(0,1)之间,单调连续,连续可导,可以用作输出层。
- 2 )求导比较容易
它的缺点:
- 1)比较容易产生梯度消失,导致训练出问题
- 2)输出并不是以0位中心
二、Tanh函数
Tanh函数也是一种比较常见的激活函数,它实际是Sigmoid的一种变型。它长这个样子:
它的公式是:
image
它的公式为:
因为在x>0的时候x可以保持梯度不衰减,从而可以缓解梯度消失的问题。
优点:
- 1)相比Sigmoid函数和tanh函数,ReLU函数收敛速度更快
- 2)ReLU的实现比较简单
- 3)ReLU可以有效缓解梯度消失问题
缺点:
- 1 )随着训练的进行,可能会出现神经元死亡、权重无法更新的情况
- 2 )偏移现象和神经元死亡会影响收敛性
四、Softplus函数
Softplus函数可以看做ReLU函数的平滑形式。并且如果对Softplus函数进行求导,得到的函数就是Sigmoid函数。它长这个样子:
image
上图是Softplus和ReLU的对比
Softplus的表达式为:
Softplus优点:
- 1)相比Sigmoid和tanh计算量相对小
- 2)对于深层次网络,Softplus函数不会像Sigmoid函数那样很容易出现梯度消失的情况
缺点:
-1)反向传播时计算耗费较大
五、Softmax函数
Softmax函数是深度学习中常用的激活函数之一,经常作为神经网络最后一层,用来进行多分类。它并不是一个简单的运算,所以木有图,但这里可以给出在运用的时候的例子:
image image前面计算的结果输入到Softmax层中,得到结果,结果是一组概率,概率之和为1,而概率最大的那个,就是我们倾向选择的结果
它的公式为:
Softmax和前面的函数都不同,主要表现在:Softmax函数主要针对的是多分类问题,而其他的主要是二分类问题
六、Swish 函数
Google Brain也提出了一个形似ReLu的激活函数, Swish。它长这个样子:
image
它的公式为:
它的优点是:
- 1)处处连续可导
- 2)计算起来不那么麻烦
- 3)拥有和ReLU同样的有点同时一定程度上避免了死区问题。
因此在google的论文中,他们宣称Swish函数普遍优于ReLu(及其变体),并且更适用于深层的网络结构。
七、我们应该如何选用合适的激活函数?
这里我们讨论的是隐藏层的激活函数选用,输出层激活函数的选择通常是基于其预测值类型
- 首先要认识到,目前没有一个公认的“最优的”激活函数,不同的激活函数可能在不同类型的数据上做到较好的效果。
- 其次,由于tanh和sigmoid函数这两个最早的激活函数由于其缺陷现在已经不太使用了,因而我们通常都是用ReLu函数起手。
- 如果ReLu的效果不好(特别是发现有很多神经元长期失活),然后不妨试试看它的各种变体(新潮点可以选择Swish函数)或是softplus。
- 如果能够不计时间调参的话,可以简单在原来的激活函数上自定义,通常是乘以一个常数的超参数来调节。
网友评论