本文转载自公众号“读芯术”(ID:AI_Discovery)。
神经网络和深度学习中的激活函数在激发隐藏节点以产生更理想的输出方面起着重要作用,激活函数的主要目的是将非线性特性引入模型。
在人工神经网络中,给定一个输入或一组输入,节点的激活函数定义该节点的输出。可以将标准集成电路视为激活功能的控制器,根据输入的不同,激活功能可以“打开”(ON)或“关闭(OFF)”。
图1:Sigmoid;图2:tanh
Sigmoid和tanh是单调、可微的激活函数,在RELU出现前比较流行。然而,随着时间的推移,这些函数会饱和,导致梯度消失。另一种常用的激活函数可以解决这一问题:直线修正单元(ReLU)。
上图中,蓝线表示直线单元(ReLU),而绿线是ReLU的变体,称为Softplus。ReLU的其他变体包括LeakyReLU、ELU、SiLU等,用于提高某些任务的性能。
本文只考虑直线单元(ReLU)。因为默认情况下,它仍然是执行大多数深度学习任务最常用的激活函数。在用于特定目的时,其变体可能有轻微的优势。
在2000年, Hahnloser等人首次将具有很强的生物学动机和数学证明的激活函数引入到一个动态网络。相比于2011年之前广泛使用的激活函数,如logistic sigmoid(灵感来自于概率理论和logistic回归)及其更实用的tanh(对应函数双曲正切)相比,这首次证明了该函数能够更好地训练更深层次的网络。
截止2017年,整流器是深度神经网络中最受欢迎的激活函数。采用整流器的单元也称为整流线性单元(ReLU)。
RELU的最大问题是在点0处是不可微。而研究人员倾向于使用sigmoid和tanh这种可微函数。但是在0点可微毕竟是特殊情况,所以到目前为止,ReLU还是深度学习的最佳激活功能,需要的计算量是非常小,计算速度却很快。
在除0以外的所有点上,ReLU激活函数上都是可微的。对于大于0的值,仅考虑函数的最大值。可以这样写:
- f(x) = max{0, z}
简单来说,也可以这样:
- if input > 0: returninputelse: return 0
所有负数默认为0,并考虑正数的最大值。
对于神经网络的反向传播计算而言,ReLU的判别相对容易。唯一要做的假设是,在点0处的导数也被认为是0。这通常问题不大,而且在大多数情况下都ok。函数的导数就是斜率的值。负值的斜率是0.0,正值的斜率是1.0。
ReLU激活函数的主要优点是:
- 卷积层和深度学习:它们是卷积层和深度学习模型训练中最常用的激活函数。
- 计算简单:整流函数实现起来很简单,只需要一个max()函数。
- 代表性稀疏性:整流器函数的一个重要优点是它能够输出一个真正的零值。
- 线性行为:当神经网络的行为是线性或接近线性时,它更容易被优化。
然而,经过RELU单元的主要问题是所有的负值会立即变为0,这降低了模型对数据正确拟合或训练的能力。
这意味着任何给ReLU激活函数的负输入都会立即将图中的值变为0。由于没有适当地映射负值,这反过来会影响结果图。不过,使用ReLU激活函数的不同变体(如LeakyReLU和前面讨论的其他函数),可以轻松解决这个问题。
这是一个简短的介绍,帮你在深度学习技术时代了解整流线性单元及其重要性。毕竟,它比所有其他激活函数更受欢迎肯定是有原因的。