**函数(Activation Functions)
神经网络结构的输出为所有输入的加权和,这导致整个神经网络是一个线性模型。如果将每一个神经元的输出通过一个非线性函数,那么整个神经网络的模型也就不再是线性的了,使得神经网络可以更好地解决较为复杂的问题。这个非线性函数也就是**函数。
目前TensorFlow提供了7种不同的非线性**函数,tf.nn.relu、tf.sigmoid、tf.tanh
是其中比较常用的几个。当然,TensorFlow也支持使用自己定义的**函数。
**函数有以下几种形式:
-
平滑非线性函数(Smooth nonlinearities):
-
sigmoid
sigmoid 非线性函数将输入映射到 (0,1) 之间。
数学关系为:f(x)=1/(1+e^−x)
sigmoid优点:
Sigmoid函数的输出映射在(0,1)之间,单调连续,输出范围有限,优化稳定,可以用作输出层。
求导容易。
sigmoid函数曾被广泛地应用,但由于其自身的一些缺陷,现在很少被使用了。
sigmoid缺点:函数饱和使梯度消失
sigmoid 在值为 0 或 1 的时候接近饱和,这些区域,梯度几乎为 0。因此在反向传播时,这个局部梯度会与整个损失函数关于该单元输出的梯度相乘,结果也会接近为 0 。因此这时梯度就对模型的更新没有任何贡献。
除此之外,为了防止饱和,必须对于权重矩阵的初始化特别留意。比如,如果初始化权重过大,那么大多数神经元将会饱和,导致网络就几乎不学习。sigmoid 函数关于原点中心不对称
这个特性会导致后面网络层的输入也不是零中心的,进而影响梯度下降的运作。因为如果输入都是正数的话(如y=wx+b中每个元素都 x>0),那么关于w的梯度在反向传播过程中,要么全是正数,要么全是负数(具体依据整个表达式y而定),这将会导致梯度下降权重更新时出现z字型的下降。
如果是按 batch 训练,那么每个 batch 可能得到不同的信号,整个批量的梯度加起来后可以缓解这个问题。
-
tanh
数学关系为:f(x)=tanh(x)
tanh函数与sigmoid一样也存在饱和问题,但它的输出是零中心的,因此实际应用中tanh比sigmoid 更受欢迎。tanh函数实际上是一个放大的sigmoid函数。
tanh优点:
比Sigmoid函数收敛速度更快。
相比Sigmoid函数,其输出以0为中心。
tanh缺点:
- 还是没有改变Sigmoid函数的最大问题–由于饱和性产生的梯度消失。
-
softplus
数学关系为:
-
softsign
数学关系为:
-
ELU
数学关系为:
-
-
连续但并不是处处可微(Continuous but not everywhere differentiable):
-
ReLU
数学关系为:f(x)=max(0,x)
ReLU的优点:
相较于sigmoid和tanh函数,ReLU 对于 SGD 的收敛有巨大的加速作用(Alex Krizhevsky 指出有 6 倍之多)。有人认为这是由它的线性、非饱和的公式导致的。
相比于 sigmoid和tanh,ReLU 只需要一个阈值就可以得到**值,而不用去算一大堆复杂的(指数)运算。
有效缓解了梯度消失的问题。
在没有无监督预训练的时候也能有较好的表现。
提供了神经网络的稀疏表达能力。
ReLU的缺点:
-
它在训练时比较脆弱并且可能“死掉”。
举例来说:一个非常大的梯度经过一个ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有**现象了。如果这种情况发生,那么从此所有流过这个神经元的梯度将都变成 0。也就是说,这个ReLU单元在训练中将不可逆转的死亡,导致了数据多样化的丢失。实际中,如果学习率设置得太高,可能会发现网络中 40% 的神经元都会死掉(在整个训练集中这些神经元都不会被**)。
合理设置学习率,会降低这种情况的发生概率。
-
ReLU6
数学关系为:
-
SReLU
数学关系为:
资料:
-
Leaky ReLU
数学关系为:
Leaky ReLU是为解决“ ReLU 死亡”问题的尝试。ReLU中当x<0时,函数值为0。而 Leaky ReLU则是给出一个很小的负数梯度值,比如0.01。
资料:http://web.stanford.edu/~awni/papers/relu_hybrid_icml2013_final.pdf
-
PReLU
数学关系为:
PReLU是LReLU的改进,可以自适应地从数据中学习参数。PReLU具有收敛速度快、错误率低的特点。PReLU可以用于反向传播的训练,可以与其他层同时优化。
Kaiming He 等人在 2015 年发布的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》中,对比了PReLU和ReLU在ImageNet model A的训练效果,把负区间上的斜率当做每个神经元中的一个参数来训练。然而该**函数在在不同任务中表现的效果也没有特别清晰。 -
RReLU
数学关系为:
-
CReLU
数学关系为:
-
-
离散的(Discrete):
-
NReLU
数学关系为:
-
Noisy Activation Functions
-
References: