PyTorch 神经网络理论篇:激活函数剖析(Sigmoid、tanh、ReLU、Swish、Mish、GELU)
2023-12-12 09:59:59
在神经网络的构建过程中,激活函数扮演着至关重要的角色,它们为神经元的输出引入非线性,从而使神经网络能够学习复杂的数据模式。本文将深入探讨 PyTorch 中常用的几种激活函数,包括 Sigmoid、tanh、ReLU、Swish、Mish 和 GELU,揭示它们的数学表达式、函数特性以及在神经网络中的应用。
1. Sigmoid 函数
1.1 Sigmoid 函数介绍
Sigmoid 函数,又称逻辑斯蒂函数,是一种非线性激活函数,其值域在 0 到 1 之间,常用于二分类问题。
1.1.1 表达式
Sigmoid 函数的表达式为:
σ(x) = 1 / (1 + e^(-x))
1.1.2 函数特性
Sigmoid 函数的图像呈 S 形,其导数为:
σ'(x) = σ(x) * (1 - σ(x))
Sigmoid 函数的导数在 x=0 处取得最大值,随着 x 的增大或减小,导数值逐渐减小,在 x 趋于无穷大或无穷小的时候,导数值趋近于 0。
1.2 Sigmoid 函数在神经网络中的应用
Sigmoid 函数常用于二分类神经网络的输出层,其输出值可以解释为输入样本属于正类的概率。
2. tanh 函数
tanh 函数,又称双曲正切函数,是一种非线性激活函数,其值域在 -1 到 1 之间。
2.1 tanh 函数表达式
tanh 函数的表达式为:
tanh(x) = (e^x - e^(-x)) / (e^x + e^(-x))
2.2 函数特性
tanh 函数的图像呈双曲线形,其导数为:
tanh'(x) = 1 - tanh^2(x)
tanh 函数的导数在 x=0 处取得最大值,随着 x 的增大或减小,导数值逐渐减小,在 x 趋于无穷大或无穷小的时候,导数值趋近于 0。
2.3 tanh 函数在神经网络中的应用
tanh 函数常用于回归问题的神经网络的输出层,其输出值可以解释为输入样本的归一化值。
3. ReLU 函数
ReLU 函数,又称修正线性单元,是一种非线性激活函数,其值域为 [0, ∞)。
3.1 ReLU 函数表达式
ReLU 函数的表达式为:
ReLU(x) = max(0, x)
3.2 函数特性
ReLU 函数的图像呈折线形,其导数为:
ReLU'(x) = {1 if x > 0, 0 otherwise}
ReLU 函数的导数在 x > 0 时为 1,在 x < 0 时为 0。
3.3 ReLU 函数在神经网络中的应用
ReLU 函数因其计算简单、收敛速度快而被广泛应用于各种神经网络中。
4. Swish 函数
Swish 函数是一种非线性激活函数,其值域为 (-∞, ∞)。
4.1 Swish 函数表达式
Swish 函数的表达式为:
Swish(x) = x * σ(x)
4.2 函数特性
Swish 函数的图像呈光滑曲线形,其导数为:
Swish'(x) = σ(x) + x * σ'(x)
Swish 函数的导数在 x=0 处取得最大值,随着 x 的增大或减小,导数值逐渐减小。
4.3 Swish 函数在神经网络中的应用
Swish 函数因其平滑的梯度和较强的表达能力而受到关注,在自然语言处理和计算机视觉等领域表现出良好的效果。
5. Mish 函数
Mish 函数是一种非线性激活函数,其值域为 (-∞, ∞)。
5.1 Mish 函数表达式
Mish 函数的表达式为:
Mish(x) = x * tanh(softplus(x))
5.2 函数特性
Mish 函数的图像呈光滑曲线形,其导数为:
Mish'(x) = tanh(softplus(x)) + x * sech^2(softplus(x))
Mish 函数的导数在 x=0 处取得最大值,随着 x 的增大或减小,导数值逐渐减小。
5.3 Mish 函数在神经网络中的应用
Mish 函数在自然语言处理和计算机视觉等领域表现出良好的效果,其平滑的梯度和较强的表达能力使其成为一个有价值的激活函数选择。
6. GELU 函数
GELU 函数,又称高斯误差线性单元,是一种非线性激活函数,其值域为 (-∞, ∞)。
6.1 GELU 函数表达式
GELU 函数的表达式为:
GELU(x) = 0.5 * x * (1 + tanh(sqrt(2/π) * (x + 0.044715 * x^3)))
6.2 函数特性
GELU 函数的图像呈光滑曲线形,其导数为:
GELU'(x) = 0.5 * (1 + tanh(sqrt(2/π) * (x + 0.044715 * x^3))) + 0.5 * sqrt(2/π) * (1 - tanh^2(sqrt(2/π) * (x + 0.044715 * x^3))) * (1 + 0.044715 * 3 * x^2)
GELU 函数的导数在 x=0 处取得最大值,随着 x 的增大或减小,导数值逐渐减小。
6.3 GELU 函数在神经网络中的应用
GELU 函数在自然语言处理和计算机视觉等领域表现出良好的效果,其平滑的梯度和较强的表达能力使其成为一个有价值的激活函数选择。
7. 总结
在本文中,我们深入探讨了 PyTorch 中常用的几种激活函数,包括 Sigmoid、tanh、ReLU、Swish、Mish 和 GELU。我们介绍了它们的数学表达式、函数特性以及在神经网络中的应用。通过对这些激活函数的深入理解,我们可以更有效地构建和优化神经网络,以解决各种机器学习和深度学习问题。