
admin
2025-09-27 17:47:55
目录
前言
1、激活函数的定义与作用
2、激活函数的性质
二、常见的激活函数
2.1 Sigmoid函数:
1. 作用
2. 优点
3. 缺点
4. 数学公式
5.Sigmoid函数实现及可视化图像
2.2 Tanh函数
1. 函数定义
2.优点
3.缺点
4.Tanh函数实现及可视化图像
2.3ReLU 函数 :
1.函数定义
2.优点
3.缺点
4.ReLU函数图像及可视化
2.4 Leaky ReLU函数
1.函数定义
2.优点
3.缺点
4.函数图像及可视化
2.5 PReLU函数
1.函数定义
2.优点
3.缺点
4.函数图像及可视化
2.6 ELU函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.7 SELU函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.8 Swish函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.9 Mish函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.10 Softmax函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.11 GELU函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
2.12 Maxout函数
1.函数定义
2.优点
3.缺点
4.函数图像及其可视化
总结
博主介绍:✌专注于前后端、机器学习、人工智能应用领域开发的优质创作者、秉着互联网精神开源贡献精神,答疑解惑、坚持优质作品共享。本人是掘金/腾讯云/阿里云等平台优质作者、擅长前后端项目开发和毕业项目实战,深受全网粉丝喜爱与支持✌有需要可以联系作者我哦!
🍅文末三连哦🍅
👇🏻 精彩专栏推荐订阅👇🏻 不然下次找不到哟
前言
深度学习中的激活函数是人工神经网络中非常重要的组成部分,它们负责将神经元的输入映射到输出端。激活函数在人工神经网络模型学习、理解复杂和非线性函数时起着关键作用,它们将非线性特性引入网络中。下面,我将详细讲解激活函数的定义、作用、常见的激活函数及其优缺点。
1、激活函数的定义与作用
激活函数(Activation Function)是在人工神经网络的神经元上运行的函数,它的主要作用是对神经元的输出进行缩放或转换,使其具备非线性特性。这种非线性特性对于神经网络来说至关重要,因为它能够帮助网络学习和表示复杂的数据模式。此外,激活函数还能增强网络关注的特征,减弱不关注的特征,从而优化网络的性能。
2、激活函数的性质
非线性性:激活函数引入了非线性,使得神经网络可以学习复杂的非线性关系。如果没有激活函数,多层神经网络将等效于单个线性层,无法捕捉到非线性特征。
可微性:激活函数通常要求是可微的,因为在反向传播算法中需要计算梯度来更新网络参数。绝大多数常见的激活函数都是可微的,但有些如ReLU,在零点不可导,但是可以在零点处约定一个导数值。
单调性:激活函数最好是单调的,这样可以保证损失函数是凸函数,使得优化问题更容易求解。大多数常用的激活函数都是单调的。
输出范围:不同的激活函数有不同的输出范围。有些激活函数的输出范围在0,1之间,适用于二元分类问题,比如sigmoid函数;有些输出范围在0, 之间,如ReLU函数,适用于回归问题;还有一些输出范围在[-1, 1]之间,如tanh函数,也适用于分类和回归问题。
饱和性:激活函数的饱和性指的是在某些输入范围内,函数的梯度很小,导致梯度消失问题。一些激活函数在输入很大或很小时会饱和,导致梯度接近于零,这会减缓学习速度或导致梯度消失。因此,一些激活函数被设计成在一定范围内不会饱和,如Leaky ReLU、ELU等。
计算效率:激活函数的计算效率也是一个考虑因素。一些激活函数的计算比较复杂,会增加训练和推理的时间成本,而有些激活函数计算较简单,如ReLU。
稀疏性:有些激活函数具有稀疏性,即在网络训练过程中,部分神经元的输出会趋向于零,这可以起到正则化的作用,有助于减少过拟合。
归一化:归一化的主要思想是使样本自动归一化到零均值、单位方差的分布,从而稳定训练,防止过拟合。
二、常见的激活函数
2.1 Sigmoid函数:
Sigmoid函数的图像呈现一种S形曲线,当输入值较大时,趋近于1;当输入值较小时,趋近于0。虽然Sigmoid函数在某些情况下被广泛使用,但由于其存在的梯度消失问题,随着深度学习的发展,其在隐藏层中的应用逐渐被ReLU、Leaky ReLU、ELU等激活函数所取代。
1. 作用
将输入值映射到一个区间之间,实现非线性变换。
常用于二分类问题的输出层,将输出值转化为概率值。
在浅层网络中,用于处理二元分类任务。
2. 优点
具有很好的数学性质,具备平滑性和连续性。
输出范围在之间,可以被解释为概率。
相对简单,易于理解和实现。
3. 缺点
容易出现梯度消失问题:在函数两端,梯度接近于零,导致在反向传播过程中,参数更新缓慢,特别是在深度网络中。
输出不是以零为中心的:这可能导致网络的收敛速度变慢。
饱和区域梯度较小:在输入较大或较小时,梯度会变得很小,导致训练过程中的梯度消失问题。
4. 数学公式
Sigmoid激活函数的数学公式如下: 其中,是自然对数的底数,是输入值。
5.Sigmoid函数实现及可视化图像
def sigmoid(x):
return 1 / (1 + np.exp(-x))
def sigmoid_derivative(x):
return sigmoid(x) * (1 - sigmoid(x))
# 生成一系列输入值
x_values = np.linspace(-10, 10, 100)
# 计算Sigmoid函数及其导数的值
y_values_sigmoid = sigmoid(x_values)
y_values_derivative = sigmoid_derivative(x_values)
# 可视化Sigmoid函数及其导数
plt.figure(figsize=(10, 6))
plt.plot(x_values, y_values_sigmoid, label='Sigmoid', color='blue')
plt.plot(x_values, y_values_derivative, label='Sigmoid Derivative', color='red', linestyle='--')
plt.title('Sigmoid Function and Its Derivative')
plt.xlabel('Input')
plt.ylabel('Output')
plt.grid(True)
plt.legend()
plt.show()
函数(蓝线)及导数(红线)图像如下:
2.2 Tanh函数
1. 函数定义
Tanh函数(双曲正切函数),它具有 Sigmoid 函数的形状,但输出值的范围在之间。Tanh函数的定义为:
2.优点
零中心性:Tanh函数的输出以0为中心,当输入为负时,输出接近-1;当输入为正时,输出接近1。相比于ReLU函数,Tanh函数的零中心性有助于网络学习更好的特征表示。
非线性:Tanh函数是一个非线性函数,可以使神经网络具有更强的拟合能力,有助于学习复杂的非线性关系。
平滑性:Tanh函数是连续可导的,具有平滑的曲线,有利于梯度的计算和优化。
3.缺点
梯度消失问题:虽然Tanh函数相对于Sigmoid函数在输出范围上增加了一倍,但在输入很大或很小时,Tanh函数仍然会出现饱和现象,导致梯度消失问题。
计算开销:Tanh函数的计算相对于ReLU函数来说稍微复杂一些,因为它涉及到指数运算。在大规模数据和深度网络中,可能会带来一些计算开销。
4.Tanh函数实现及可视化图像
def tanh(x):
return (np.exp(x) - np.exp(-x)) / (np.exp(x) + np.exp(-x))
def tanh_derivative(x):
return 1 - np.square(tanh(x))
# 生成一系列输入值
x_values = np.linspace(-10, 10, 100)
# 计算Tanh函数及其导数的值
y_values_tanh = tanh(x_values)
y_values_derivative = tanh_derivative(x_values)
# 可视化Tanh函数及其导数
plt.figure(figsize=(10, 6))
plt.plot(x_values, y_values_tanh, label='Tanh', color='blue')
plt.plot(x_values, y_values_derivative, label='Tanh Derivative', color='red', linestyle='--')
plt.title('Tanh Function and Its Derivative')
plt.xlabel('Input')
plt.ylabel('Output')
plt.grid(True)
plt.legend()
plt.show()
函数(蓝线)及导数(红线)图像如下:
2.3ReLU 函数 :
1.函数定义
ReLU(Rectified Linear Unit)其定义为:
即当输入大于0时,输出等于输入;当输入小于等于0时,输出为0。
2.优点
非线性:ReLU函数是一个非线性函数,允许神经网络学习和表示非线性关系,使得神经网络能够更好地拟合复杂的数据。
计算高效:ReLU函数的计算非常简单,只需要进行比较和取最大值操作,因此计算速度较快,适用于大规模数据和深度网络。
稀疏激活性:在ReLU函数中,当输入小于等于0时,输出为0,因此部分神经元会处于非活跃状态,实现了稀疏激活性,有助于网络的泛化能力和参数的稀疏性。
缓解梯度消失问题:相较于一些其他激活函数,ReLU函数在正区间的导数为1,因此可以缓解梯度消失问题,使得网络更容易训练。
3.缺点
Dead ReLU问题:当输入小于等于0时,ReLU函数的输出为0,导致相应的神经元不会激活,称为“死亡神经元”问题。在训练过程中,这些“死亡神经元”可能无法被激活,导致相应的参数无法更新,从而使得这些神经元对于网络的预测结果没有贡献。
输出不是零中心:由于ReLU函数在负值区域输出为0,因此它的输出不是以零为中心的,这可能导致一些问题,比如梯度更新的方向性较强。
不适用的场景:虽然ReLU函数在大多数情况下表现良好,但它并不适用于处理一些数据分布不均匀或者具有较大的负值区间。
4.ReLU函数