常用激活函数 常用激活函数及其导数

2025-04-13 23:28 - 立有生活网

激活函数 sigmoid、tanh、relu

激活函数(activation functions)的目标是,将神经网络非线性化。激活函数是连续的(continuous),且可导的(differential)。

常用激活函数 常用激活函数及其导数常用激活函数 常用激活函数及其导数


常用激活函数 常用激活函数及其导数


常用激活函数 常用激活函数及其导数


常见的激活函数:sigmoid,tanh,relu。

sigmoid是平滑(oothened)的阶梯函数(step function),可导(differentiable)。sigmoid可以将任何值转换为0~1概率,用于二分类。细节可以 参考 。

公式:

导数:

导数2:

图(红色原函数,蓝色导函数):

当使用sigmoid作为激活函数时,随着神经网络隐含层(hidden layer)层数的增加,训练误反而加大。表现为:

这种现象就是梯度弥散(vanishing gradient)。而另一种情况,梯度爆炸(exploding gradient),则是前面层的梯度,通过训练变大,导致后面层的梯度,以指数级增大。

由于sigmoid的导数值小于1/4,x变化的速率要快于y变化的速率,随着层数的增加,连续不断执行sigmoid函数,就会导致,前面更新较大的幅度,后面更新较小的幅度,因此,网络在学习过程中,更倾向于,更新后面(靠近输出层)的参数,而不是前面的参数(靠近输入层)。

sigmoid缺点:

参考1 、 参考2

tanh,即双曲正切(hyperbolic tangent),类似于幅度增大sigmoid,将输入值转换为-1至1之间。tanh的导数取值范围在0至1之间,优于sigmoid的0至1/4,在一定程度上,减轻了梯度消失的问题。tanh的输出和输入能够保持非线性单调上升和下降关系,符合BP(back propagation)网络的梯度求解,容错性好,有界。

公式:

导数:

图(红色原函数,蓝色导函数):

sigmoid和tanh:

参考1 、 参考2 、 参考3

relu,即Rectified Linear Unit,整流线性单元,激活部分神经元,增加稀疏性,当x小于0时,输出值为0,当x大于0时,输出值为x.

公式:

图:

导数:

图:

relu对比于sigmoid:

relu的缺点:

在训练的时候,ReLU单元比较脆弱并且可能“掉”。举例来说,当一个很大的梯度,流过ReLU的神经元的时候,可能会导致梯度更新到一种特别的状态,在这种状态下神经元将无法被其他任何数据点再次激活。如果这种情况发生,那么从此所以流过这个神经元的梯度将都变成0。也就是说,这个ReLU单元在训练中将不可逆转的亡,因为这导致了数据多样化的丢失。

如果学习率设置得太高,可能会发现网络中40%的神经元都会掉(在整个训练集中这些神经元都不会被激活)。通过合理设置学习率,这种情况的发生概率会降低。

在神经网络中,隐含层的激活函数,选择ReLU。

关于RNN中为什么选择tanh,而不是relu, 参考 。

一.激活函数(activation functions)

激活函数通常有如下一些性质:

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

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

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

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

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

通过上面的介绍,我们对激活函数大体上有了一个认识。

联系之前学习过的机器学习理论,激活函数和核函数的作用简直是异曲同工!都是在不改变线性模型的条件下,将输出结果转变为非线性。

sigmod函数、tanh函数、修正线性单元ReLU函数、Leaky ReLU、参数化ReLU、随机化ReLU、指数化线性单元ELU函数和PReLU函数。

具体介绍参考如下文章:

激活函数又称为“”非线性映射函数“,是深度卷积神经网络不可或缺的模块。

直观上,激活函数模仿了生物神经元特性,接受一组输入信号并产生输出。

(1)激活函数对深度网络模型引入非线性;

(2)Sigmoid型函数是早的激活函数之一,但它和tanh(x)型函数一样,会产生梯度饱和现象,故实际工程中很少使用;

