神经网络中的18种激活函数详解
神经网络中的18种激活函数详解
在神经网络中,激活函数扮演着至关重要的角色。它们不仅能够引入非线性因素,使神经网络具备强大的表达能力,还能帮助网络学习数据的复杂模式。本文将详细介绍18种常用的激活函数,从基本概念到具体应用,帮助读者全面理解这一重要主题。
一:简介
激活函数(Activation Function),就是在人工神经网络的神经元上运行的函数,将神经元的输入映射到输出端,目标帮助网络学习数据的复杂模式。
下图展示了一个神经元是 如何 输入激活函数 以及 如何得到该神经元最终的输出:
二:为什么要用激活函数
如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少层,输出都是输入的线性组合,就是最原始的感知机(Perceptron)。
使用激活函数能够给神经元引入非线性因素,
使
神经网络可以任意逼近任何非线性函数,使深层神经网络表达能力更加强大,于是神经网络就可以应用到众多的非线性模型。
三:激活函数的分类
激活函数可以分为两大类:
- 饱和激活函数: sigmoid、 tanh...
- 非饱和激活函数: ReLU 、Leaky Relu 、ELU、PReLU、RReLU...
首先,我们先了解一下什么是饱和?
反之,不满足以上条件的函数则称为非饱和激活函数。 - Sigmoid函数需要一个实值输入,压缩至[0,1]的范围
- tanh函数需要讲一个实值输入,压缩至 [-1, 1]的范围
相对于饱和激活函数,使用非饱和激活函数的优势在于两点:
- 非饱和激活函数能解决深度神经网络(层数非常多)带来的梯度消失问题
- 使用非饱和激活函数能加快收敛速度。
四:常见的几种激活函数
4.1.Sigmoid函数
Sigmoid激活函数的数学表达式为:(\large f(x) = \dfrac{1}{1+e^{-x}})
导数表达式为:(\large f^{'}(x) = f(x)(1-f(x)))
函数图像如下:
Sigmoid函数在历史上曾非常常用,输出值范围为[0,1]之间的实数。但是现在它已经不太受欢迎,实际中很少使用。
什么情况下适合使用Sigmoid?
Sigmoid 函数的输出范围是 0 到 1。非常适合作为模型的输出函数用于输出一个0~1范围内的概率值,比如用于表示二分类的类别或者用于表示置信度。
梯度平滑,便于求导,也防止模型训练过程中出现突变的梯度
Sigmoid有哪些缺点?
容易造成梯度消失。我们从导函数图像中了解到sigmoid的导数都是小于0.25的,那么在进行反向传播的时候,梯度相乘结果会慢慢的趋向于0。这样几乎就没有梯度信号通过神经元传递到前面层的梯度更新中,因此这时前面层的权值几乎没有更新,这就叫梯度消失。除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。如果初始化权重过大,可能很多神经元得到一个比较小的梯度,致使神经元不能很好的更新权重提前饱和,神经网络就几乎不学习。
函数输出不是以 0 为中心的,梯度可能就会向特定方向移动,从而降低权重更新的效率
Sigmoid 函数执行指数运算,计算机运行得较慢,比较消耗计算资源。