ReLU Sigmoid and Tanh

2024-06-01 10:58
文章标签 sigmoid relu tanh

本文主要是介绍ReLU Sigmoid and Tanh,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

ReLU 激活函数:

ReLu使得网络可以自行引入稀疏性,在没做预训练情况下,以ReLu为激活的网络性能优于其它激活函数。
数学表达式: y=max(0,x)

Sigmoid 激活函数:

sigmoid 激活函数在神经网络学习方面,可以将重点特征推向中央区,将非重点特征推向两侧区。
数学表达式(正切函数): y=(1+exp(x))1

导数:f(z)' = f(z)(1 − f(z))


Tanh 激活函数:

Tanh 激活函数使得输出与输入的关系能保持非线性单调上升和下降关系,比sigmoid 函数延迟了饱和期,对神经网路的容错性好。

数学表达式(双曲正切函数): y=exp(x)exp(x)exp(x)+exp(x)

导数:f(z)' = 1 − (f(z))2

为什么通常Relu比sigmoid和tanh强,有什么不同?
1、主要是因为它们gradient特性不同。sigmoid和tanh的gradient在饱和区域非常平缓,接近于0,很容易造成vanishing gradient的问题,减缓收敛速度。vanishing gradient在网络层数多的时候尤其明显,是加深网络结构的主要障碍之一。相反,Relu的gradient大多数情况下是常数,有助于解决深层网络的收敛问题。

2、Relu的另一个优势是在生物上的合理性,它是单边的,相比sigmoid和tanh,更符合生物神经元的特征。

3、而提出sigmoid和tanh,主要是因为它们全程可导。

4、还有表达区间问题,sigmoid和tanh区间是0到1,或着-1到1,在表达上,尤其是输出层的表达上有优势。

为什么引入非线性激励函数?

如果不用激励函数(其实相当于激励函数是f(x) = x),在这种情况下你每一层输出都是上层输入的线性函数,很容易验证,无论你神经网络有多少层,输出都是输入的线性组合,与没有隐藏层效果相当,这种情况就是最原始的感知机(Perceptron)了。
正因为上面的原因,我们决定引入非线性函数作为激励函数,这样深层神经网络就有意义了(不再是输入的线性组合,可以逼近任意函数)。最早的想法是sigmoid函数或者tanh函数,输出有界,很容易充当下一层输入(以及一些人的生物解释)。

为什么引入Relu呢?


第一,采用sigmoid等函数,计算激活函数时(指数运算),计算量大,反向传播求误差梯度时,求导涉及除法,计算量相对大,而采用Relu激活函数,整个过程的计算量节省很多。
第二,对于深层网络,sigmoid函数反向传播时,很容易就会出现梯度消失的情况(在sigmoid接近饱和区时,变换太缓慢,导数趋于0,这种情况会造成信息丢失),从而无法完成深层网络的训练。
第三,Relu会使一部分神经元的输出为0,这样就造成了网络的稀疏性,并且减少了参数的相互依存关系,缓解了过拟合问题的发生(以及一些人的生物解释)。


