1. 首页
  2. 机器学习

如何选择深度学习的激活功能

激活函数是神经网络设计的关键部分。

隐藏层中激活功能的选择将控制网络模型学习训练数据集的程度。输出层中激活函数的选择将定义模型可以做出的预测类型。

因此,必须为每个深度学习神经网络项目仔细选择激活函数。

在本教程中,您将发现如何为神经网络模型选择激活函数。

完成本教程后,您将知道:

  • 激活函数是神经网络设计的关键部分。
  • 用于隐藏层的现代默认激活功能是ReLU功能。
  • 输出层的激活功能取决于预测问题的类型。

本教程分为三个部分:他们是:

  1. 激活功能
  2. 激活隐藏层
  3. 激活输出层

激活功能

神经网络中的激活函数定义了输入的加权和如何转换为来自网络层中一个节点或多个节点的输出。

有时,激活函数称为“传递函数”。如果激活函数的输出范围受到限制,则可以将其称为“挤压函数”。许多激活函数是非线性的,在层或网络设计中可称为“非线性”。

激活函数的选择对神经网络的功能和性能有很大影响,并且可以在模型的不同部分中使用不同的激活函数。

从技术上讲,激活功能是在网络中每个节点的内部处理之内或之后使用的,尽管网络被设计为对层中的所有节点使用相同的激活功能。

网络可能具有三种类型的层:输入层从域中获取原始输入;隐藏层从其他层获取输入,并将输出传递到另一层;输出层进行预测。

所有隐藏层通常都使用相同的激活功能。输出层通常将使用与隐藏层不同的激活函数,并且取决于模型所需的预测类型。

激活函数通常也是可微的,这意味着可以为给定的输入值计算一阶导数。鉴于神经网络通常使用误差算法的反向传播进行训练,而误差算法需要预测误差的导数才能更新模型的权重,因此这是必需的。

在神经网络中有许多不同类型的激活函数,尽管实际上只有很少一部分函数用于隐藏层和输出层。

让我们依次看一下每种类型的层使用的激活函数。

激活隐藏层

神经网络中的隐藏层是一个接收来自另一层(例如另一个隐藏层或一个输入层)的输入并将输出提供给另一个层(例如另一个隐藏层或一个输出层)的层。

至少一般而言,隐藏层不会直接联系输入数据或不会为模型产生输出。

神经网络可能具有零个或多个隐藏层。

通常,在神经网络的隐藏层中使用可微的非线性激活函数。与使用线性激活函数训练的网络相比,这允许模型学习更复杂的函数。

