机器学习领域常用**函数汇总

前言

这篇博客简介了一些常见的**函数,并简要总结了每个**函数的缺点。

部分常见**函数一览图:

机器学习领域常用**函数汇总

 

 

  • sigmoid

表达式:

机器学习领域常用**函数汇总机器学习领域常用**函数汇总

导数:

机器学习领域常用**函数汇总

sigmoid**函数图像如下:

机器学习领域常用**函数汇总

下面我们来看看sigmoid**函数有哪些缺点

  1. 在饱和区域存在梯度缺失的问题。
  2. sigmoid是一个非零中心的函数。
  3. 表达式较为复杂,计算复杂度高。

这里详细介绍第二个缺点,我们知道在NN的训练过程中,正向传播得到损失值会和反向传播得到偏导数做积,以此获得下一次更新的梯度,而非零中心带来的最大问题是,梯度更新的方向要么都为正向,要么都为反向,从而造成梯度更新的效率非常低。

 

  • tanh

机器学习领域常用**函数汇总

tanh的提出同样避免了sigmoid的一些缺点,首先它是零中心的函数的函数,这点很棒;但tanh同样不可避免的存在饱和区域存在梯度缺失的问题,而计算复杂度较高。

 

  • ReLU

机器学习领域常用**函数汇总

ReLU的提出在一定缓解了sigmoid**函数一部分缺点,首先它含有一半饱和区域,相比sigmoid来说大部分的饱和区域;同时它的计算成本也不高,相比sigmoid和其他的一些**函数,计算速度非常快;在实际中,我们使用ReLU**函数要比sigmoid和tanh收敛得快的多,大约快6倍左右。但同时我们发现它并没有改进非零中心的问题,在ReLU中依旧存在非零中心的问题。ReLU还会出现在0处,导数不存在的情况(根据图像可以清楚发现这一点),在实际的做法中我们人为设定在0处的偏导值为0。最后,ReLU会出现dead Relu的现象,准确来说就是存在输入小于0的情况,从而导致一部分神经元永远不会被**。

 

  • Leaky ReLU

表达式:

机器学习领域常用**函数汇总

机器学习领域常用**函数汇总

个人感觉这个**函数比较nice,它不会存在在饱和区域,同时缓解了sigmoid作为非零中心的函数带来的梯度更新效率很低的问题,最后它的计算速度也比较快,和ReLU相当。在0点会出现导数不存在的问题,但这个不是大问题,只要人为设定即可。

 

  • PReLU

表达式:

机器学习领域常用**函数汇总

相比Leaky ReLU来说,最大的亮点在于比较灵活,能让NN自己学习参数机器学习领域常用**函数汇总

 

  • elu

表达式:

机器学习领域常用**函数汇总

机器学习领域常用**函数汇总

elu(指数线性单元)它含有ReLU函数所有的优点,并且均值接近于0,但是仍然存在负饱和区,有论文指出,它对噪音具有更强的鲁棒性。

 

 

  • Maxout

表达式如下:

机器学习领域常用**函数汇总

Maxout的做法比较有意思,但这样做带来最大问题是参数数量的问题,从表达式可以清晰的的得知参数的数量是其他**函数的两倍;但它不会存在饱和区域存在梯度缺失的问题,也不会存在非零中心化的问题。

 

  • softplus

表达式:

机器学习领域常用**函数汇总

机器学习领域常用**函数汇总

 softplus可以看成平滑版的ReLU函数,表达式中加0为了防止机器学习领域常用**函数汇总中为0的情况出现,直观上感觉他比ReLU有更高的计算复杂度,从图像上可以发现,它不会存在ReLU中0点导数不存在的问题。当然它也会存在饱和区域。

  • softmax

表达式:

机器学习领域常用**函数汇总

softmax**函数主要用于多分类问题中,它将多个神经元的输出,映射到(0,1)区间内,可以看成是当前输出是属于各个分类的概率,从而来进行多分类。