当然现在也有一些对relu的改进,比如prelu,random relu等,在不同的数据集上会有一些训练速度上或者准确率上的改进。
现在主流的做法,会在做完relu之后,加一步batch normalization,尽可能保证每一层网络的输入具有相同的分布[。而最新的paper,他们在加入bypass connection之后,发现改变batch normalization的位置会有更好的效果。


激活函数具备的性质

激活函数的主要作用是提供网络的非线性建模能力。如果没有激活函数,那么该网络仅能够表达线性映射,此时即便有再多的隐藏层,其整个网络跟单层神经网络也是等价的。因此也可以认为,只有加入了激活函数之后,深度神经网络才具备了分层的非线性映射学习能力。 那么激活函数应该具有什么样的性质呢?

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

可微性: 当优化方法是基于梯度的时候,这个性质是必须的。

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

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

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

这篇关于ReLU Sigmoid and Tanh的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1020811

相关文章

Caffe Prototxt 激活层系列:TanH Layer

TanH Layer 是DL中非线性激活的一种,在深层CNN中,中间层用得比较少,容易造成梯度消失(当然不是绝对不用);在GAN或一些网络的输出层常用到 首先我们先看一下 TanHParameter message TanHParameter {enum Engine {DEFAULT = 0;CAFFE = 1;CUDNN = 2;}optional Engine engine = 1 [d

Caffe Prototxt 激活层系列:Sigmoid Layer

Sigmoid Layer 是DL中非线性激活的一种,在深层CNN中,中间层用得比较少,容易造成梯度消失(当然不是绝对不用);在GAN或一些网络的输出层常用到 首先我们先看一下 SigmoidParameter message SigmoidParameter {enum Engine {DEFAULT = 0;CAFFE = 1;CUDNN = 2;}optional Engine engi

Caffe Prototxt 激活层系列:ReLU Layer

ReLU Layer 是DL中非线性激活的一种,常常在卷积、归一化层后面(当然这也不是一定的) 首先我们先看一下 ReLUParameter // Message that stores parameters used by ReLULayermessage ReLUParameter {// Allow non-zero slope for negative inputs to speed

torchvision笔记 torchvision.ops.sigmoid_focal_loss

理论部分:机器学习笔记:focal loss-CSDN博客 torchvision.ops.sigmoid_focal_loss(inputs: Tensor, targets: Tensor, alpha: float = 0.25, gamma: float = 2, reduction: str = 'none') inputs每个样本的预测值targets 与 inputs 形状相同

个人笔记--python用tanh画圆形,正方形,长方形(epsilon界面宽度)

用tanh函数画图 圆形 import numpy as npimport matplotlib.pyplot as plt# 创建一个二维网格xx = np.linspace(-1, 1, 1000)yy = np.linspace(-1, 1, 1000)x_i, y_i = np.meshgrid(xx, yy)# 圆的半径和中心r = 0.4center_x, cent

matlab画sigmoid函数和其一阶倒数

最近在做神经网络CNN的仿真,发现matlab中竟然没有直接对激活函数sigmoid的实现, 其实也是非常简单,但是由于matlab不是很常用,于是乎就有了这个,我估计很多网友都会遇到,写这个是为了方便大家吧。 x=-10:2:10;y=1./(1+exp(-x));plot(x,y); 一定要用点除‘./’,因为是矩阵运算,所以要把纬度保持一致。 运行结果如下: 该sigmoi

ReLU Sigmoid and Tanh(2)

Sigmoid 它能够把输入的连续实值“压缩”到0和1之间。如果是非常大的负数,那么输出就是0;如果是非常大的正数,输出就是1. 缺点: 当输入非常大或者非常小的时候,这些神经元的梯度是接近于0的,从图中可以看出梯度的趋势。所以,需要尤其注意参数的初始值来尽量避免saturation的情况。如果你的初始值很大的话,大部分神经元可能都会处在saturation的状态而把gradientkill

(2024,基于熵的激活函数动态优化,具有边界条件的最差激活函数,修正正则化 ReLU)寻找更优激活函数

A Method on Searching Better Activation Functions 公众号:EDPJ(进 Q 交流群:922230617 或加 VX:CV_EDPJ 进 V 交流群) 目录 0. 摘要 3. 动机 4. 方法论 4.1 问题设定 4.1.1 贝叶斯错误率和信息熵 4.1.2 激活函数和信息熵 4.2 具有边界条件的最差激活函数 (WAFBC)

关于sigmoid与binary_crossentropy,以及softmax与categorical_crossentropy的关系,以及各损失函数的定义。

1,用sigmoid作为激活函数,为什么往往损失函数选用binary_crossentropy 参考地址:https://blog.csdn.net/wtq1993/article/details/51741471 2,softmax与categorical_crossentropy的关系,以及sigmoid与bianry_crossentropy的关系。 参考地址:https://www.

【激活函数--下】非线性函数与ReLU函数

文章目录 一、非线性函数在神经网络中的重要性二、ReLU函数介绍及其实现2.1 ReLU函数概述2.2 ReLU函数的Python实现及可视化 一、非线性函数在神经网络中的重要性 在神经网络中,激活函数的选择对于网络的性能和能力至关重要。阶跃函数和Sigmoid函数除了是激活函数的具体实例外,它们还有一个共同的特性——非线性。这两种函数虽然在形式上有所不同,但都不是线性的,