Sigmoid函数以及传统线性函数

Sigmoid函数以及传统线性函数

参考:https://www.jianshu.com/p/68d44a4295d1

在ReLU激活函数出现之前,神经网络训练都是勇Sigmoid作为激活函数。其中Sigmoid函数主要分为Logistic-Sigmoid和Tanh-Sigmoid,这两者被视为神经网络的核心所在。

因为Sigmoid函数具有限制性,输出数值在0~1之间,符合概率输出的定义。并且非线性的Sigmoid函数在信号的特征空间映射上,对信号的中央区的信号增益比较大,对两侧的信号增益小。从神经科学上来看,中央区酷似神经元的兴奋态,两侧区酷似神经元的抑制态,因而在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。从这点来看Sigmoid函数要比更加早期的线性激活函数(y=x),以及阶梯激活函数的效果要好上不少。

但是当神经网络层数较多的时候,Sigmoid函数在反向传播中梯度值会逐渐减小,在经过多层的反向传递之后,梯度值在传递到神经网络的头几层的时候就会变得非常小,这样的话根据训练数据的反馈来更新神经网络的参数会变得异常缓慢,甚至起不到任何作用。这种情况我们一般称之为梯度弥散(Gtadient Vanishment),而ReLU函数的出现很大一部分程度上解决了梯度弥散的问题。

近似生物神经激活函数:Softplus & ReLu

2001年,神经科学家Dayan、Abott从生物学角度,模拟出了脑神经元接受信号更精确的激活模型。

这个模型对比Sigmoid系主要变化有三点:①单侧抑制 ②相对宽阔的兴奋边界 ③稀疏激活性(重点,可以看到红框里前端状态完全没有激活)
这种模式非常类似于人脑的阈值响应机制。信号在超过某一个阈值之后,神经元才会进入兴奋和激活的状态,平时则往往处于抑制状态。ReLU可以很好的传递梯度,经过多次的反向传播,梯度依旧不会大幅度的减小,适合适应训练很深的神经网络。

Softplus虽然具有单侧异质性,但是却没用稀疏激活性。这里指出神经元编码的工作方式是具有稀疏性的,推测大脑同时被激活的神经元只有1%~4%。神经元只会对输入信号有少部分选择性响应,大量的不相关信号被屏蔽了,这样可以更有效率的提取重要的特征。

下面的参考:

https://mp.weixin.qq.com/s?__biz=MzU0NTAyNTQ1OQ==&mid=2247487619&idx=1&sn=d19b52eef236d5ffa8d64e7730820e15&chksm=fb726c5fcc05e549a3d15166078a6eed1db20b46c298fcd8832ee96fe81139181f60f7839c31&mpshare=1&scene=1&srcid=&key=04b8de3bb21a153bdf746c3180176863a98b6fdd46641f3a75e879e754c5f8d9537368d5ea95902248174fd3e2c505f017e83a82d1423469d01ccc7b7e58d7c1098c005db11b5af5edfb98c5ef157f06&ascene=1&uin=MjIzODAyMTI0MA%3D%3D&devicetype=Windows+10&version=62060833&lang=zh_CN&pass_ticket=ptf7kzpegCKbMC%2FZlS1sKZ%2BR4smD8iBMwHHu22%2BK7J1syHvbv%2BkRt%2B32F0%2FFqgiN

如果不用激活函数,每一层输出都是上层输入的线性函数,无论神经网络有多少深,输出都是输入的线性组合,这种情况就是最原始的感知机。

