引言

在学习机器学习的时候,我就一直有着一个疑惑。为什么神经网络需要激活函数(Activation Function)?可能有的人会说,引入激活函数是为了给网络引进非线性。但是有没有仔细思考过,引入非线性的原因呢,下面我简单谈谈自己的看法(纯属个人胡说,有不同见解评论区见)


什么是激活函数

简单地说,激活函数是添加到人工神经网络中的一个函数,目的是帮助网络学习数据中的复杂模式。与我们大脑中基于神经元的模型相比,激活函数最终决定向下一个神经元的连接情况。这正是激活函数在ANN中的作用。它接收上一个单元的输出信号,并将其转换成某种形式,作为下一个单元的输入。
在这里插入图片描述

如上图所示,若没有激活函数的作用,该网络传递表达式可写为:

t=w@a+b

激活函数fun的加入相当于把原始关系改写为:

t=fun(w@a+b)

我们最常听到的sigmod函数就是上面fun的一种,在原始关系的基础上引入这样的操作的意义是什么呢?


为什么要引入激活函数?

1.模拟人类神经元的传递规则

首先,考虑一下人类神经元的传递规则。某一神经元也只是在特定的刺激下才会传递相应的信号。我们假定,各层之间的输出越接近1说明该神经元越兴奋,越接近0说明该神经元越不活跃。那么激活函数的功能就像是控制神经元活跃度控制伐,模拟真实人类神经的传递规则。

2.限制每层之间的输出值范围

除了前面讨论过的生物学相似性之外,它们还有助于将神经元输出的值限制在我们要求的某个限制内。 因为激活函数的输入是W * x + b,其中W是单元的权重(Weight),x是输入,然后在其上加上b偏差(Bias)。 如果不限制在某个值上,则此值的幅度可能会非常高,尤其是在具有数百万个参数的非常深的神经网络的情况下。 这将导致计算问题。 例如,有些激活函数(如softmax)针对不同的输入值(0或1)列出了特定的值。

3.为神经网络引入非线性的能力

然而除去上述的两个功能以外,激活函数最重要的功能莫不过为神经网络引入了非线性的能力。为什么神经网络需要非线性的能力?我们举个最简单的分类问题当例子,可以知道机器学习就是用大量的数据去不断更新各网络层之间连接参数的weight和bias。来使之后对不同的输入数据,经过网络的处理之后都可以给出正确的分类。

向量角度理解

我们知道每一层的参数操作对应的函数表达式为y=w@x+b。
运用大学的线性代数的知识,把网络的输入x看成是一个向量(Vector)。可以理解成参数矩阵w(Matrix)乘以输入vector,其相当于是矩阵w列向量的线性组合。
在这里插入图片描述

运算的规则如上图所示,相当于用输入的vector对参数w的列向量进行线性组合,这样的话,会导致的问题如下:

1.各层级之间的线性操作可以直接等价于一层线性操作

为什么会这样子呢?简单的推导过程如下:

在这里插入图片描述

其中a[1]a[2]代表两级网络层的输出。经过计算我们可知,a[2]的输出可以直接等价为一组新参数w‘、b’对原始输入的操作。

那么其实整个网络其实就当于是一个从输入到输出的变化,中间隐藏层的线性变化完全通过更改输入层的参数矩阵就可以实现。

也就是说缺失了每层之间的非线性激活函数,所有隐藏层失去了原始的作用因为多层线性操作等价于一层线性操作

2.其次由于线性组合相当于是对原始参数矩阵张成的空间进行伸缩,旋转和剪切

但是可能真实世界有些原始数据本身就是线性不可分的,必须要对原始空间进行一定的非线性操作(对原空间进行一定的扭曲?)

对于回归问题也可以同样运用高数的思维,把回归看成分类问题的无限细分,当极限存在时,分类也就成为了回归问题。


激活函数应该具有的特征

  • 避免梯度消失的特性,造成网络更新过慢
  • 输出最好关于0对称,这样就不会造成梯度向特定方向移动
  • 激活函数应该为神经网络引入非线性
  • 激活函数应该是可微的,使得满足各层之间梯度下降的计算(至少部分可微)
  • 梯度的计算不应该太复杂,影响网络性能

常见的激活函数及主要优缺点

1.Sigmod函数

Sigmoid函数是传统的神经网络和深度学习领域开始时使用频率最高的激活函数。
其优点主要是==连续平滑便于求导==;
但是其的缺点也很致命:
1.梯度消失问题(Vanishing Gradient problem):观看图像可知当x>2或x<2时Sigmod输出趋于平滑,导致梯度减小,权重和偏置更新过慢导致网络不更新
2.非零均值特性(none-zero-centered):会使训练震荡达不到最优解,使收敛变慢
3.导数计算复杂,影响速度


2.Tanh 函数

在这里插入图片描述

Tanh主要解决了Sigmod非零均值特性的问题,但是其还是存在计算复杂和梯度消失的问题。


3. ReLU

在这里插入图片描述

Relu的主要优点有:
1.大于0时,其导数恒为1,不会存在梯度消失的问题
2.计算速度非常快,只需要判断 x 是大于0还是小于0
3.收敛速度远远于前面的 Sigmoid 和 Tanh函数
但是ReLu也是有着缺陷的:
1.非零均值特性
2.x<0时,输出恒为0.会使某些神经元永远不会被激活,进而导致参数永远不会更新


4. Leaky ReLU

在这里插入图片描述

Leaky ReLU 的提出主要是为了解决前面提到的Dead ReLu问题。因为当 x 小于 0 时,其输出不再是 0。虽然同时 Leaky ReLU 具有 ReLU 的所有优点。但是在实际操作中并没有完全证明好于 ReLU 函数。

etc…


Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