2017年3月9日木曜日

请问人工神经网络中的activation function的作用具体是什么?为什么ReLu要好过于tanh和sigmoid function?

第一个问题什么引入非线性激励函数?
如果不用激励函数(其相当于激励函数是f(x) = x),在种情况下你每一层输出都是上层输入的线性函数,很容易验证,无你神有多少出都是入的线合,与没有效果相当,种情况就是最原始的感知机Perceptron)了。
正因上面的原因,我决定引入非线性函数作激励函数,这样就有意了(不再是入的线合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,出有界,很容易充当下一层输入(以及一些人的生物解balabala)。

第二个问题什么引入Relu呢?
第一,采用sigmoid等函数,算激活函数(指数运算),算量大,反向播求差梯度,求涉及除法,算量相大,而采用Relu激活函数,整个程的算量省很多。
第二,于深sigmoid函数反向,很容易就会出梯度消失的情况(在sigmoid接近和区变换慢,0种情况会造成信息失,参

答案的第三点),从而无法完成深训练
第三,Relu会使一部分神元的0这样就造成了网的稀疏性,并且减少了参数的相互依存关系,解了过拟问题生(以及一些人的生物解balabala)。

当然在也有一些relu的改,比如prelurandom relu等,在不同的数据集上会有一些训练速度上或者准确率上的改,具体的大家可以找相关的paper看。
多加一句,在主流的做法,会多做一步batch normalization,尽可能保每一入具有相同的分布[1]。而最新的paper[2],他在加入bypass connection之后,发现batch normalization的位置会有更好的效果。大家有趣可以看下。


[1] Ioffe S, Szegedy C. Batch normalization: Accelerating deep network training by reducing internal covariate shift[J]. arXiv preprint arXiv:1502.03167, 2015.
[2] He, Kaiming, et al. "Identity Mappings in Deep Residual Networks." arXiv preprint arXiv:1603.05027 (2016).

 

 

 

1. 激活函数的作用:

了增加神模型的非线性。否你想想,没有激活函数的每都相当于矩相乘。就算你叠加了若干之后,无非是个矩相乘了。所以你没有非线构的,根本就算不上什么神

2. 什么ReLU效果好:

重点关注
6.6Piecewise Linear Hidden Units
http://www.iro.umontreal.ca/~bengioy/dlbook/mlp.html

总结如下:
发现ReLU效果著的文:

Jarrett, K., Kavukcuoglu, K., Ranzato, M., and LeCun, Y. (2009a). What is the best multi-stage architecture for object recognition?



发现ReLU更容易学习优化。因其分段线性性致其前,后,求都是分段线性。而传统sigmoid函数,由于两端和,在程中容易弃信息:

Glorot, X., Bordes, A., and Bengio, Y. (2011b). Deep sparse rectifier neural networks. In JMLR W&CP: Proceedings of the Fourteenth International Conference on Artificial Intelligence and Statistics (AISTATS 2011). 130, 297

 

缺点是不能用Gradient-Based方法。同如果de-active了,容易无法再次active。不法解决,使用maxout激活函数:

Goodfellow, I. J., Warde-Farley, D., Mirza, M., Courville, A., and Bengio, Y. (2013a). Maxout networks. In S. Dasgupta and D. McAllester, editors, ICML'13, pages 1319�C1327. 130, 152, 243

 

除了帮助播信息,便于化的点以外,分段线性函数可以regularize得更加容易。

 

 

 

原回答请见 不同activation function的神的表达能力是否一致? - 翰曰不的回答

什么通常Relusigmoidtanh,有什么不同?
主要是因gradient特性不同。sigmoidtanhgradient和区域非常平,接近于0,很容易造成vanishing gradient问题,减速度。vanishing gradient在网络层数多的候尤其明,是加深网络结构的主要障碍之一。相反,Relugradient大多数情况下是常数,有助于解决深的收敛问题Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoidtanh,更符合生物神元的特征。
而提出sigmoidtanh,主要是因程可有表达区间问题sigmoidtanh01,或着-11,在表达上,尤其是的表达上有优势




universal approximation theorem[1~2]表明,线和至少一层带"挤压"的激活函数的的前,在具有足元数的情况下,可以以任意精度近似任何一个从有限空到另一个有限空映射的Borel函数(定在有界集上的任意连续函数是Borel的)。

所以,要想网络获得普适近似器的性,一个必点是"要有"挤压"的激活函数"里的"挤压"是因早期的研究用的是sigmoid函数,所以其数学性的研究也主要基于:将入数围挤压到一定的出数。(后来发现,其他性的激活函数也可以使得网具有普适近似器的性,如ReLU [3]
可以是激活函数的理作用了,使神一个普适近似器。

当然,激活函数有很多种,并不是每个都能有以上作用(例如位函数作激活函数,但其实单位函数作为隐激活函数,可以达到以减少参数和过滤数据的作用:,原来一个线重矩的功能由两个小矩)代替),也有的激活函数具有更多作用。

什么ReLUsigmoid的呢?因它具有其他良性[4]

  • 梯度播性的解(最重要的,因目前,络训练而言,梯度这东西最重要):

梯度消失是因saturation regime的存在,而ReLU线性部分能很好播梯度,而置0部分本身就是了稀疏性而gradient的。

  • 稀疏性性的解

ReLU更易生稀疏性,而数学上来看,你可以认为这是一种线化,然后再投影,投到特征度上( )
得是可以利用种粗略的想法,来判断当前数据是否适用ReLU种激活函数来构建网。当然,实验是最靠的了。

而稀疏性的好有:

  1. 信息解离:相当于将高度耦合的量解耦,这样表示就能容忍噪声从而更具棒性;
  2. 信息容量可的表示:如果input信息量大,那么会有很多神active以保存些信息;而如果input信息量小,那么就会有很多神inactive也是variable-size data structure,机器学模型中,量多了怕过拟合,量不怕欠合。里提供了一种解决思路。
  3. 线性可分:低到高从而分不正是SVM想做的?
  4. 稀疏分布式表示:20-1量的4种可能合,n0-1量有2^n合。n越大,表力就越

 

  • 生物解

是生物神firing rate curve
<img src="https://pic4.zhimg.com/75e0e65b525503356db499e5356d2c2b_b.png" data-rawheight="420" data-rawwidth="565" class="origin_image zh-lightbox-thumb" width="565" data-original="https://pic4.zhimg.com/75e0e65b525503356db499e5356d2c2b_r.png">
是各种激活函数的curve
<img src="https://pic1.zhimg.com/ec400e8198e2de44b6e283f7ae3e7930_b.jpg" data-rawheight="420" data-rawwidth="560" class="origin_image zh-lightbox-thumb" width="560" data-original="https://pic1.zhimg.com/ec400e8198e2de44b6e283f7ae3e7930_r.jpg">

他主要强调的相同点是:
1.
没有到突然有程(框),而不是极其小到逐大;
2.
于某些入,生物神元的出和入成比例;
3.
大多数时间,生物神元是非激活的(也就是稀疏性)。

  • 实际实验上的解
  1. hard saturation at 0 问题clear
  2. 无上限问题clear
  3. 实现线性的问题clear
  4. 达到的效果:好。

 

上,激活函数的研究是一个活域,如ReLU后面的leaky ReLUPReLU2013 - Maxout Networks中的maxout元,2016 - Noisy Activation Functions中用噪声和一泰勒分解来近似sigmoid函数以作激活函数。
一般而言,有多激活函数都能得与传统激活函数相当的表(像cos函数作激活函数也可以表得不),但!只有那些在明确/实验 具有著改善的激活函数,才会被表被播使用[5]。(目前2016ReLU由于其理实验优势,一般被用作默激活函数)

以上。

[1] 1989 - Approximation by superpositions of a sigmoidal function
[2] 1989 - Multilayer feedforward networks are universal approximators
[3] 1993 - Multilayer feedforward networks with a nonpolynomial activation function can approximate any function
[4] 2011 - Deep Sparse Rectifier Neural Networks
[5] 2016 - Deep Learning, book by Ian Goodfellow, Yoshua Bengio, Aaron Courville

 

 

 

作者:夏
接:https://www.zhihu.com/question/29021768/answer/145998033
来源:知乎
著作
权归作者所有。业转载请联系作者得授,非商业转载请注明出

TLDR (or the take-away)

先使用ReLU (Rectified Linear Unit) 函数作元的activation function:

背景

深度学的基本原理是基于人工神,信号从一个神入,经过线性的activation function入到下一元;再经过该层元的activate继续往下传递,如此循往复,直到。正是由于些非线性函数的反复叠加,才使得神有足capacity来抓取复pattern,在各个域取得state-of-the-art果。而易activation function在深度学重,也是很活的研究域之一。目前来选择activation function不在于它能否模真正的神元,而在于能否便于化整个深度神。下面我们简单聊一下各函数的特点以及什么先推荐ReLU函数。

Sigmoid函数

<img src="https://pic2.zhimg.com/v2-83469109cd362f5fcf1decf109007fbd_b.png" data-rawwidth="1364" data-rawheight="458" class="origin_image zh-lightbox-thumb" width="1364" data-original="https://pic2.zhimg.com/v2-83469109cd362f5fcf1decf109007fbd_r.png">

Sigmoid函数是深度学习领域开始使用率最高的activation function。它是便于求的平滑函数,其点。然而,Sigmoid有三大缺点:

  • 容易出gradient vanishing
  • 函数出并不是zero-centered
  • 运算相

Gradient Vanishing

化神的方法是Back Propagation,即数的后向传递:先层对应loss,然后将loss数的形式不断向上一络传递,修正相的参数,达到降低loss的目的。 Sigmoid函数在深度网中常常会数逐渐变为0,使得参数无法被更新,神无法被化。原因在于两点:(1) 在上中容易看出,当中大或数接近0,而后向传递的数学依据是微分求式法,当前数需要之前各层导数的乘,几个小数的相乘,果会很接近0 (2) Sigmoid数的最大0.25意味着数在每一至少会被压缩为原来的1/4,通后被变为1/16,通101/1048576注意里是"至少"数达到最大值这种情况是很少的。

出不是zero-centered

Sigmoid函数的恒大于0致模型训练的收速度慢。例来,如果所有均正数或数,那么其是正数或数,致如下图红色箭所示的梯式更新,这显然并非一个好的化路径。深度学往往需要大量时间理大量数据,模型的收速度是尤重要的。所以,体上来训练深度学尽量使用zero-centered数据 (可以经过数据预处实现) zero-centered出。


<img src="https://pic4.zhimg.com/v2-d290a1c0a8a9378de6a66ec229b907ab_b.png" data-rawwidth="630" data-rawheight="516" class="origin_image zh-lightbox-thumb" width="630" data-original="https://pic4.zhimg.com/v2-d290a1c0a8a9378de6a66ec229b907ab_r.png">

运算相

于前两并不是一个大问题,我目前是具应计算能力的,但面深度学大的算量,最好是能省 :-)。之后我会看到,在ReLU函数中,需要做的仅仅是一个thresholding,相运算来会快很多。

tanh函数

<img src="https://pic2.zhimg.com/v2-a39596b282f6333bced6e7bfbfe04dcd_b.png" data-rawwidth="1224" data-rawheight="528" class="origin_image zh-lightbox-thumb" width="1224" data-original="https://pic2.zhimg.com/v2-a39596b282f6333bced6e7bfbfe04dcd_r.png">

tanhHyperbolic Tangent,如上所示,它解决了zero-centered问题,然而,gradient vanishing问题运算的问题仍然存在。

ReLU函数

<img src="https://pic3.zhimg.com/v2-5c97f377cdb5d1f0bc3faf23423c4952_b.png" data-rawwidth="1304" data-rawheight="412" class="origin_image zh-lightbox-thumb" width="1304" data-original="https://pic3.zhimg.com/v2-5c97f377cdb5d1f0bc3faf23423c4952_r.png">

ReLU函数其就是一个取最大函数,注意并不是全区的,但是我可以取sub-gradient,如上所示。ReLU简单,但却是近几年的重要成果,有以下几大点:

  • 解决了gradient vanishing问题 (在正区)
  • 算速度非常快,只需要判断入是否大于0
  • 速度快于sigmoidtanh

ReLU也有几个需要特注意的问题

  1. ReLU出不是zero-centered
  2. Dead ReLU Problem,指的是某些神元可能永不会被激活,致相的参数永不能被更新。有两个主要原因可能种情况: (1) 非常不幸的参数初始化,种情况比 (2) learning rate太高致在训练过程中参数更新太大,不幸使网络进种状。解决方法是可以采用Xavier初始化方法,以及避免将learning rate置太大或使用adagrad等自动调节learning rate的算法。

尽管存在两个问题ReLU目前仍是最常用的activation function,在搭建人工神候推荐尝试

Leaky ReLU函数

<img src="https://pic1.zhimg.com/v2-8fa15614231fd01a659d4763beec9b24_b.png" data-rawwidth="1208" data-rawheight="408" class="origin_image zh-lightbox-thumb" width="1208" data-original="https://pic1.zhimg.com/v2-8fa15614231fd01a659d4763beec9b24_r.png">

们为了解决Dead ReLU Problem,提出了将ReLU的前半段设为而非0。另外一种直的想法是基于参数的方法,即Parametric ReLU:,其中可由back propagation学出来。理上来Leaky ReLUReLU的所有点,外加不会有Dead ReLU问题,但是在实际操作当中,并没有完全Leaky ReLU是好于ReLU

ELU (Exponential Linear Units) 函数

<img src="https://pic2.zhimg.com/v2-604be114fa0478f3a1059923fd1022d1_b.png" data-rawwidth="1304" data-rawheight="490" class="origin_image zh-lightbox-thumb" width="1304" data-original="https://pic2.zhimg.com/v2-604be114fa0478f3a1059923fd1022d1_r.png">

ELU也是解决ReLU存在的问题而提出,然,ELUReLU的基本所有点,以及:

  • 不会有Deal ReLU问题
  • 出的均接近0zero-centered

它的一个小问题在于算量稍大。似于Leaky ReLU,理然好于ReLU,但在实际使用中目前并没有好的ELUReLU

使用ReLU函数,但是要注意初始化和learning rate置;可以尝试使用Leaky ReLUELU函数;不建使用tanh,尤其是sigmoid函数。

 

 

作者:Brad
接:https://www.zhihu.com/question/29021768/answer/93100557
来源:知乎
著作权归作者所有。业转载请联系作者得授,非商业转载请注明出

以下activation function的比,引自:CS231N(Stanford University CS231n: Convolutional Neural Networks for Visual Recognition)
&lt;img src="https://pic1.zhimg.com/05925f65d0f7d0c6da62b18a9d905b44_b.jpg" data-rawwidth="1930" data-rawheight="924" class="origin_image zh-lightbox-thumb" width="1930" data-original="https://pic1.zhimg.com/05925f65d0f7d0c6da62b18a9d905b44_r.jpg"&gt;&lt;img src="https://pic4.zhimg.com/a8f4669d5cd8612aa0bb3c2f364aa9c7_b.jpg" data-rawwidth="1898" data-rawheight="804" class="origin_image zh-lightbox-thumb" width="1898" data-original="https://pic4.zhimg.com/a8f4669d5cd8612aa0bb3c2f364aa9c7_r.jpg"&gt;&lt;img src="https://pic2.zhimg.com/d233b2c3c079a95820688965582a672d_b.jpg" data-rawwidth="1990" data-rawheight="954" class="origin_image zh-lightbox-thumb" width="1990" data-original="https://pic2.zhimg.com/d233b2c3c079a95820688965582a672d_r.jpg"&gt;&lt;img src="https://pic1.zhimg.com/ddf29a3c2c11acfd83d9ba32d90bbf20_b.jpg" data-rawwidth="1908" data-rawheight="732" class="origin_image zh-lightbox-thumb" width="1908" data-original="https://pic1.zhimg.com/ddf29a3c2c11acfd83d9ba32d90bbf20_r.jpg"&gt;

 

 

1什么需要activation function
deep neural network
可以
认为是特征的多表达,这过activation function的作用是提供非线变换如果没有非线性激活函数,再多的隐层其也只是入的一个线变换线变换模型capacity是很有限的,简单的异或问题都没法解决。。
2relu相比sigmoid 或者tanh
可以参考deep learning 大牛Bengio
http://machinelearning.wustl.edu/mlpapers/paper_files/AISTATS2011_GlorotBB11.pdf
SGD
训练的角度分析,sigmoid or tanh 都会面gradient vanshing 问题是由于sigmoid函数的偏只有在-4+4有比大的,再大或者小梯度接近0
具体
实验也会发现reludnn识别像分)相比于sigmoid dnn :不需要pretraining; 更快收; 性能上也会更好一些。。



作者:tramphero
接:https://www.zhihu.com/question/29021768/answer/65576915
来源:知乎
著作
权归作者所有。业转载请联系作者得授,非商业转载请注明出

 

0 件のコメント:

コメントを投稿