各种激活函数比较docxWord格式.docx

上传人:b****6 文档编号:18101150 上传时间:2022-12-13 格式:DOCX 页数:10 大小:240.65KB
下载 相关 举报
各种激活函数比较docxWord格式.docx_第1页
第1页 / 共10页
各种激活函数比较docxWord格式.docx_第2页
第2页 / 共10页
各种激活函数比较docxWord格式.docx_第3页
第3页 / 共10页
各种激活函数比较docxWord格式.docx_第4页
第4页 / 共10页
各种激活函数比较docxWord格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

各种激活函数比较docxWord格式.docx

《各种激活函数比较docxWord格式.docx》由会员分享,可在线阅读,更多相关《各种激活函数比较docxWord格式.docx(10页珍藏版)》请在冰豆网上搜索。

各种激活函数比较docxWord格式.docx

ActivationFunctions.

Sigmoid

Left:

Sigmoidnon-linearilysquashesrealnumberstorangebetween[0,1]Right:

Thetanhnon・linearitysquashesrealnumberstorangebetween[-1,1].

新。

•函数输出不是以0为中心的。

这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。

我们更偏向于当激活函数的输入是0时,输出也是0的函数。

产生的一个结果就是:

如果数据进入神经元的时候是正的(e.g.x>

0elementwiseinf^wTx+b),那么"

计算出的梯度也会始终都是正的。

当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。

因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的killgradients问题相比还是要好很多的。

tanh

tanh是上图中的右图,可以看出,tanh跟sigmoid还是很像的,实际上,tanh是sigmoid的变形:

tanh(炉2sigmoid(^-*

CMS

9ewFsel

101»

2026>

0M40

Epochs

与sigmoid不同的是,tanh是0均值的。

因此,实际应用中,tanh会比sigmoid更好(毕竟去粗取精了嘛\tanh函数将一个实数输入映射到卜1,1]范围内,如上图(右)所示。

当输入为0时,tanh函数输出为0,符合我们对激活函数的要求。

然而,tanh函数也存在梯度饱和问题,导致训练效率低下。

RectifiedLinearUnit(ReLU)activationfunction,whichiszerowhenx<

0andthenlinearwithslope1whenx>

0・Right:

AplotfromKrizhevskyetal.(pdf)paperindicatingthe6ximprovement!

inconvergencewiththeReLUunitcomparedtothetanhunit.

心)二/77輕0乂很显然,从图左可以看出,输入信号vO时,输出都是0,>

0的情况下,输出等于输入。

"

是二维的情况下,

使用ReLU之后的效果如下:

\\\r+6金H

相比sigmoid和tanh函数,Relu激活函数的优点在于:

•梯度不饱和。

梯度计算公式为:

l{x>

0}。

因此在反向传播过程屮,减轻了梯度弥散的问题,神经网络前几层的参数也可以很快的更新。

•计算速度快。

正向传播过程中,sigmoid和tanh函数计算激活值时需要计算指数,而Relu函数仅需要设置阈值。

如果xvO,f(x)二0,如果x>

O,f(x)=x。

加快了正向传播的计算速度。

因此,Relu激活函数可以极大地加快收敛速度,相比tanh函数,收敛速度可以加快6倍

ReLU的优点:

•Krizhevskyetal.发现使用ReLU得到的SGD(随机梯度下降)的收敛速度会比sigmoid/tanh快很多(看右图)。

有人说这是因为它是linear,而且non-saturating

•相比于sigmoid/tanh,ReLU只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。

ReLU的缺点:

当然ReLU也有缺点,就是训练的时候很”脆弱”,很容易就”die”了.什么意思呢?

举个例子:

一个非常大的梯度流过一个ReLU神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。

如果这个情况发生了,那么这个神经元的梯度就永远都会是0.

当然,如果你设置了一个合适的较小的learningrate,这个问题发生的情况其实也不会太频繁。

Leaky-ReLU.P-ReLU.R-ReLU

LeakyReLUs:

就是用来解决这个“dyingReLU”的问题的。

与ReLU不同的是:

f[^)=ax,(%<

0)

K炉x,(%>

=0)

这里的a是一个很小的常数。

这样,即修正了数据分布,又保留了一些负轴的值,使得负轴信息不会全部丢失。

关于LeakyReLU的效果,众说纷纭,没有清晰的定论。

有些人做了实验发现LeakyReLU表现的很好;

LeakyReLU/PReLU

Vi=OiXiI

I

些实验则证明并不是这样。

ParametricReLU:

对于LeakyReLU中的a,通常都是通过先验知识人工赋值的。

然而可以观察到,损失函数对a的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢?

KaimingHe的论文《DelvingDeepintoRectifiers:

SurpassingHuman-LevelPerformanceonImageNetClassification》指出,不仅可以训练,而且效果更好。

公式非常简单,反向传播至未激活前的神经元的公式就不写了,很容易就能得到°

对a的导数如下:

6yi6a^Q,(ifyi>

Q),e/se=yi

原文说使用了ParametricReLU后,最终效果比不用提高了1.03%.

RandomizedReLU:

RandomizedLeakyReLU是leakyReLU的random版本(a是random的).

它首次试在kaggle的NDSB比赛中被提出的。

核心思想就是,在训练过程中,a是从一个高斯分布5仙中随机出来的,然后再测试过程中进行修正(有点像dropout的用法)□

ifgO

ifXji<

0,

数学表示如下:

where

aji~U仏u),I<

