深度学习常用的激活函数

news/2024/11/23 3:21:50/

深度学习的核心思想是通过多层次的神经网络结构,逐步抽取和表示数据中的高级特征,从而实现对复杂数据模式的学习和识别。

神经网络结构: 深度学习使用多层次的神经网络,包括输入层、隐藏层和输出层。这些网络结构允许模型自动学习数据中的特征层次。
反向传播算法: 反向传播是一种优化算法,用于调整神经网络中连接权重,以使模型的预测结果更加准确。它通过计算损失函数对权重的梯度,并使用梯度信息来更新权重。
大规模数据和计算能力: 深度学习模型通常需要大量的数据来训练,以及强大的计算资源来进行复杂的计算。随着大数据和GPU等硬件的发展,深度学习在实际应用中取得了显著的进展。
预训练和迁移学习: 预训练模型可以在大规模数据上进行预训练,然后在特定任务上进行微调,从而加速模型训练和提高性能。这种迁移学习的方法在很多领域都取得了良好的效果。

激活函数是神经网络中的一个关键组件,它决定了神经元是否被激活(激活值大于某个阈值)并传递信息给下一层。激活函数引入非线性性质,使得神经网络能够表示更加复杂的函数关系。

1.Sigmoid函数(Logistic函数)

Sigmoid 函数将输入值压缩到 0 和 1 之间,曲线形状平滑,适合用于较浅的网络层或二元分类问题。然而,Sigmoid 函数在输入较大或较小的情况下容易出现梯度消失的问题,限制了其在深层网络中的应用。
在这里插入图片描述

Sigmoid函数的数学表达式为: f ( x ) = 1 1 + e − x f(x)=\frac{1}{1+e^{-x}} f(x)=1+ex1 其中 x x x 是输入值, e e e 是自然对数的底。这个函数将任意实数映射到一个范围在 0 到 1 之间的值,具有如下特点:

  1. x x x 趋近于正无穷大时, f ( x ) f(x) f(x) 趋近于 1;
  2. x x x 趋近于正无穷小时, f ( x ) f(x) f(x) 趋近于 0;
  3. x = 0 x=0 x=0 处, f ( x ) f(x) f(x) 的值为 0.5,即中间值。

Sigmoid函数也存在一些问题:

  1. 梯度消失: 在输入较大或较小的区域,Sigmoid函数的梯度接近于零,这会导致反向传播时梯度逐渐消失,影响深层网络的训练。
  2. 输出不是零中心: Sigmoid函数的输出在大部分情况下是正的,这可能导致在网络训练过程中的参数更新不均匀。
  3. 计算代价高: 计算Sigmoid函数的指数运算较为昂贵,可能影响网络的计算效率。

2.ReLU函数(Rectified Linear Unit)

ReLU函数在输入大于零时输出输入值本身,否则输出0。它简单且计算高效,在深度学习中广泛使用。但是,ReLU函数在负数区域输出为0,可能导致神经元“死亡”,即不再激活,从而影响网络的训练。
在这里插入图片描述

ReLU函数的数学表达式为: f ( x ) = max ⁡ ( 0 , x ) f(x)=\max(0,x) f(x)=max(0,x)其中, x x x 是输入值, f ( x ) f(x) f(x) 是激活后的输出值。具有如下特点:

  1. x x x 大于等于 0 时, f ( x ) = x f(x) = x f(x)=x,即输出等于输入;
  2. x x x 小于 0 时, f ( x ) = 0 f(x)=0 f(x)=0,即输出为零。

ReLU函数的优势包括:

  1. 非线性: 尽管ReLU在负数区域输出为零,但在正数区域仍然是非线性的,能够引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。
  2. 计算高效: ReLU的计算非常简单,只需要比较输入值和零的大小,相对于其他一些激活函数,计算成本更低。
  3. 避免梯度消失: 在正数区域,ReLU函数的梯度为1,不会出现梯度消失问题,有助于在深层网络中传播梯度。

ReLU函数存在的一些问题:

  1. 死亡神经元问题: 当某个神经元在训练过程中始终输出为负数,其梯度为零,导致它的权重无法更新,即"死亡"。这种情况下,神经元将不再对网络的学习产生影响;
  2. 不是零中心: 当输入为负数时,ReLU的输出为零,这可能导致网络的激活分布不是零中心,可能对训练造成一些影响。

3.Leaky ReLU

