非线性激活函数作用和·各类的优缺点

为什么需要非线性激活函数?

a=z 叫做线性激活函数 或 恒等激活函数 如果使用线性激活函数,那么这个模型的输出不过是你输入特征x的线性组合。神经网络只是把输入线性组合再输出

所以即使你有很多个隐含层,但是你如果使用线性激活函数或者不用激活函数,一直在做的只是计算线性激活函数,所以还不如直接去掉全部隐藏层。所以除非引入非线性,那么无法计算更有趣的函数。 只有一个地方可以使用线性激活函数,那就是回归问题。或者在输出层用也是可以的。

非线性激活函数导数 【基础知识: 对于一元二次方程 求根公式: 求最大/最小值所对应的x:x=(如果忘记的话,可以先求一元二次方程的导数,让其等于0,即可求得了)

各种非线性激活函数的优缺点: Sigmoid(左上角): 现在吴恩达几乎从来不用sigmoid激活函数了,但是吴恩达会用sigmoid的一个例外场合是进行二元分类时。 缺点: 

1、Sigmoid容易饱和,并且当输入非常大或者非常小的时候,神经元的梯度就接近于0了,从图中可以看出梯度的趋势。这就使得我们在反向传播算法中反向传播接近于0的梯度,导致最终权重基本没什么更新,我们就无法递归地学习到输入数据了。另外,你需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradient kill掉,这会导致网络变的很难学习。容易饱和这个问题叫做 “梯度饱和” ,也可以叫 “梯度弥散” 。     2、Sigmoid 的输出不是0均值的,这是我们不希望的,因为这会导致后层的神经元的输入是非0均值的信号,这会对梯度产生影响:假设后层神经元的输入都为正(e.g. x>0 elementwise in  ),那么在反向传播的过程中对w求梯度要么都为正,要么都为负(取决于整个表达式 f 的梯度)。这可能会在权重的梯度更新中引入不受欢迎的zig-zagging动态。导致有一种捆绑的效果,使得收敛缓慢。当然了,如果你是按batch去训练,那么每个batch可能得到不同的符号(正或负),那么相加一下这个问题还是可以缓解。因此,非0均值这个问题虽然会产生一些不好的影响,不过跟上面提到的 kill gradients 问题相比还是要好很多的。 Tanh(右上角):

tanh:有数据中心化的效果,让均值接近于0,而不是0.5,这实际让下一层的学习更方便点。tanh几乎在所有场合都更优越,一个例外是输出层,因为y如果真实值为0或1,那么我们希望y帽介于0和1之间,而不是-1和1之间,这时sigmoid更适合。 Tanh和sigmoid的一个共同缺点:当z很大或很小时,那么这个函数的斜率会很小,很接近于0,这样会拖慢梯度下降法。

Relu(左下角):

Relu:a = max(0,z),但是当z = 0时,导数是没有定义的,但如果编程实现,你得到的z刚好等于0.000000000000的概率很低,所以不必担心。 Relu已经变成激活函数的默认选择了,当你不知道因隐层到底该用哪个激活函数时,就可以用relu。虽然有人也会用tanh。Relu的一个缺点:当z为负时,导数等于0。但在实际中却没有什么问题。虽然对于z的一半范围来说,relu的斜率为0,但在实践中,有足够多的隐藏单元令z大于0,所以对于大多数训练样本来说还是很快的。

Leaky Relu(右下角):

Relu的另一个版本:leaky ReLu(a = 0.01*z,z),实际上比relu要好,但是实际中使用的频率却没有那么高。

线性激活函数非线性激活函数是神经网络中常用的两种类型的激活函数。 线性激活函数是指输出与输入之间存在线性关系的激活函数。常见的线性激活函数有恒等函数(identity function),即f(x) = x。线性激活函数的特点是输出的范围与输入的范围相同,不具备非线性变换的能力。因此,线性激活函数在神经网络中的作用有限,主要用于回归任务或者作为输出层的激活函数非线性激活函数是指输出与输入之间不存在线性关系的激活函数。常见的非线性激活函数有Sigmoid函数、Tanh函数、ReLU函数、Leaky ReLU函数Softmax函数等。这些非线性激活函数能够引入非线性变换,增加神经网络的表达能力,使其能够更好地适应复杂的数据模式任务。 Sigmoid函数Tanh函数是常用的非线性激活函数,它们在二分类任务的输出层模型的隐藏层中使用。Sigmoid函数将输入映射到(0,1)区间内,Tanh函数将输入映射到(-1,1)区间内。它们的优点是输出范围有限,可以用作概率估计或者对称性的处理,但是由于梯度消失的问题,在某些情况下需要避免使用。 ReLU函数是一种常见的非线性激活函数,目前在神经网络中使用最广泛。它将负输入值映射为0,将正输入值保持不变。ReLU函数的优点是计算简单,能够有效地缓解梯度消失的问题。但是它也存在一个问题,即可能导致神经元的死亡,即负输入值对应的梯度为0,导致神经元无法更新。为了解决这个问题,可以使用Leaky ReLU函数,它在负区域具有小的正斜率,可以进行反向传播。 Softmax函数是一种用于多分类任务输出层的非线性激活函数。它将多个神经元的输出映射到(0,1)区间内,可以看作是当前输出属于各个分类的概率。Softmax函数的优点是除了用于二分类还可以用于多分类,增加了区分对比度,学习效率更高。但是它也存在一个缺点,即无法为正负输入值提供一致的关系预测。 综上所述,线性激活函数适用于回归任务或者作为输出层的激活函数非线性激活函数适用于隐藏层多分类任务的输出层。具体选择哪种激活函数要根据具体的任务数据特点来决定。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值