uandE[0,1)

在测试阶段,把训练过程中所有的a〃取个平均值。

NDSB冠军的a是从"

3,8)中随机出来的。

那么,在测

试阶段,激活函数就是就是:

yip刈Rd!

看看cifar-100中的实验结果:

ReLUTrain

—ReLUVol

RReLU,【3,8]Tram—RReLU.(3,8lVai

111

4.5

4.0

225

2.0

1.5

IS

10

1.0

OS

JOC

325

RelUTrain—RelUVdl

PReUJTramPReLUVil

ReUJTrain

RdUV^I

LeakyReUJ.aa100Train

LeakyReLU.a-lOOVdl

300

Maxout

Maxout出现在ICML2013上,作者Goodfellow将maxout和dropout结合后,号称在MNIST,CIFAR-10,CIFAR-100,SVHN这4个数据上都取得了start-of-art的识别率。

Maxout公式如下:

f{^=maxjE[\yk[zij

假设"

是2维,那么有:

側=巾叭"

门x+M,i^72x+b2)

可以注意到,ReLU和LeakyReLU都是它的一个变形(比如,"

I力仁0的时候,就是ReLU).

Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。

作者从数学的角度上也证明了这个结论,即只

需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多.

XXX

所以,Maxout具有ReLU的优点(如:

计算简单,不会saturation),同时又没有ReLU的一些缺点(如:

容易Godieb不过呢,还是有一些缺点的嘛:

就是把参数double了。

还有其他一些激活函数,请看下表:

Ia*e

Plot

Equation

Derivative

Identity

/

/W=i

f'

M=1

Binarystep

牡forKO八丿1fori>

阳p

0fori0

?

fori=0

Logistic(a±

a

Softstep)

“—

/W=l+r«

f(x)=/(z)(l-/(j))

Taifl

2

/W=tanh(i)=^—5;

-1

rw=i-/m2

ArcTan

/(i)=tan"

1(i)

Rectified

LinearUnit

(ReLU)

佝J0forI<

fori>

i'

m=■

0fori<

0

1fori>

ParaietericRectifiedLinearUnit(PReLU)121

V

/_

“、Iaxfori<

0/(I)=(ifori>

rw=

afori<

ExponentialLinearUnit(EUJ)⑶

/.

“、{a(ex-1)fori<

/(I>

=|iforr>

M=<

r/(i)+qfori<

i1fori>

SoftPlus

f(i)=loge(l+eI)

Bentidentity

阳*時I44

SoftExponential

「泌业地fora<

=<

ifora=0

1^^+0fora>

\Cl

八'

丿]严forq>

Sinusoid

f(x)=sin(i)

f(J)=cos(i)

Sine

-x/

/1fori=0

他)-(学for玮0

x/0渝i=0

/(』)-(警—讐for殍。

Gaussian

:

\

J

/W=e"

l'

(i)=-2xe~z2

Howtochooseaactivationfunction?

怎么选择激活函数呢?

我觉得这种问题不可能有定论的吧,只能说是个人建议。

如果你使用ReLU,那么一定要小心设置learningrate,而且要注意不要让你的网络出现很多“dead”神经元,

如果这个问题不好解决,那么可以试试LeakyReLU、PReLU或者Maxout.

友情提醒:

最好不要用sigmoid,你可以试试tanh,不过可以预期它的效果会比不上ReLU和Maxout.

还有,通常来说,很少会把各种激活函数串起来在一个网络中使用的。

Sigmoid是常用的非线性的激活函数,它的数学形式如下:

/(A)=1/1+e-Z

正如前一节提到的,它能够把输入的连续实值“压缩”到0和1之间。

特别的,如果是非常大的负数,那么输出就是0;

如果是非常大的正数,输出就是1.

sigmoid函数曾经被使用的很多,不过近年来,用它的人越来越少了。

主要是因为它的一些缺点:

•梯度饱和。

Sigmoidssaturateandkillgradients.(saturate这个词怎么翻译?

饱和?

)sigmoid有一个非常致命的缺点,当输入非常大或者非常小的肘候(saturation),即当函数激活值接近于0或者1时,这些神经元的梯度是接近于0的,从图中可以看岀梯度的趋势。

所以,你需要尤其注意参数的初始值来尽量避免saturation的情况。

如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradientkill掉,这会导致网络变的很难学习。

在反向传播计算梯度过程中:

決)=(眇⑴)唧+1)**f(㈣,每层残差接近于°

计算出的梯度也不可避免地接近于o0这样在参数微调过程中,会引起参数弥散问题,传到前几层的梯度已经非常靠近0了,参数几乎不会再更

ReLU

近年来,ReLU变的越来越受欢迎。

它的数学表达式如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工程科技 > 城乡园林规划

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1