Leaky ReLU是 ReLU 的变体,允许负数区域的斜率不为零,从而避免了死亡神经元问题。Leaky ReLU在负数区域保留一些激活,有助于减轻梯度消失问题。

Leaky ReLU函数的数学表达式为: f ( x ) = { x if  x ≥ 0 b x if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ bx &\text{if } x \leq 0 \end{cases} f(x)={xbxif x0if x0其中, x x x 是输入值,b 是一个小于 1 的超参数,通常在训练过程中固定为一个较小的正数,如0.01。具有如下特点:

  1. x x x 大于等于零时, f ( x ) = x f(x)=x f(x)=x,即输出等于输入,与普通的ReLU相同;
  2. x x x 小于零时, f ( x ) = a x f(x)=ax f(x)=ax,即引入一个小的斜率 b 来保证负数区域不完全为零。

Leaky ReLU的优势包括:

  1. 避免死亡神经元问题: 引入了一个小的斜率 aa,使得在负数区域仍然具有非零的输出,从而减轻了死亡神经元问题。
  2. 计算简单: Leaky ReLU的计算非常简单,与ReLU相似,只需要比较输入值和零的大小。

Leaky ReLU 存在的一些问题:

  1. 需要调参: 超参数 b 需要手动设定,虽然通常取较小的值(如0.01)能够在大多数情况下工作,但仍然需要调参。

  2. 不自适应: Leaky ReLU的斜率在负数区域是固定的,而PReLU则能够通过学习自适应地确定斜率

4.PReLU(Parametric ReLU)

PReLU是 Leaky ReLU 的一种扩展形式,它引入了一个可学习的参数,允许网络自动学习在负数区域的斜率,从而更好地适应不同的数据分布。

PReLU函数的数学表达式为: f ( x ) = { x if  x ≥ 0 a x if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ ax &\text{if } x \leq 0 \end{cases} f(x)={xaxif x0if x0其中, x x x 是输入值,a 是一个可学习的参数,通常在训练过程中通过反向传播进行更新。当 a 为 0 时,PReLU退化为普通的ReLU函数。当 a 大于 0 时,PReLU在负数区域引入了一个斜率,使得负数值也能够有非零的输出,从而避免死亡神经元问题。

PReLU函数的优势包括:

  1. 自适应斜率: PReLU通过学习参数 a 来自适应地确定负数区域的斜率,可以根据数据的分布和任务的需求来调整激活函数的形状。
  2. 减轻死亡神经元问题: 通过在负数区域引入斜率,PReLU有助于激活那些在训练过程中可能变得非激活的神经元,从而减轻了死亡神经元问题。
  3. 提高模型表达能力: PReLU的自适应斜率使得神经网络能够学习更加复杂的函数关系,提高了模型的表达能力。

PReLU函数存在的一些问题:

  • 需要更多的参数进行学习,可能会增加模型的复杂度和训练时间。

Leaky ReLU 和 PReLU 都在负数区域引入了斜率,从而在一定程度上改进了ReLU的问题。Leaky ReLU的斜率通常是固定的超参数,而PReLU则通过学习参数来自适应地确定斜率。选择使用哪种激活函数取决于具体问题的需求和实验结果。

5.Tanh函数(双曲正切函数)

Tanh 函数将输入值映射到 -1 和 1 之间,类似于Sigmoid函数,但范围更大。它在某些情况下能够更好地处理输入数据的对称性,但也会存在梯度消失问题。
在这里插入图片描述

Tanh函数的数学表达式为: f ( x ) = e x − e − x e x + e − x f(x)=\frac{e^x - e^{-x}}{e^{x}+e^{-x}} f(x)=ex+exexex其中, x x x 是输入值, e e e 是自然对数的底。Tanh函数将任意实数映射到范围在 -1 到 1 之间的值,具有如下特点:

  1. x x x 趋近于正无穷大时, f ( x ) f(x) f(x) 趋近于 1;
  2. x x x 趋近于正无穷小时, f ( x ) f(x) f(x) 趋近于 -1;
  3. x = 0 x=0 x=0 处, f ( x ) f(x) f(x) 的值为 0。

Tanh 函数的优势包括:

  1. 零中心性: Tanh函数的输出在大部分情况下是零中心的,相对于ReLU等激活函数,更有助于训练稳定性;
  2. 非线性: Tanh函数是非线性的,能够引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。

Tanh函数存在的一些问题:

  • 梯度消失: 在输入较大或较小的区域,Tanh函数的梯度接近于零,可能导致梯度消失问题,特别是在深层网络中。

6. Swish函数

Swish 函数是一种类似于 ReLU 的激活函数,它将输入值与 Sigmoid 函数的乘积作为输出。
Swish函数的数学表达式如下: f ( x ) = x ⋅ σ ( β x ) f(x)=x\cdot \sigma(\beta x) f(x)=xσ(βx)其中, x x x 是输入值, σ σ σ 是Sigmoid函数, β β β 是一个可调参数。Swish函数通过在输入值上引入Sigmoid函数,实现了在正数区域保留线性特性,同时在负数区域引入非线性的特性。

Swish函数的特点包括:

  1. 非线性性质: 在负数区域,Swish 函数的输出呈现非线性特性,有助于引入神经网络的非线性能力,使其能够表示更加复杂的函数关系。
  2. 自动缩放: 当输入为较大的正数时,Swish 函数趋近于线性,不会出现梯度爆炸问题。这有助于模型的稳定性。
  3. 适用范围广: Swish 函数在一些任务中表现出色,尤其在较大的模型中(如深度神经网络)可能表现良好。

Swish函数存在的一些问题:

  1. 计算开销: Swish函数的计算相对于ReLU等简单激活函数更复杂,需要涉及Sigmoid函数的计算。
  2. 不适用于所有情况: 尽管在某些情况下表现出色,Swish函数并不一定在所有任务和网络结构中都能取得最佳性能。

7. ELU(Exponential Linear Unit)

ELU是一种具有平滑非线性特性的激活函数。在正数区域,ELU函数与ReLU相似;而在负数区域,它的曲线更平滑,有助于减轻梯度消失问题。此外,ELU在负数区域的输出不仅不是0,还具有一个负值,有助于缓解神经元死亡问题。
ELU的数学表达式为: f ( x ) = { x if  x ≥ 0 α ( exp ⁡ ( x ) − 1 ) if  x ≤ 0 f(x) = \begin{cases} x &\text{if } x \geq 0 \\ \alpha(\exp (x)-1) &\text{if } x \leq 0 \end{cases} f(x)={xα(exp(x)1)if x0if x0
其中, x x x 是输入值, α α α 是一个可调参数,通常取一个较大的正数,如1。ELU函数通过在负数区域引入指数函数,实现了在负数区域具有非线性的平滑特性。

ELU函数的优势有:

  1. 平滑非线性性质: 在负数区域,ELU函数的输出是平滑的非线性特性,相对于ReLU等函数,能够更好地拟合复杂的函数关系。
  2. 避免死亡神经元问题: ELU在负数区域不会输出零,因此能够避免死亡神经元问题。
  3. 零中心性: ELU函数在大部分情况下是零中心的,有助于训练稳定性。
  4. 自适应斜率: 通过调整参数 α α α 的值,可以自适应地调整负数区域的斜率,使得ELU能够适应不同的数据分布和任务需求。

ELU 存在的一些问题:

  • 计算开销: ELU函数的计算相对于ReLU等简单激活函数较为复杂,涉及指数函数的计算。
  • 参数调整: 参数 α α α 的选择可能需要进行调参,不同的数据和任务可能需要不同的参数值。

8.SELU(Scaled Exponential Linear Unit)

SELU是ELU的扩展,它在一定条件下能够使得网络在前向传播时自我规范化。这意味着在使用SELU激活函数时,网络的每一层的输出的均值和方差能够保持稳定。这一性质有助于训练更深的网络,而无需过多的批标准化等技巧。

SELU函数的数学表达式如下: f ( x ) = λ { x if  x ≥ 0 β ( exp ⁡ ( x ) − 1 ) if  x ≤ 0 f(x) =\lambda \begin{cases} x &\text{if } x \geq 0 \\ \beta (\exp (x)-1) &\text{if } x \leq 0 \end{cases} f(x)=λ{xβ(exp(x)1)if x0if x0其中, x x x 是输入值, β \beta β 是一个超参数(通常设置为1.6733), λ λ λ 是一个超参数(通常设置为1.0507)。SELU函数通过引入尺度参数 λ λ λ,使得输出值在正数区域逐渐缩放,从而实现网络自我规范化。

SELU函数的特点和优势包括:

  1. 自我规范化: 在一定条件下,使用SELU激活函数可以使得每一层的输出的均值和方差保持稳定,从而减轻梯度爆炸和梯度消失问题。
  2. 允许深层网络: 由于自我规范化的特性,SELU函数允许构建更深的神经网络,无需使用复杂的正则化技巧,如批标准化。
  3. 默认初始化: 在一些特定条件下,SELU激活函数使用零均值和单位方差的初始化可以保持自我规范化的特性。

SELU函数 存在的问题:

  • 不适用于所有情况: SELU函数在某些情况下表现出色,但并不一定在所有任务和网络结构中都能取得最佳性能。
  • 需要满足条件: 自我规范化的特性需要满足一定的条件,包括输入数据的分布和权重的初始化方式等。

9.Maxout

Maxout函数是一种通用的激活函数,它不是像ReLU或Sigmoid那样固定的形式,而是一种更为灵活的结构。Maxout函数的主要思想是让每个神经元学习多个线性函数的最大值,从而能够逼近更加复杂的非线性函数。Maxout可以视为ReLU和线性激活函数的泛化,它可以学习各种形状的非线性函数。然而,Maxout的参数量较大,可能需要更多的参数调整。

Maxout函数的数学表达式如下: f ( x ) = max ⁡ ( w 1 T x + b 1 , w 2 T x + b 2 ) f(x) = \max(w_1^Tx+b_1,w_2^Tx+b_2) f(x)=max(w1Tx+b1,w2Tx+b2)其中, x x x 是输入向量, w 1 , w 2 w_1,w_2 w1,w2​ 是权重向量, b 1 , b 2 b_1,b_2 b1,b2 是偏置。。Maxout函数中有两个分支,每个分支都由一个线性变换 w T x + b w^Tx+b wTx+b 组成,然后选择两者中的最大值作为输出。Maxout函数可以扩展到具有更多分支的情况。

Maxout函数的特点和优势包括:

  1. 灵活性: Maxout函数允许每个神经元学习多个线性函数的最大值,因此在逼近各种不同形状的非线性函数时具有灵活性。
  2. 适应性: 每个分支都可以学习数据的不同特征,从而在不同的输入区域自适应地选择最佳的线性函数。
  3. 抗过拟合: Maxout网络通常具有更多的参数,这有助于防止过拟合,尤其是在训练数据有限的情况下。

Maxout 存在的一些问题:

  • 参数量大: Maxout网络的参数量较大,可能需要更多的训练数据和计算资源来训练。
  • 计算成本: Maxout函数的计算成本较高,因为每个神经元有多个分支,每个分支都需要进行线性变换和比较操作。
  • 复杂性: Maxout网络的结构较为复杂,可能需要更多的调参和实验来找到最佳的网络结构。

10.Softmax函数

Softmax函数常用于多分类问题的输出层,将一组原始分数(也称为“logits”)转化为表示各类别概率的概率分布。Softmax函数能够将任意实数值映射到一个范围在0到1之间,并且保证所有类别的概率之和为1。

Softmax函数的数学表达式如下: softmax ( x i ) = e x i ∑ j = 1 N e x j \text{softmax}{(x_i)}=\frac{e^{x_{i}}}{\sum_{j=1}^{N}e^{x_j}} softmax(xi)=j=1Nexjexi其中, x i x_i xi 是原始分数中的第 i i i 个元素, N N N 是类别的数量, e e e 是自然对数的底。Softmax函数将每个原始分数进行指数化,并将指数化后的值除以所有指数化值的和,以获得每个类别的概率。

Softmax函数的特点和应用包括:

  1. 概率分布: Softmax函数的输出是一个概率分布,对于多类别分类问题,每个类别的输出表示为属于该类别的概率。
  2. 归一化: Softmax函数将原始分数进行指数化和归一化,使得网络的输出具有一定的可解释性和意义。
  3. 多类别分类: Softmax函数通常用于多类别分类问题,例如图像识别、文本分类等。

Softmax函数存在的一些问题:

  • 数值稳定性: 当原始分数较大时,指数运算可能导致数值溢出问题。为了提高数值稳定性,通常会在计算Softmax时减去分数中的最大值。
  • 互斥假设: Softmax函数假设每个样本只属于一个类别,不适用于多标签分类问题。
  • 类别数限制: Softmax函数在处理大量类别时可能会引入计算和存储的问题,特别是在输出层的类别数量较大时。

11.GELU

GELU 在正数区域类似于 ReLU,在负数区域则具有平滑的 S 形曲线。GELU 在一些任务上表现出色,并且相对简单,没有额外的超参数。结合了线性和非线性特性,同时在计算效率和性能之间取得了一定的平衡。GELU函数的设计旨在尝试克服ReLU等函数的一些问题,如梯度饱和和死亡神经元问题。

GELU函数的数学表达式如下: GELU ( x ) = 1 2 x ( 1 + tanh ⁡ ( 2 π ( x + 0.044715 x 3 ) ) ) \text{GELU}(x)=\frac{1}{2}x(1+\tanh (\sqrt{\frac{2}{\pi}}(x+0.044715x^{3}))) GELU(x)=21x(1+tanh(π2 (x+0.044715x3)))其中, x x x 是输入值, ⁡ t a n h ⁡tanh tanh 是双曲正切函数。GELU函数的形式结合了线性函数和双曲正切函数,使得在输入的正负两个区域都有非线性的输出。
在这里插入图片描述

GELU函数的特点和优势包括:

  1. 平滑非线性性质: GELU函数在整个输入范围内都有非线性的输出,相对于ReLU等函数,能够更好地拟合复杂的函数关系。
  2. 减轻梯度饱和问题: GELU函数在输入为正数区域具有线性的输出,能够减轻梯度饱和问题,有助于提高训练效率。
  3. 避免死亡神经元问题: GELU函数在负数区域也具有非零输出,能够避免死亡神经元问题。
  4. 计算效率: 相对于一些复杂的激活函数,GELU的计算相对较快,特别是与Sigmoid和双曲正切等函数相比。

GELU函数存在的问题:

  • 可能在某些情况下不如其他激活函数表现出色,具体效果可能会因问题的性质和数据分布而有所不同。

http://www.ppmy.cn/news/1014253.html

相关文章

SAP 计划独立需求屏幕增强(MD61/MD62/MD63)

需求:在计划独立需求界面新增一列自定义字段 效果如下: MD63:显示:(注:客户字段在显示界面不可以编辑) MD61:创建/MD62:修改(注:创建和修改的时候客户字段可…

el-date-picker设置默认当前日期

HTMl部分&#xff1a; <el-form-item label"拍摄时间&#xff1a;"><el-date-pickerv-model"searchData.filmingTimeRange"type"daterange"align"right"unlink-panelsrange-separator"至"start-placeholder"…

目标分割后 opencv 轮廓骨架计算

opencv获取轮廓 contours, hierarchy = cv2.findContours(mask_i, cv2.RETR_TREE, cv2.CHAIN_APPROX_SIMPLE)获取分割图像的骨架 # 中轴变换 得到裂缝的骨架使用 skimage.morphology.skeletonize 函数对二值化图像进行骨架提取。skeleton = skeletonize(mask_i, method

嵌入式开发学习(STC51-18-LCD液晶显示)

内容 在LCD1602液晶上显示字符信息&#xff1b; LCD1602介绍 简介 1602液晶也叫1602字符型液晶&#xff0c;它能显示2行字符信息&#xff0c;每行又能显示16个字符&#xff1b; 它是一种专门用来显示字母、数字、符号的点阵型液晶模块&#xff1b; 它是由若干个5x7或者5x…

Java中Date方法详解

先进行专栏介绍 本专栏是自己学Java的旅途&#xff0c;纯手敲的代码&#xff0c;自己跟着黑马课程学习的&#xff0c;并加入一些自己的理解&#xff0c;对代码和笔记 进行适当修改。希望能对大家能有所帮助&#xff0c;同时也是请大家对我进行监督&#xff0c;对我写的代码进行…

K8s中的PV和PVC和监控

1.PV和PVC PV&#xff1a;持久化存储&#xff0c;对存储资源进行抽象&#xff0c;对外提供可以调用的地方&#xff08;类似&#xff1a;生产者&#xff09; PVC&#xff1a;用于调用&#xff0c;不需要关心内部实现细节&#xff08;类似&#xff1a;消费者&#xff09; 2.实…

多语言多用户跨境电商系统搭建--独立站源码制作

开发一个多语言多用户跨境电商系统搭建需要考虑以下几个方面&#xff1a; 1. 系统架构设计&#xff1a;选择一个适合多语言多用户跨境电商系统的开源框架或者自行设计系统架构。确保系统的稳定性和扩展性。 2. 多语言支持&#xff1a;设计一个多语言支持功能&#xff0c;使用…