十分形象地讲:神经网络的激活函数(activation function)是一群空间魔法师,扭曲翻转特征空间,在其中寻找线性的边界。
如果没有激活函数,那么神经网络的权重、偏置全是线性的仿射变(affine transformation):
这样的神经网络,甚至连下面这样的简单分类问题都解决不了:
在这个二维特征空间上,蓝线表示负面情形(y=0),绿线表示正面情形(y=1)
没有激活函数的加持,神经网络最多能做到这个程度:
线性边界——看起来不怎么好,是吧?
这时候,激活函数出手了,扭曲翻转一下空间:
线性边界出现了!再还原回去,不就得到了原特征空间中的边界?
当然,不同的激活函数,因为所属流派不同,所以施展的魔法也各不相同。
上图中,出场的三位空间魔法师,分别为sigmoid、tanh、relu。
sigmoid
sigmoid是一位老奶奶,是激活函数中最有资历的。
虽然比较老迈、古板,已经不像当年那么受欢迎了,但在分类任务的输出层中,人们还是信赖sigmoid的丰富经验。
我们可以看到,sigmoid将输入挤压进0到1区间(这和概率的取值范围一致),这正是分类任务中sigmoid很受欢迎的原因。
tanh
tanh也是一位资深的空间魔法师:
等等,这不就是sigmoid?背过身去以为我们就不认识了吗?
没错,tanh就是乔装打扮的sigmoid:
如上图所示,tanh的形状和sigmoid类似,只不过tanh将“挤压”输入至区间(-1, 1)。因此,中心为零,(某种程度上)激活值已经是下一层的正态分布输入了。
至于梯度,它有一个大得多的峰值1.0(同样位于z = 0处),但它下降得更快,当|z|的值到达3时就已经接近零了。这是所谓梯度消失(vanishing gradients)问题背后的原因,会导致网络的训练进展变慢。
ReLU
ReLU是一个守门人,凡是麻瓜(0)一律拒之门外(关闭神经元)。
它是今时今日寻常使用的激励函数。ReLU处理了它的sigmoid、tanh中常见的梯度消失问题,同时也是计算梯度最快的激励函数。
如上图所示,ReLU是一头完全不同的野兽:它并不“挤压”值至某一区间——它只是保留正值,并将所有负值转化为零。
使用ReLU的积极方面是它的梯度要么是1(正值),要么是0(负值)——再也没有梯度消失了!这一模式使网络更快收敛。另一方面,这一表现导致所谓的“死亡神经元”问题,也就是输入持续为负的神经元激活值总是为零。
本博文改编自知乎评论区