如果使用的话,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中。一般激活函数有如下一些性质:

  • 非线性: 

    当激活函数是线性的,两层的神经网络就可以基本上逼近所有的函数。但如果激活函数是恒等激活函数的时候,即f(x)=x,就不满足这个性质,而且如果MLP使用的是恒等激活函数,那么其实整个网络跟单层神经网络是等价的;

  • 可微性: 
    当优化方法是基于梯度的时候,就体现了该性质;

  • 单调性: 
    当激活函数是单调的时候,单层网络能够保证是凸函数;

  • f(x)≈x: 
    当激活函数满足这个性质的时候,如果参数的初始化是随机的较小值,那么神经网络的训练将会很高效;如果不满足这个性质,那么就需要详细地去设置初始值;

  • 输出值的范围: 
    当激活函数输出值是有限的时候,基于梯度的优化方法会更加稳定,因为特征的表示受有限权值的影响更显著;当激活函数的输出是无限的时候,模型的训练会更加高效,不过在这种情况小,一般需要更小的Learning Rate。

那接下来,我们就开始讲讲激活函数。

 

ReLU

今天主要说的就是ReLU激活函数,其全名叫修正线性单元(Rectified linear unit)。

f(x)=max(0,x)

优点: 
使用 ReLU得到的SGD的收敛速度会比 sigmoid/tanh 快。这是因为它是linear,而且ReLU只需要一个阈值就可以得到激活值,不用去计算复杂的运算。

缺点: 

训练过程该函数不适应较大梯度输入,因为在参数更新以后,ReLU的神经元不会再有激活的功能,导致梯度永远都是零。

细说ReLU

 

 

上图就是ReLU的可视化图,其实ReLU还是可以将其归为线性函数,如果更加准确的话,那就是分段线性函数。如果输入的值小于等于0的时候,输出全部给予0值,而大于0输入,就按照正常线性处理。

该处理形式被称为单侧抑制机制,这种机制可就厉害啦!

  • 第一,采用sigmoid、Tanh等激活函数时,计算激活函数时计算量教大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多;

  • 第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练;

  • 第三,ReLu会使一部分神经元的输出为0,这样就使网络稀疏,且减少了参数的相互依存关系,缓解了过拟合问题的发生。

为啥ReLU的激活函数形式要这样书写,不可以镜面反转之类的吗?不又成新的一种激活函数?

其实很简单,这里激活函数主要核心是单侧抑制,所以不管你是在哪个象限内进行抑制操作,最后目的都是一样。无论是镜面反转还是180度翻转,最终神经元的输出也只是相当于加上了一个常数项系数,并不影响模型的训练结果。

ReLU激活函数还有一大好处就是稀疏了参数,这个作用对于深度网络来说就是神来之笔。稀疏有何作用呢?接下来我引用偏执的眸一段比如,简单太形象的解释了这个问题。

?

当看名侦探柯南的时候,我们可以根据故事情节进行思考和推理,这时用到的是我们的大脑左半球;而当看蒙面唱将时,我们可以跟着歌手一起哼唱,这时用到的则是我们的右半球。左半球侧重理性思维,而右半球侧重感性思维。也就是说,当我们在进行运算或者欣赏时,都会有一部分神经元处于激活或是抑制状态,可以说是各司其职。再比如,生病了去医院看病,检查报告里面上百项指标,但跟病情相关的通常只有那么几个。与之类似,当训练一个深度分类模型的时候,和目标相关的特征往往也就那么几个,因此通过ReLU实现稀疏后的模型能够更好地挖掘相关特征,拟合训练数据。

实验比较

本次试验在playground界面进行实验,想必很多同学对这个小平台有很深入的理解。以2分类解释:

第一种情况:使用Sigmoid函数,进行训练:

当运行了部分时间后,发现分界面依然模糊不清,还要继续训练,如下图:

当运行了528Epoch,才全部分开,如下图:

第二种情况:使用Tanh函数,进行训练:

第三种情况:使用ReLU函数,进行训练:

综上,可以明显发现ReLU效果最好而且速度最快。

  • 就会有同学问:为什么通常Relu比sigmoid和tanh强,有什么不同?

其实之前已经回答了,主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征;而提出sigmoid和tanh,主要是因为它们全程可导;还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。ReLU更容易学习优化。因为其分段线性性质,导致其前传,后传,求导都是分段线性。而传统的sigmoid函数,由于两端饱和,在传播过程中容易丢弃信息。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI算法网奇

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值