【3】激活函数

1、什么是激活函数?

在神经元中,输入input,通过加权求和之后再通过了一个函数的变换处理,这个函数就是激活函数(Activition Function)


【3】激活函数_第1张图片



2、激活函数的作用?

模型的表达能力不够,引入激活函数是为了添加非线性因素。

不添加激活函数的时候,无论多少层网络输出都是线性方程

【3】激活函数_第2张图片


添加了激活函数之后就可以解决类似下图这样一些线性不可分的情况:

【3】激活函数_第3张图片


通用近似定理:单隐层神经网络只要隐层神经元的个数足够多,可以以任何精度逼近任何连续函数。

所以使用激活函数就能将神经网络运用到很多其他非线性模型中去。



3、常见的激活函数?

(1)sigmoid 函数

        

【3】激活函数_第4张图片

特点:可以将输出压缩到0-1的范围;总是正数;有界;严格递增

缺点:会出现梯度消失(软饱和性),这个函数的导数是g(a)(1-g(a)),最大值是1/4,所以每一层向前传递都会至少3/4的梯度损失。神经元的活跃度在0和1处饱和,它的梯度在这些地方接近于0,就会很大程度上干掉梯度,使得几乎没有信号经过这个神经元以及所有间接经过此处的数据。

【3】激活函数_第5张图片


(2)ReLU 函数

ReLU激活函数,修正线性激活函数,用于隐层神经元输出

    

【3】激活函数_第6张图片


特点:非负;将神经元变得稀疏;没上界;严格递增

优点:

a. 得到的SGD收敛速度比sigmoid/tanh函数要快;

b. 当 x < 0, 硬饱和;当 x > 0,不存在饱和问题,保持梯度不衰减,从而缓解梯度消失问题,这让我们能够直接以监督的方式训练深度神经网络,而无需依赖无监督的逐层预训练;

c. Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生。

缺点:

a. 随着训练的推进,部分输入会落入硬饱和区,导致对应权重无法更新。这种现象被称为“神经元死亡”,会影响网络的收敛性。(大的梯度流经过ReLU单元时可能导致神经不会在以后任何数据节点再被激活)

b. ReLU的输出不是zero-centered,与sigmoid类似,ReLU的输出均值也大于0,偏移现象和神经元死亡会共同影响网络的收敛性。


(3)Tanh函数



【3】激活函数_第7张图片


特点可以将输出压缩到-1~1的范围;有界;严格递增

优点:

a. tanh在特征相差明显时的效果会很好,在循环过程中会不断扩大特征效果。

b. tanh 是 0均值,效果好于sigmoid

缺点:软饱和,仍然会出现梯度消失


(4)Swish 函数
Swish是Google在10月16号提出的一种新型激活函数

【3】激活函数_第8张图片

 f(x) = x · sigmoid(x)

特点:无上界有下界、平滑、非单调。这些使 Swish 优与其他激活函数。

4、如何选择激活函数?

根据具体网络具体选择,如果你使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让你的网络出现很多 “dead” 神经元。最好不要用 sigmoid,你可以试试 tanh,不过可以预期它的效果会比不上 ReLU。通常来说,很少会把各种激活函数串起来在一个网络中使用。


你可能感兴趣的:(机器学习,每天一道机器学习题,机器学习,人工智能,神经网络,激活函数)