博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
激活函数
阅读量:5147 次
发布时间:2019-06-13

本文共 3303 字,大约阅读时间需要 11 分钟。

1.激活函数的性质:

  • 非线性: 当激活函数是线性的时候,一个两层的神经网络就可以逼近基本上所有的函数了。但是,如果激活函数是恒等激活函数的时候(即f(x)=x),就不满足这个性质了,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的。
  • 可微性: 当优化方法是基于梯度的时候,这个性质是必须的。
  • 单调性: 当激活函数是单调的时候,单层网络能够保证是凸函数。
  • f(x)x: 当激活函数满足这个性质的时候,如果参数的初始化是random的很小的值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要很用心的去设置初始值。
  • 输出值的范围: 当激活函数的输出是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况下,一般需要更小的learning rate。

2.激活函数

(1)Sigmoid

此处输入图片的描述

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

f(x)=1/(1+ex)

它能够把输入的连续实值“压缩”到0和1之间。 特别的,如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1。

sigmoid 函数曾经被使用的很多,不过近年来,用它的人越来越少了。主要是因为它的一些 缺点:

  • Sigmoids saturate and kill gradients。sigmoid 有一个非常致命的缺点,当输入非常大或者非常小的时候(saturation),这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。所以,需要注意参数的初始值来尽量避免saturation的情况。如果初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。
  • Sigmoid 的 output 不是0均值。这是不可取的,因为这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入。 产生的一个结果就是:如果数据进入神经元的时候是正的(e.g. x>0 elementwise in f=wTx+b),那么 w 计算出的梯度也会始终都是正的。 当然了,如果你是按batch去训练,那么那个batch可能得到不同的信号,所以这个问题还是可以缓解一下的。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的

(2)tanh

tanh 是sigmoid的变形,跟sigmoid很像: 

tanh(x)=2sigmoid(2x)1

与 sigmoid 不同的是,tanh 是0均值的。因此,实际应用中,tanh 会比 sigmoid 更好。

(3)ReLU

ReLU(Rectified Linear Unit,修正线性单元),作为激活函数被广泛应用于各种深度神经网络中。激活函数层ReLU Layer原理很简单,就是实现了对输入数据的非负处理,将小于零的数据进行了截断。

此处输入图片的描述

ReLU激活函数为

f(x)=max(0,x)

输入信号<0时,输出都是0,>0 的情况下,输出等于输入。

W 是二维的情况下,使用ReLU之后的效果如下:

此处输入图片的描述

ReLU 的优点:

  • 使用 ReLU 得到的SGD的收敛速度会比 sigmoid/tanh 快很多(右图)。有人说这是因为它是linear,而且 non-saturating。
  • 相比于 sigmoid/tanh,ReLU 只需要一个阈值就可以得到激活值,而不用去算一大堆复杂的运算。

ReLU 的缺点: 

  • ReLU 的缺点是训练的时候很”脆弱”,很容易就”die”了。(举个例子:一个非常大的梯度流过一个 ReLU 神经元,更新过参数之后,这个神经元再也不会对任何数据有激活现象了。)如果这个情况发生了,那么这个神经元的梯度就永远都会是0。实际操作中,如果learning rate 很大,那么很有可能你网络中的40%的神经元都”dead”了。 当然,如果设置了一个合适的较小的learning rate,这个问题发生的情况其实也不会太频繁。

(4)Leaky-ReLU、P-ReLU、R-ReLU

LeakyReLU是用来解决 “dying ReLU” 的问题的。与 ReLU 不同的是:

LeakyReLU是ReLU的变体f(x)=max(0,x)+negative_slope×min(0,x),其中,negative_slope是一个小的非零数。

f(x)=αx(x<0) 

f(x)=x(x>=0)

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

此处输入图片的描述

关于LeakyReLU 的效果,众说纷纭,没有清晰的定论。有些人做了实验发现 LeakyReLU 表现的很好;有些实验则证明并不是这样。


此处输入图片的描述

PReLU(Parametric ReLU): 对于 LeakyReLU 中的α,通常都是通过先验知识人工赋值的。 

然而可以观察到,损失函数对α的导数我们是可以求得的,可不可以将它作为一个参数进行训练呢? 
Kaiming He的论文《Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification》指出,不仅可以训练,而且效果更好。

α的导数如下:

δyi / δα=0(if yi>0)else=yi

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

RReLU(Randomized ReLU): 

Randomized Leaky ReLU 是 leaky ReLU 的random 版本 (α 是random的)。它首次试在 kaggle 的NDSB 比赛中被提出的。核心思想就是,在训练过程中,α 是从一个高斯分布 U(l,u) 中 随机出来的,然后再测试过程中进行修正(有点像dropout的用法)。

数学表示如下:

此处输入图片的描述

在测试阶段,把训练过程中所有的 αij 取个平均值。NDSB 冠军的 α 是从 U(3,8) 中随机出来的。那么,在测试阶段,激活函数就是就是: 

yij=xij / ((l+u)/2)

(5)Maxout

此处输入图片的描述

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

Maxout 公式如下: 

fi(x)=max zij ,j[1,k

假设 w 是2维的,那么有: f(x)=max(wT1x+b1,wT2x+b2) 

可以注意到,ReLU 和 Leaky ReLU 都是它的一个变形(比如:w1,b1=0 的时候,就是 ReLU)。

Maxout的拟合能力是非常强的,它可以拟合任意的的凸函数。作者从数学的角度上也证明了这个结论,即只需2个maxout节点就可以拟合任意的凸函数了(相减),前提是”隐隐含层”节点的个数可以任意多.

此处输入图片的描述

所以,Maxout 具有 ReLU 的优点(如:计算简单,不会 saturation),同时又没有 ReLU 的一些缺点 (如:容易 go die)。Maxout的缺点是把参数double了。

3.激活函数的选择

如果使用 ReLU,那么一定要小心设置 learning rate,而且要注意不要让网络出现很多 “dead” 神经元,如果这个问题不好解决,那么可以试试 Leaky ReLU、PReLU 或者 Maxout。

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

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

转载于:https://www.cnblogs.com/go-go/p/7602372.html

你可能感兴趣的文章
场和帧的 关系(转)
查看>>
verilog 有符号数(2转)
查看>>
JS命名空间、对象封装
查看>>
自定义HttpFilter模块完善
查看>>
编码上的小改进
查看>>
Conda常见命令
查看>>
【动态规划】Codeforces 706C Hard problem
查看>>
1.4.1 Arithmetic Progressions
查看>>
React Native安装步骤
查看>>
数据转换服务-文本抽出技术
查看>>
GPS导航仪常见术语解释
查看>>
实验七
查看>>
HDU-2028
查看>>
Tomcat支持多少并发
查看>>
远程桌面工具有哪些?
查看>>
POCO 是什么?
查看>>
bzoj 1877 最小费用流
查看>>
UVa10082
查看>>
jQuery读取JSON总结
查看>>
World Top 5 Gold Processing Companies Two
查看>>