(3)建议使用目前常用的ReLU函数,但需注意模型参数初始化和学习率的设定;

(4)其他几种ReLU函数实际性能并无优劣,应结合实际场景具体讨论。

激活函数总结

因为神经网络是线性组合,激活函数给神经元引入了非线性因素,使得神经网络可以任意逼近任何非线性函数,这样神经网络就可以应用到众多的非线性模型中.好用的激活函数具有可求且方便求导,单调平滑.下面简单介绍一下常用的激活函数:

1. sigmoid函数 :常用于LR中,也可以用于神经网络一层(一分类问题,是该类,和其他).函数公式和图表如下图:

如图2所示,它能够把输入的连续实值变换为(0,1)之间的输出,特别的,如果是非常大的负数,那么输出就是0,如果是非常大的正数,输出就是1. sigmoid曾经是主流的激活函数,但是由于一些缺陷,导致现在不主流了...它的缺点有:

1) 由于sigmoid导数的性质(如图3),在神经网络进行反向传播时,会发生梯度消失(权重初始值在[0,1]内)和梯度爆炸(权重初始值在[1,+∞]).

2) 其解析式中含有幂运算,计算机求解时相对来讲比较耗时,对于规模比较大的深度网络,这会较大地增加训练时间.

3) sigmoid的输出不是0均值的,这会导致后一层的神经元将得到上一层输出的非0均值的信号作为输入, 产生的一个结果就是:如果数据进入神经元的时候是正的,那么计算出的梯度也会始终都是正的.

2. tanh函数 :tanh函数是拉伸后的sigmoid,它弥补了sigmoid的缺点3,tanh函数公式和曲线如下:

它的值域变成了(-1,1),均值从sigmoid的0.5,变成了0.从而解决sigmoid的缺点3输出均值不为0的问题.从图4可以看出,在0附近曲线的倾斜更为陡峭,所以它的导数的曲线是比图3更高更细一些.

它的优点是解决了sigmoid的输出均值不为0的问题,还有就是比sigmoid的收敛更快一些.

它的缺点是还没有解决sigmoid的问题1,梯度消失和梯度爆炸的问题.

3. ReLU函数 :ReLU函数训练速度比tanh快6倍,是目前使用广泛的激活函数.当输入值小于零时,输出值为零.当输入值大于等于零时,输出值等于输入值.公式和曲线如下:

它的优点是训练速度快(因为线性),同时当输入为正数时,不会造成梯度爆炸.

它的缺点是ReLU所在的神经元在训练的过程中可能会随机失活,如果learning rate很大,那么很有可能网络中的40%的神经元都”dead”了.而且它的输出也不是均值为0.

4. LeakyReLU & PReLU函数 :这两个激活函数类似,都是ReLU的改良版,目的是为了避免出现神经单元失活的问题.公式如下:

其中LeakyReLU将α的值设为0.001,而PReLU是将α当做参数一起参与到模型训练中去学习.这样函数的输出下界不为0,从而也不会有神经元失活的现象.

5. ELU函数 (指数线性单元):它解决了ReLU的两个问题,一个是失活,一个是均值不为0的问题.

6. softmax函数 :常用于神经网络的一层(多分类),是sigmoid函数在多分类问题上的推广.公式如下:

它的值域是[0,1],输出是概率值,所以加和为1.用指数的形式是为了使大的值更大,同时也为了求导.

1.尽量不要使用sigmoid和tanh函数(梯度消失和爆炸),尽量使用ReLU及其变体.

2.使用ReLU时,注意设置小的learning rate.

3.尽量使用0均值的激活函数.

激活函数

常见激活函数及其导数:

【注】Sigmoid 型函数是指一类 S 型曲线函数,为两端饱和函数。常用的 Sigmoid 型函数有Logistic函数和Tanh函数。

Logistic 函数和 Tanh 函数都是 Sigmoid 函数,具有饱和性,但计算开销较大,且这两个函数在中间近似线性,在两端近似为常量,故可以利用分段函数来近似。

