收藏!深度学习最常用的 10 大激活函数,一文详解数学原理及优缺点,附 Python 代码

大哥大姐,请问下,收藏!深度学习最常用的 10 大激活函数,一文详解数学原理及优缺点,附 Python 代码
最新回答
玻璃回忆

2024-11-04 03:33:45

激活函数在深度学习中扮演着至关重要的角色,它们帮助神经网络学习数据中的复杂模式。本文深入探讨了深度学习中常用的十种激活函数的数学原理、优缺点,并附有 Python 代码实现。下面,我们逐一介绍这些激活函数。


Sigmoid函数


定义与形式:Sigmoid函数是一个常用激活函数,其数学形式为$f(x) = \frac{1}{1 + e^{-x}}$。它将输入的实数映射到(0,1)之间,常用于输出层的二分类问题,将神经网络的输出解释为概率。


手动实现与可视化:你可以使用Python代码实现Sigmoid函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:在神经网络中,Sigmoid函数主要用于输出层的二分类问题,将神经网络的输出映射到(0,1)之间的概率值,便于进行分类决策。


Tanh函数


定义与形式:Tanh函数,双曲正切函数,其数学形式为$f(x) = \frac{e^x - e^{-x}}{e^x + e^{-x}}$。它将输入的实数映射到(-1,1)之间,具有S形曲线,常用于隐藏层的激活函数。


手动实现与可视化:你可以使用Python代码实现Tanh函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:在神经网络中,Tanh函数常用于隐藏层的激活函数,将输入映射到(-1,1)之间,可以提供更广泛的输出范围,有利于神经网络的学习。


ReLU函数


定义与形式:ReLU函数(Rectified Linear Unit)是一种简单而有效的激活函数,其数学形式为$f(x) = \max(0, x)$。它将输入的实数映射到大于等于零的范围,如果输入小于零,则输出为零;如果输入大于零,则输出与输入相同。


手动实现与可视化:你可以使用Python代码实现ReLU函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:ReLU函数在神经网络中广泛用于隐藏层的激活函数,能够加速训练过程,避免了Sigmoid函数和Tanh函数存在的梯度消失问题。


Leaky ReLU函数


定义与形式:Leaky ReLU函数是对ReLU函数的改进,其数学形式为$f(x) = \max(\alpha x, x)$,其中a是一个小的斜率(通常接近于零),当输入小于零时,不再输出零,而是输出输入的一个小比例,以解决ReLU函数在负数部分输出为零的问题。


手动实现与可视化:你可以使用Python代码实现Leaky ReLU函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Leaky ReLU函数在神经网络中用于隐藏层的激活函数,能够解决ReLU函数在负数部分输出为零的问题,避免“神经元死亡”的情况。


Parametric ReLU函数


定义与形式:Parametric ReLU函数是对ReLU函数的改进,其数学形式为$f(x) = \max(ax, x)$,其中a是一个学习的参数,可以被网络训练得到,与Leaky ReLU函数不同的是,Parametric ReLU函数的斜率是通过训练得到的。


手动实现与可视化:你可以使用Python代码实现Parametric ReLU函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Parametric ReLU函数在神经网络中用于隐藏层的激活函数,与ReLU和Leaky ReLU相比,其斜率可以通过训练过程中学习得到,具有更强的灵活性。


ELU函数


定义与形式:ELU函数是一种激活函数,其数学形式为$f(x) = \begin{cases} x, & \text{if } x \geq 0 \\ \alpha(e^x - 1), & \text{if } x < 0 \end{cases}$,其中,α是一个较小的正数,通常取为1。ELU函数结合了ReLU的优点,并且解决了ReLU函数在负数部分输出为零的问题。


手动实现与可视化:你可以使用Python代码实现ELU函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:ELU函数在神经网络中作为激活函数,结合了ReLU的优点,能够加速训练,并解决了ReLU函数在负数部分输出为零的问题。


Softmax函数


定义与形式:Softmax函数是一种常用的激活函数,用于将向量转化为概率分布,其数学形式为$f(x_i) = \frac{e^{x_i}}{\sum_j e^{x_j}}$,其中,Xi 是输入向量的第i个元素,n是向量的长度。Softmax函数将输入向量的每个元素转化为一个概率值,使得所有元素的概率之和为1。


手动实现与可视化:你可以使用Python代码实现Softmax函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Softmax函数常用于神经网络的多分类问题的输出层,将神经网络的输出转化为类别概率分布,便于进行分类决策。


Swish函数


定义与形式:Swish函数是一种激活函数,其数学形式为$f(x) = x \cdot \sigma(x)$,其中$\sigma(x)$是Sigmoid函数。Swish函数结合了线性性质和非线性性质,可以被视为是ReLU函数的平滑版本,一定程度上提升了模型的性能。


手动实现与可视化:你可以使用Python代码实现Swish函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Swish函数作为一种激活函数,在神经网络中用于隐藏层的激活函数。它结合了线性性质和非线性性质,在一定程度上提升了模型的性能。


Maxout函数


定义与形式:Maxout函数将输入的一组实数分成若干组,然后取每组的最大值作为输出,其数学形式为$f(x) = \max_{i \in [1, k]}(W_i x + b_i)$,其中,x 是输入向量,Wi 和 bi 是参数,k 是每组的大小。


手动实现与可视化:由于Maxout函数的实现涉及参数 w 和 b,因此在这里我们只提供一个简单的示例来说明其原理。在实际应用中,参数通常是通过神经网络的训练学习得到的。


作用与用途:Maxout函数在神经网络中常用于隐藏层的激活函数,能够提供更强的拟合能力,增强模型的表达能力。


Softplus函数


定义与形式:Softplus函数是一种激活函数,其数学形式为$f(x) = \log(1 + e^x)$。Softplus函数是ReLU函数的平滑版本,避免了ReLU在零点处不可导的问题,同时保留了ReLU函数的非线性特性。


手动实现与可视化:你可以使用Python代码实现Softplus函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Softplus函数常用于神经网络的隐藏层的激活函数,特别是在较深的神经网络中。它是ReLU函数的平滑版本,可以缓解梯度消失问题,同时保留了非线性特性。


Mish函数


定义与形式:Mish函数是一种激活函数,其数学形式为$f(x) = x \cdot \tanh(\log(1 + e^x))$。Mish函数由印度的研究人员提出,相比ReLU函数,Mish函数在一些任务上表现更好。


手动实现与可视化:你可以使用Python代码实现Mish函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:Mish函数常用作神经网络的激活函数,相比ReLU函数,在一些任务上表现更好。它结合了ReLU函数、tanh函数和softplus函数的优点。


GELU函数


定义与形式:GELU函数(Gaussian Error Linear Units)是一种激活函数,其数学形式为$f(x) = x \cdot \Phi(x)$,其中$\Phi(x)$是标准正态分布的累积分布函数。GELU函数由OpenAI提出,被证明在一些NLP(自然语言处理)任务上效果良好。


手动实现与可视化:你可以使用Python代码实现GELU函数,并通过绘图工具将其可视化,以便理解其形状和特点。


作用与用途:GELU函数常用于深度神经网络的激活函数,特别是在一些NLP任务中表现良好。它结合了高斯分布和非线性激活函数的优点。



---

以上内容涵盖了深度学习中常用的十种激活函数的详细信息,从数学原理到实际应用,以及它们的优缺点。希望对你的学习有所帮助。