您可能需要考虑在隐藏层中使用三个激活功能;他们是:

  • 整流线性激活(ReLU
  • 物流(乙状结肠
  • 双曲正切(Tanh

这不是用于隐藏层的激活功能的详尽列表,但是它们是最常用的。

让我们依次仔细研究每个对象。

ReLU隐藏层激活功能

该整流的线性活化函数,或RELU激活功能,也许是用于隐藏层中最常见的功能。

这是很常见的,因为它既易于实现,又可以克服其他先前流行的激活功能(如Sigmoid和Tanh)的局限性。特别是,它不易受到梯度消失的影响,无法训练深度模型,尽管它可能会遇到其他问题,例如饱和或“死角”的单元。

ReLU函数的计算如下:

  • 最大值(0.0,x)

这意味着如果输入值(x)为负,则返回值0.0,否则返回该值。

通过下面的工作示例,我们可以直观地了解此函数的形状。

运行示例将计算一系列值的输出,并创建输入与输出的关系图。

我们可以看到ReLU激活函数熟悉的扭结形状。

ReLU激活功能的输入与输出关系图。

ReLU激活功能的输入与输出关系图。

当对隐藏层使用ReLU功能时,优良作法是在训练之前使用“ He Normal ”或“ He Uniform ”权重初始化并将输入数据缩放到0-1(归一化)范围。

乙状结肠隐层激活功能

乙状结肠激活函数也称为逻辑函数。

它与逻辑回归分类算法中使用的功能相同。

该函数将任何实数值作为输入,并输出0到1范围内的值。输入越大(正数越多),输出值将越接近1.0;而输入越小(负数越多),则输出值越接近输出将为0.0。

乙状结肠激活函数的计算如下:

  • 1.0 /(1.0 + e ^ -x)

其中e是一个数学常数,它是自然对数的底数。

通过下面的工作示例,我们可以直观地了解此函数的形状。

运行示例将计算一系列值的输出,并创建输入与输出的关系图。

我们可以看到S型激活函数熟悉的S形。

乙状结肠激活函数的输入与输出关系图。

乙状结肠激活函数的输入与输出关系图。

将Sigmoid函数用于隐藏层时,最好使用“ Xavier Normal ”或“ Xavier Uniform ”权重初始化(也称为Glorot初始化,以Xavier Glorot命名)并将输入数据缩放到0-1范围(例如激活功能的范围)之前进行训练。

Tanh隐藏层激活功能

双曲正切激活函数也简称为Tanh(也称为“ tanh ”和“ TanH ”)函数。

它与S型激活功能非常相似,甚至具有相同的S形。

该函数将任何实数值作为输入,并输出-1到1范围内的值。输入越大(正值越大),输出值就越接近1.0;而输入越小(负值越大),则值越接近输出将为-1.0。

Tanh激活函数的计算如下:

  • (e ^ x-e ^ -x)/(e ^ x + e ^ -x)

其中e是作为自然对数底数的数学常数。

通过下面的工作示例,我们可以直观地了解此函数的形状。

运行示例将计算一系列值的输出,并创建输入与输出的关系图。

我们可以看到熟悉的Tanh激活函数的S形。

Tanh激活函数的输入与输出关系图。

Tanh激活函数的输入与输出关系图。

将TanH函数用于隐藏层时,最好使用“ Xavier Normal ”或“ Xavier Uniform ”权重初始化(也称为Glorot初始化,以Xavier Glorot命名)并将输入数据缩放到-1到训练之前为1(例如,激活功能的范围)。

如何选择隐藏层激活功能

神经网络在所有隐藏层中几乎总是具有相同的激活功能。

通过网络模型改变激活功能是最不寻常的。

传统上,S型激活函数是1990年代的默认激活函数。也许在1990年代中期至2010年代后期,Tanh函数是隐藏层的默认激活函数。

S型和Tanh函数都可以通过所谓的消失梯度问题使模型在训练过程中更容易出现问题。

通常根据神经网络体系结构的类型来选择隐藏层中使用的激活函数。

具有通用架构(例如MLP和CNN)的现代神经网络模型将利用ReLU激活功能或扩展功能。

递归网络仍然通常使用Tanh或S型激活函数,或者甚至同时使用这两种函数。例如,LSTM通常将Sigmoid激活用于循环连接,将Tanh激活用于输出。

  • 多层感知器(MLP):ReLU激活功能。
  • 卷积神经网络(CNN):ReLU激活功能。
  • 循环神经网络:Tanh和/或Sigmoid激活功能。

如果不确定要为网络使用哪种激活功能,请尝试一些并比较结果。

下图总结了如何为神经网络模型的隐藏层选择激活函数。

如何选择隐藏层激活功能

如何选择隐藏层激活功能

激活输出层

输出层是神经网络模型中直接输出预测的层。

所有前馈神经网络模型都有一个输出层。

您可能需要考虑在输出层中使用三个激活函数;他们是:

  • 线性的
  • 物流(乙状结肠)
  • 软最大

这不是用于输出层的激活函数的详尽列表,但是它们是最常用的。

让我们依次仔细研究每个对象。

线性输出激活功能

线性激活函数也称为“身份”(乘以1.0)或“无激活”

这是因为线性激活函数不会以任何方式更改输入的加权和,而是直接返回值。

通过下面的工作示例,我们可以直观地了解此函数的形状。

运行示例将计算一系列值的输出,并创建输入与输出的关系图。

我们可以看到对角线形状,其中输入针对相同的输出进行绘制。

线性激活函数的输入与输出关系图

线性激活函数的输入与输出关系图

通常在使用归一化或标准化变换进行建模之前,对用于在输出层中训练具有线性激活函数的模型的目标值进行缩放。

乙状结肠输出激活功能

Logistic激活函数的S形已在上一节中进行了描述。

不过,为了增加一些对称性,我们可以使用下面的工作示例来审查此函数的形状。

运行示例将计算一系列值的输出,并创建输入与输出的关系图。

我们可以看到S型激活函数熟悉的S形。

乙状结肠激活函数的输入与输出关系图。

乙状结肠激活函数的输入与输出关系图。

用于在输出层中训练具有S型激活函数的模型的目标标签的值将为0或1。

Softmax输出激活功能

所述SOFTMAX函数输出值的那笔〜1.0,可以被解释为类别成员概率的向量。

它与argmax函数有关,该函数为所有选项输出0,为所选选项输出1。Softmax是argmax的“较软”版本,它允许获胜者通吃函数的似然输出。

这样,函数的输入是实数值的向量,而输出是相同长度的向量,其值的总和为1.0(如概率)。

softmax函数的计算如下:

  • e ^ x /总和(e ^ x)

其中x是输出的向量,e是一个数学常数,它是自然对数的底数。

我们无法绘制softmax函数,但可以举一个在Python中进行计算的示例。

运行示例将计算输入向量的softmax输出。

然后,我们确认softmax的输出总和确实为1.0。

用于在输出层中使用softmax激活函数训练模型的目标标签将是矢量,其中目标类为1,其他所有类为0。

如何选择输出激活功能

您必须根据要解决的预测问题的类型为输出层选择激活功能。

具体来说,是要预测的变量的类型。

例如,您可以将预测问题分为两大类,即预测类别变量(分类)和预测数值变量(回归)。

如果您的问题是回归问题,则应使用线性激活函数。

  • 回归:一个节点,线性激活。

如果您的问题是分类问题,则分类问题有三种主要类型,每种类型可能使用不同的激活函数。

预测概率不是回归问题。这是分类。在所有分类情况下,您的模型都将预测可以通过舍入(对于S形)或argmax(对于softmax)转换为清晰类标签的类成员的概率(例如,一个示例属于每个类的概率)。

如果有两个互斥类(二进制分类),则您的输出层将有一个节点,应使用S型激活函数。如果存在两个以上互斥的类(多类分类),则您的输出层每个类将有一个节点,应使用softmax激活。如果有两个或两个以上相互包含的类(多标签分类),则您的输出层将为每个类具有一个节点,并使用S型激活函数。

  • 二进制分类:一个节点,S型激活。
  • 多类分类:每个类一个节点,softmax激活。
  • 多标签分类:每个类一个节点,S型激活。

下图总结了如何为神经网络模型的输出层选择激活函数。

如何选择输出层激活功能

如何选择输出层激活功能

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code