softplus 函数常用来产生正态分布中的 和 参数。

【注】softplus 函数是正部函数的平滑版本。

Softmax 函数是 Logistic Sigmoid 函数的一种推广,Logistic Sigmoid 常用用于二分类,Softmax 可以用于多分类。

【注】在实际使用中,为了避免上述缺点,常常采用几种扩展的 ReLU 函数。

带泄漏的 ReLU 在输入 时,保持一个很小的梯度 ,这样当神经元非激活时也能有一个非零的梯度可以更新参数, 避免永远不能被激活。带泄漏的 ReLU 定义如下: 其中, 是一个很小的常数(比如 0.01)。

带参数的 ReLU 引入一个可学习的参数,不同神经元可以有不同的参数。对于第 个神经元,其 PReLU 定义如下: 其中, 为 时函数的斜率。

ELU 是一个近似的零中心化的非线性函数,其定义如下: 其中, 是一个超参数,决定 时的饱和曲线,并调整输出均值在 0 附近。

Swish 函数是一种自门控激活函数,其定义如下: 其中, 为 Logistic 函数, 为可学习的参数(或一个固定的超参数)。

GELU 函数也是一种通过门控机制来调整其输出值的激活函数,和 Swish 函数类似,其定义如下: 其中, 是高斯分布 的累积分布函数,其中 为超参数(一般设为标准高斯分布)。

Maxout 单元也是一种分段线性函数,Sigmoid 型函数、ReLU 等激活函数的输入是神经元的净输入 ,是一个标量。而 Maxout 单元的输入是上一层神经元的全部原始输出, 是一个向量 。

Maxout 单元的非线性函数定义如下:

【注】Maxout 单元不单是净输入到输出之间的非线性映射,而是整体学习输入到输出之间的非线性映射关系。

激活函数与损失函数

线性模型的表达能力不够,激活函数增加神经网络模型的非线性,提升神经网络模型表达能力(数据往往线性不可分 )。

(1)sigmoid函数:

sigmoid函数(Logistic 函数),隐层神经元输出,取值范围(0,1),可以将一个实数映射到(0,1)的区间,可以做二分类。

缺点:

(3)softmax函数:

多分类神经网络输出:

(4)Leaky ReLU函数(PReLU):

(4)ELU函数:

(4)MaxOut函数:

Maxout是深度学习网络中一层网络,同池化层、卷积层,可以把maxout 看成网络的激活函数层,设网络某一层的输入特征向量为:X=(x1,x2,……xd),输入是d个神经元。Maxout隐藏层每个神经元的计算公式如下:

其中,C表示代价,x表示样本,y表示实际值,a表示输出值,n表示样本的总数。

一个样本为例:

梯度下降算法:

不改变激活函数,二次代价函数改为交叉熵代价函数:

x表示样本,n表示样本的总数。计算参数w的梯度:

b的梯度:

龙岗哪里有小龙虾养殖 深圳龙岗龙虾店

关于龙岗哪里有小龙虾养殖,深圳龙岗龙虾店这个很多人还不知道,今天小乐来为大家解答以上的问题,现在让我们一起来看看吧! 龙岗哪里有小龙虾养殖 深圳龙岗龙虾店 龙岗哪里有小龙虾养殖···

脆肉草鱼的养殖方法_脆肉草鱼的养殖方法和技

怎么不草鱼养成脆肉鲩? 脆肉鲩其实就是草鱼,只是通过特殊的饲养方式,使其肉质有别于普通草鱼。它跟鹅肥肝不多,都是人类自私,残忍的杰作。要想了解你的问题,就让我们先了解一下脆肉···

养殖业好管理的动物 养殖什么好管理

獾猪价格多少钱一只?獾猪养殖前景及优势分析 以地面或者网上平养每平方米30只左右为宜,方可以保证舍内空气的整体流动。 近些年来,农村的经济发展迅速,让很多在外谋生的打工者都看到了···