在卷积神经网络(CNN)中,卷积层主要负责提取图像的特征,而激活函数则用于为神经网络引入非线性因素,使其能够更好地解决复杂的问题。
一、激活函数的作用
1. 非线性建模:激活函数的主要作用是提供网络的非线性建模能力。在卷积层中,卷积操作是线性的,即对每个像素点赋予一个权值进行加权求和。然而,对于实际样本来说,不一定是线性可分的。为了解决这个问题,需要引入非线性因素,使网络能够学习更复杂的函数关系。(如果只有线性变换,那无论多少层神经元,都能简化层一层神经元,那神经网络只是简单多元线性回归而已,不能拟合更加复杂的函数。举个例子,只有线性操作,那么神经网络永远无法拟合圆等复杂的曲线图形,永远只能表示超平面,无法表示曲面等。)
2. 构建稀疏矩阵:激活函数还可以构建稀疏矩阵,即稀疏性。这个特性可以去除数据中的冗余,最大可能地保留数据的特征。大多数为0的稀疏矩阵可以更有效地表示数据,从而提高模型的泛化能力。
一般情况下,卷积层中激活函数作用的位置如下:
图1 卷积层中激活函数作用的位置
二、激活函数的性质
连续的:当输入值发生较小的改变时,输出值也发生较小的改变;
可导的:在定义域中,每一处都是存在导数。
三、常用的激活函数
(一)Sigmoid函数
1. Sigmoid函数介绍
Sigmoid函数也被称为逻辑函数或S型函数,是神经网络中常用的激活函数之一,特别是在二分类问题中。它将输入值映射到0和1之间,输出值表示该输入属于某一类的概率。然而,Sigmoid函数存在梯度消失的问题,即当输入值非常大或非常小时,梯度接近于0,导致网络在训练过程中难以更新权重。
2. Sigmoid函数的数学表达式:
其中,是输入值,是输出值,其取值范围在0和1之间。其对的导数可以用自身表示:
Sigmoid函数的图形如S曲线,及其导数曲线图
图2 Sigmoid函数及其导数曲线图
3. Sigmoid函数的特点
(1)输出范围:Sigmoid函数的输出值始终在0和1之间,这使得它非常适合用于二分类问题,其中输出值可以解释为属于某一类别的概率。
(2)非线性:Sigmoid函数是一个非线性函数,它能够为神经网络引入非线性因素,使得神经网络能够学习和表示复杂的函数关系。
(3)可微性:Sigmoid函数在其定义域内是连续且可微的,这保证了在训练过程中可以使用梯度下降等优化算法来更新网络的权重。
(4)饱和性:当输入值非常大或非常小时,Sigmoid函数的输出值将非常接近于1或0,此时函数的梯度将接近于0,这可能导致梯度消失问题,影响网络的训练效果。
(5)中心化:Sigmoid函数的输出值不是以0为中心的,这可能导致在训练过程中权重更新的效率降低。
4. Sigmoid函数在神经网络中的应用
(1)输出层:在二分类问题中,Sigmoid函数常用于神经网络的输出层,将网络的输出值转换为概率值,用于判断输入样本属于某一类别的概率。
(2)隐藏层:尽管Sigmoid函数在输出层中非常有用,但在隐藏层中,由于其梯度消失问题和非零中心化的输出值,现代神经网络更倾向于使用ReLU(Rectified Linear Unit)等激活函数。
5. 不足之处
(1)梯度消失:当输入值非常大或非常小时,Sigmoid函数的梯度将接近于0,这可能导致在训练深层神经网络时梯度消失问题。为了缓解这个问题,可以使用ReLU等具有更好梯度特性的激活函数。
(2)数值稳定性:在计算Sigmoid函数时,需要注意数值稳定性问题。例如,当非常大时,直接计算可能会导致数值溢出。为了避免这个问题,可以使用一些技巧,如将表示为一个小数,或者通过数学变换来避免直接计算大数或小数。
(二)Tanh函数
1. Tanh函数介绍
Tanh函数,全称双曲正切函数(hyperbolic tangent function),是深度学习中常用的一种激活函数。Tanh函数将输入值映射到-1和1之间,具有更好的对称性。与Sigmoid函数相比,Tanh函数在训练过程中更容易收敛。但是,Tanh函数同样存在梯度消失的问题。
2. Tanh函数的数学表达式:
其中,代表自然对数的底,是输入值,是输出值,其取值范围在-1和1之间。其对的导数可以用自身表示:
Tanh函数及其导数曲线图如下:
图3 Tanh函数及其导数曲线图
3.Tanh函数特点
(1)双边性:Tanh函数在原点附近()具有对称性,即。这种对称性在某些应用场景下非常实用。
(2)饱和性:当输入值趋向正无穷或负无穷时,Tanh函数的输出趋近于1或-1,呈现饱和特征。然而,与Sigmoid函数相比,Tanh函数在输入值较大时的梯度消失问题相对较轻。
(3)导数性质:Tanh函数的导数为,其中表示双曲正割函数,即Tanh函数的倒数。Tanh函数的导数值在0到1之间,且在(x=0)处取得最大值1。
(4)中心化:Tanh函数的输出值在原点附近有一个中心点(),该点的输出为0。这使得Tanh函数具有零中心化特性,有利于消除输入数据的偏差。
4.在深度学习中的应用
(1)激活函数:Tanh函数常常作为神经网络中的激活函数使用,能够引入非线性元素,提升模型的表达力。
(2)梯度消失问题:在深度神经网络中,如果使用Sigmoid激活函数,反向传播过程中容易出现梯度消失的问题。而Tanh函数通过函数值的中心化,可以减少这个问题的发生。
(3)连续可导:Tanh函数是连续可导的,这使得在优化过程中可以使用梯度下降等基于导数的方法。
5. 与其他激活函数的比较
(1)Sigmoid函数:Sigmoid函数的输出值也在0和1之间,但它在输入值较大或较小时梯度接近于0,容易导致梯度消失问题。相比之下,Tanh函数在输入值较大时的梯度消失问题相对较轻。
(2)ReLU函数:ReLU函数在输入值大于0时保持原样输出,在输入值小于0时输出0。ReLU函数具有计算简单、梯度不会消失等优点,但在输入值小于0时会导致神经元死亡问题。与ReLU函数相比,Tanh函数在输入值小于0时仍然有输出值,避免了神经元死亡问题。
(三)ReLU函数
1. ReLU函数介绍
ReLU函数,全称线性整流函数(Rectified Linear Unit),是目前最常用的激活函数之一。它对于输入值大于0的部分保持原样输出,对于输入值小于0的部分输出0。ReLU函数具有计算简单、梯度不会消失、稀疏性等优点。但是,当输入值小于0时,ReLU函数的输出为0,这可能导致一些神经元在训练过程中永远不会被激活,即“死亡神经元”问题。
2. ReLU函数的数学表达式为:
其中,是输入值,是输出值。当输入值大于0时,ReLU函数直接输出;当输入值小于或等于0时,ReLU函数输出0。
ReLU函数及其导数曲线图如下:
图4 ReLU函数及其导数曲线图
3. ReLU函数特点
(1)非线性:尽管ReLU函数的表达式看似简单,但它实际上是非线性的,能够为神经网络引入非线性因素,从而增强模型的表达能力。
(2)稀疏性:ReLU函数在输入值小于0时输出0,这意味着它可以使神经网络中的一部分神经元处于未激活状态,从而增加模型的稀疏性。这种稀疏性有助于提升模型的泛化能力和鲁棒性。
(3)计算效率高:ReLU函数的计算非常简单,只需要进行一次比较操作和一次乘法操作(当输入值大于0时,乘法操作为乘以1,实际上可以省略),因此它的计算效率非常高。
(4)梯度稳定性:ReLU函数在正区间上的梯度为常数1,在负区间上的梯度为0。这种特性使得ReLU函数在反向传播过程中不会出现梯度消失问题,并且相比于Sigmoid函数和双曲正切函数(Tanh),它更不容易导致梯度爆炸问题。
(5)生物合理性:ReLU函数的形式与生物神经元的激活方式较为接近,能够更好地建模生物神经系统的特性。
4. 应用与优势
ReLU函数广泛应用于深度学习和神经网络中的各个任务,包括图像处理、自然语言处理、强化学习和音频处理等。其优势主要体现在以下几个方面:
(1)提升模型性能:ReLU函数能够增加神经网络的非线性表达能力,从而提升模型的性能。
(2)加速训练过程:由于ReLU函数的计算效率高,且不会出现梯度消失问题,因此它可以加速神经网络的训练过程。
(3)增强泛化能力:ReLU函数的稀疏性特性有助于提升模型的泛化能力,使其能够更好地适应未见过的数据。
5. 注意事项与改进
尽管ReLU函数具有诸多优点,但在实际应用中也需要注意以下几个问题:
(1)死亡神经元问题:当输入值持续小于0时,ReLU函数的输出将始终为0,这可能导致一部分神经元在训练过程中永远不会被激活,即“死亡神经元”问题。为了缓解这个问题,可以使用Leaky ReLU、Parametric ReLU等改进版本的ReLU函数。
(2)参数初始化:在使用ReLU函数时,需要谨慎选择神经网络的参数初始化方法,以避免在训练初期出现大量死亡神经元。
(3)学习率设置:学习率的设置对ReLU函数的训练效果也有重要影响。过高的学习率可能导致梯度爆炸问题,而过低的学习率则可能使训练过程过于缓慢。因此,需要根据具体任务和数据集的特点来设置合适的学习率。
(四)Leaky ReLU函数
1. Leaky ReLU函数介绍
Leaky ReLU函数是对ReLU函数的一种改进,被称为带泄露线性整流函数,旨在解决ReLU函数可能导致的“死亡神经元”问题。当输入值小于0时,Leaky ReLU函数允许一个很小的梯度值通过,从而避免“死亡神经元”问题。但是,Leaky ReLU函数增加了一个超参数,需要谨慎选择。
2. Leaky ReLU函数的数学表达式为:
其中,是输入值,是Leaky ReLU函数的输出值,是一个较小的常数,通常取值在0到1之间。当输入值大于0时,Leaky ReLU函数与ReLU函数一样,直接输出;当输入值小于或等于0时,Leaky ReLU函数则输出,而不是像ReLU函数那样输出0。
Leaky ReLU函数及其导数曲线图如下:
图5 Leaky ReLU函数及其导数曲线图
3. Leaky ReLU函数特点
(1)非线性:Leaky ReLU函数仍然是非线性的,能够为神经网络引入非线性因素,从而增强模型的表达能力。
(2)避免死亡神经元:由于Leaky ReLU函数在输入值小于或等于0时仍有输出(即),因此可以避免ReLU函数可能导致的“死亡神经元”问题。
(3)参数:参数是一个可调的常数,可以根据具体任务和数据集的特点进行选择。不同的值会对模型的性能产生不同的影响。
(4)计算效率:Leaky ReLU函数的计算效率与ReLU函数相当,都非常高。
4. 应用与优势
Leaky ReLU函数广泛应用于深度学习和神经网络中的各个任务,包括图像处理、自然语言处理、强化学习和音频处理等。其优势主要体现在以下几个方面:
(1)提升模型性能:由于Leaky ReLU函数能够避免“死亡神经元”问题,因此可以提升神经网络的性能。
(2)增强鲁棒性:Leaky ReLU函数通过允许输入值小于或等于0时仍有输出,增强了神经网络的鲁棒性。
(3)灵活性:参数的引入为Leaky ReLU函数提供了更大的灵活性,可以根据具体任务和数据集的特点进行调整。
5. 变种与扩展
除了标准的Leaky ReLU函数外,还有一些变种和扩展形式,如Parametric Leaky ReLU(PReLU)和Exponential Linear Unit(ELU)等。
Parametric Leaky ReLU(PReLU):PReLU函数使用了一个可学习的参数来控制输入值小于0时的输出比例,而不是像Leaky ReLU那样使用固定的值。这使得PReLU函数能够更灵活地适应不同的数据集和任务。
Exponential Linear Unit(ELU):ELU函数在输入值小于0时不是直接将输出值设定为负数,而是给出一个负指数形式,这有助于减少神经元过偏置现象,并提升模型的性能。
四、激活函数在卷积层中的应用
在卷积神经网络中,激活函数通常紧跟在卷积层之后。卷积层负责提取图像的特征,而激活函数则负责引入非线性因素,使网络能够学习更复杂的特征表示。通过堆叠多个卷积层和激活函数层,可以构建出深度卷积神经网络,用于处理各种复杂的图像识别任务。
综上所述,激活函数在卷积神经网络中起着至关重要的作用。它们为网络引入了非线性因素,提高了模型的表达能力和泛化能力。在选择激活函数时,需要根据具体任务和数据集的特点进行权衡和选择。
标签:函数,Tanh,卷积,层中,Sigmoid,ReLU,神经网络,激活,Leaky From: https://blog.csdn.net/lzm12278828/article/details/143867900