深度学习基础知识的简单解释

81 阅读17分钟

我将解释深度学习的基础知识,从什么是深度学习开始到深度学习的不同组成部分,如成本函数、激活函数和优化器。

什么是深度学习?

深度学习是机器学习的一个子领域,它利用人工神经网络(ANNs)来模仿人脑的结构和功能,如图1.1所描述。虽然深度学习的想法已经存在了好几年,但它最近的流行和成功可以归功于强大的处理单元,如GPU和大量数据的可用性。特征高维数据 之间关系的复杂性是深度神经网络(DNNs)优于其他方法的原因之一。

Fig 2.1 : Deep Learning is a sub Field of Machine Learning

图1.1 深度学习是机器学习的一个子领域

深度学习的优势在于它不需要人类来做大部分的工作。在过去,人们不得不从数据中手动提取特征,以便机器学习算法能够理解它们。这个过程很耗时,而且成本很高。然而,通过深度学习,从原始数据中提取特征是自动化的。这意味着人类不需要参与这个过程,除了给 数据贴标签的最后一步。这使我们能够处理更大的数据集,而且深度学习算法的性能比大多数机器学习算法更好。这是显而易见的,因为在处理大量数据时,深度学习算法会不断变得更好,而大多数机器学习算法则变得陈旧,如下图所示:

图1.2 深度学习和ML性能

到目前为止,我们已经了解了深度学习作为机器学习的一个子领域,并提到了深度学习算法相对于机器学习算法的优势,接下来我们将了解深度学习的结构是如何受到我们大脑中神经元细胞的启发。

深度学习的神经元基础

在这一节中,我们将讨论神经元,以及它们是如何成为人工神经网络(ANN)的基本构件。下面你可以看到一个现实生活中的神经元。这张照片可以在神经元 - 维基共享资源中找到。

神经元 - 维基共享资源

每个神经元有三个主要部分:细胞体、树突和轴突。细胞体包含细胞核和其他细胞器,保持细胞的活力和功能。树突就像从细胞体延伸出来的分支,接受来自其他神经元的输入。轴突是一个细长的延伸部分,将神经元的输出带到其他细胞。如下图所示,也是如此。链接到图片commons.wikimedia.org/wiki/File:N…

commons.wikimedia.org/wiki/File:N…

这就是大脑神经元的结构。让我们接着看下一节感知器和它们是如何成为人工神经元的。

感知器--人工神经元

Perceptron是一个模仿神经元结构的数学模型。在一个神经元中,多个电信号 从树突传到神经元的主体。然后,一个信号从轴突传到其他细胞的树突。同样,在感知器中,我们有树突发送输入信号 ,该信号被一个函数 接收,该函数是神经元的主体,然后根据该函数只从轴突推送单一输出

下面是一个关于生物神经元如何被转化为人工神经元的直接说明。这个过程可以分解成以下的步骤说明。如下图所示,输入信号来自树突输出信号来自轴突神经元的主体被转化为人工神经元。

对于这种情况,有两个输入和一个输出。输入索引从0开始,包括0和1的值,输入对应于特征的值。在处理数据集时,特征可以包含一系列的特征,如房子里的房间数量或图像中的黑暗程度,由像素或黑暗程度表示。为了说明转换为人工神经元的过程,让我们以12和4的输入值为例。

继续前进,我们必须将权重与输入信号(输入0和输入1)相乘。一个实际的神经元只有在输入信号的集体强度超过预定的阈值时才会发出输出信号。在这种情况下,输入0有权重0,而输入1有权重1,如下图所示。一般来说,权重是通过一个随机生成过程初始化的。

在这种情况下,已经为权重值选择了随机数--例如,权重0为0.5,权重1为-1 ,所选数字是任意的

在这一点上,输入将乘以各自的权重。结果, 输入0将是6,而输入1将是-4。 随后的阶段涉及将输入乘以其相应的权重,并将其传送给激活函数,如下图所示。

有许多激活函数可用,我们将在后面的 "理解激活函数"一章中讨论。目前,我们将采用一个基本的激活函数。根据这个激活函数,如果输入的总和是正的,它返回的值是1,而如果输入的总和是负的,它返回0。

初始输入可以是0,这导致每个权重的值为0。这个问题可以通过加入一个偏置项来解决,如下图所示。偏置作为线性方程中直线的截点。它使神经网络能够调节输出和神经元的加权和。本质上,偏置有助于模型更准确地适应所提供的数据。在这种情况下,将使用1的偏置,如下图所示。

我们已经成功构建了一个基于生物神经元的人工神经元。完成了这一工作,我们现在准备深入到ANN的世界。下一节将解释如何设计一个采用多个神经元的深度学习网络。

ANNs的工作原理

我们已经探讨了单个神经元或感知器如何运作的想法。现在,是时候扩大我们的理解,以包括深度学习的概念。下图提供了一个多感知器的视觉表现。

人工神经网络

在上图中,我们可以看到各层的单体感知器通过其输入和输出连接。

输入层是来自数据的真实值,所以它们把实际数据作为输入。接下来的层是隐藏层,它位于输入和输出层之间。如果有三个或更多的隐藏层,那么它被认为是一个深度神经网络。最后一层是输出层,在这里我们对我们试图估计的任何输出进行某种最终估计。随着我们通过更多层的进展,抽象的水平也在增加。

接下来,我们将了解深度学习中的一个重要话题,即激活函数和不同类型。

了解激活函数

激活函数对神经网络至关重要,因为它们带来了非线性,这对涉及多种非线性转换的深度学习至关重要。激活函数作为非线性转换的工具,在将输入信号传输到下一个神经网络层之前被应用。在激活函数的帮助下,神经网络可以学习复杂的特征。如果我们不使用激活函数来引入非线性,那么整个网络将是线性的,而线性函数的组合总是线性的,因此它将与线性机器学习模型没有区别。

有多个激活函数-
1 -> 阈值函数
2 -> sigmoid函数
3 -> 整流函数
4 -> 双曲正切函数
5 -> 成本函数

阈值函数

阈值函数可以在下图中看到

阈值函数被描述为一个图形,其中x轴代表输入的加权和,y轴显示从0到1的阈值。其机制很简单:如果x轴上的值低于0,阈值将是0,如果值高于0,阈值将是1。因此,阈值函数作为一个二进制的、是或不是的函数发挥作用。

西格玛函数

sigmoid函数只不过是一个Logistic函数。在这个函数中,任何低于0的东西都将被设置为0,该函数输出类别概率。然后使用argmax函数,我们可以选择首选的类别。这个函数经常被用于输出层,特别是当你试图找到预测概率的时候。

整流器线性函数

在人工神经网络(ANN)领域,广泛使用的激活函数之一是整流器线性(ReLU)函数。这个函数的操作是当输入小于或等于0时,将x的值设置为0。随着输入值的增加,输出逐渐进步。这有助于区分好的特征。在以前的函数中,所有好的特征都是同等价值的,但在这里,特征将根据它们的好坏来进行映射。这一行为在附图中得到了说明:

双曲正切激活函数

tanh函数与sigmoid函数非常相似,主要区别在于它的输出范围在-1和1之间,与sigmoid函数类似,tanh函数也表现为S型曲线。然而,tanh函数有一个独特的优势,即正的输入值被强烈地映射到正的输出,负的输入值被映射到负的输出,而0的输入值被映射到0的输出。

神经网络的成本函数

在下面的讨论中,我们将深入探讨使用成本函数来评估神经网络的性能。这个指标衡量了我们与预期输出值的偏离程度。为了这个目的,我们将采用以下符号和变量。

变量Y 代表真实值
变量a 代表神经元的预测值

在权重和偏差方面,公式如下:

W * X + b = z

我们把z,也就是输入(X)乘以权重(X)再加上偏置(b),传给激活函数

虽然存在多种类型的成本函数,但我们将主要关注两种,即:
-二次成本函数
-交叉熵函数
首先,我们将探讨采用以下公式的二次成本函数:

上述公式强调,如果误差很大,即当实际值(Y)小于预测值(a)时,成本函数的值会变成负值。然而,由于我们不能使用负值作为成本,所以结果被平方化以产生一个正值。尽管如此,当我们使用二次成本函数时,公式函数的方法会降低网络的学习率。

与其使用二次成本函数,我们不如采用交叉熵函数,其定义如下。

交叉熵成本函数有利于加快学习速度,因为y和a之间的差异会提高我们神经元的学习速度。因此,如果在模型训练过程开始时,预期值和实际值之间有很大的差距,最好是过渡到交叉熵成本函数。这是因为差距越大,神经元的学习速度就越快。

在什么地方使用什么样的激活函数一定很混乱:
下图中的一些术语可能很混乱,但一般来说,根据网络类型,不同种类的激活是首选。最后,在做一个项目时,总是需要进行实验来找到最适合的激活函数。

同样,根据问题的类型,对激活函数的选择也是很有讲究的。我将在其他博客中详细介绍,但一般情况下会遵循以下原则。但总是需要进行实验的

优化器

优化器在神经网络的学习过程中起着至关重要的作用,它决定了使损失函数最小化的参数值。在这些优化器中,梯度下降是一种用于寻找函数的最小值或成本函数的最低值的算法。其目的是通过采取与负梯度成正比的步骤使成本函数最小化,这有助于找到局部最小值。

成本函数在y轴上表示,而我们要优化的权重参数在x轴上表示。最佳权重值是使成本函数最小化的值,它在图上显示为一条抛物线。然而,可视化和寻找多个维度的最小值,在神经网络中就是这样,是不可行的。相反,我们使用线性代数和深度学习库来获得使成本函数最小化的最佳参数

现在让我们探讨一下,我们如何在整个网络中有效地调整最佳权重或参数。这就是称为反向传播的技术发挥作用的地方。

逆向传播 是一种技术,一旦处理完一批数据,就会计算出每个神经元的误差贡献。该方法依赖于连锁规则,通过网络向后移动并计算这些误差。这个过程包括计算输出端的误差,然后更新整个网络层的权重。逆向传播需要对每个输入值有一个已知的期望输出。

了解超参数

开发深度学习解决方案的关键组成部分之一是选择适当的超参数。超参数控制模型的各个方面,如内存使用或执行成本,并能显著影响模型的性能。除了标准的超参数外,还可以定义额外的超参数,以帮助算法适应特定的场景或问题。因此,为了实现最佳性能,数据科学家在深度学习模型开发过程中往往会投入大量精力来调整超参数。

超参数大致可分为两类:
-- 模型训练特定的超参数
-- 网络架构特定的超参数

模型训练特定的超参数

针对模型训练的超参数对模型的性能起着重要作用。这些超参数存在于模型之外,但对其有直接影响。以下超参数将在本讨论中涉及:
1)学习率
2)批次大小
3)历时数

**学习率
**学习率超参数很关键,它可以衡量模型的进度,用于优化其性能。过低的学习率会增加模型的训练时间,因为它需要更长的时间来逐渐调整网络的权重以达到最佳状态。相反,一个高的学习率有助于模型快速适应数据,但会导致模型过高的最小值。大多数模型的学习率的一个合理起点是0.001。在下图中,你可以观察到,低的学习率在达到最小点之前必须有许多更新:

一个非常低的学习率

相反,一个合适的学习率会迅速收敛到最小点,在到达最小点附近之前需要较少的更新。下图显示了一个合理的学习率:

一个最佳的学习率

下图展示了高学习率导致的分歧行为,在这种情况下,大量的更新会导致模型性能的显著波动。

一个非常高的学习率

批量大小

批量大小是一个重要的超参数,会影响训练的准确性,以及所需的时间和资源。它决定了ML算法在一次训练迭代中处理的数据点的数量。这不是一个简单的超参数,而是一个复杂的超参数,可以显著影响整个训练过程。

虽然大批量的数据可以提供显著的计算量提升,但据观察,它可以导致模型质量的显著下降,这是由其泛化能力衡量的。此外,较大的批次规模在训练过程中需要更多的内存。另一方面,使用较小的批次规模通常会产生比使用较大批次规模时更好的模型,尽管它增加了训练时间。这可以归因于这样一个事实,即较小的批次规模在梯度估计中引入了更多的噪声,这有助于它们收敛到平坦的最小化器。然而,使用小批量的缺点是它增加了训练时间。

一个好的批次大小值大约是2到32。你可以参考Dominic Masters写的论文(arxiv.org/search/cs?s… amp;query=Masters%2C+D)。

脉冲数

一个模型是通过一定数量的循环来训练的,被称为epoch。在一个周期内,整个数据集通过神经网络向前和向后传递一次。这提供了一个简单的方法来跟踪周期的数量,同时监测训练或验证错误。由于一个历时中涉及大量的数据,它被分成较小的批次供机器处理。
早期停止的Keras回调。如果在过去的10到20个历时中,训练/验证误差没有改善,这个回调会停止训练过程。

网络架构特定的超参数

直接处理深度学习模型架构的超参数被称为网络架构特定超参数。不同类型的网络特定超参数如下:

  • -- 隐藏层的数量
    -- 正则化
    -- 激活函数作为超参数

隐藏层的数量

一个模型可以用有限的隐藏层数量轻松学习简单的特征。然而,当特征变得更加复杂或非线性增加时,额外的层和单元就成为必要。

如果一个小的网络被用于一个复杂的任务,产生的模型将没有足够的学习能力,导致性能不佳。比最佳数量稍多的单元是可以接受的,但大大超过这个数量会导致过拟合。当模型记住了训练数据集并在其上表现良好,但在测试数据上表现不佳时,就会出现过度拟合。因此,我们可以试验隐藏层的数量并评估网络的准确性。

正则化

正则化是一个超参数,可以调整学习算法以提高模型的泛化能力。这增强了模型在未见过的数据上的表现。在机器学习中,正则化对系数进行惩罚,而在深度学习中,它对节点的权重矩阵进行惩罚。在这种情况下,我们将探索两种类型的正则化。

  • > L1和L2正则化
  • > 辍学

L1和L2正则化

L1和L2是最普遍的两种正则化类型。通过在整个成本函数中加入正则化项,权重矩阵的值会减少。这是因为较小的权重矩阵被认为会导致更简单的模型。L1和L2正则化在实现上有所不同。L1正则化的公式如下:在前面的公式中,正则化项用lambda(λ)表示,它对绝对权重进行惩罚。L2正则化的公式如下:

在前面的公式中,正则化项用lambda (λ)表示,它对绝对权重进行惩罚。L2正则化的公式如下:

在前述公式中,L2正则化用lambda(λ)表示。它也被称为权重衰减,因为它迫使权重衰减到接近0。

剔除

Dropout是一种正则化技术,用于提高网络的泛化能力,防止其过度拟合。一般采用0.2到0.5的剔除值,其中0.2是一个很好的起点。通常有必要选择多个值并检查模型的性能。剔除值过低的影响可以忽略不计,而过高的值则会导致网络在模型训练期间学习特征不足。如果将dropout应用于一个更大更广的网络,可能会取得更好的性能,使模型更有效地学习独立的表征。

激活函数作为超参数

激活函数,也就是不太常见的转移函数,是用来使模型学习非线性预测边界的。不同的激活函数表现不同,要根据手头的深度学习任务仔细选择。我们已经在本章的前一节 "了解激活函数 "中讨论了不同类型的激活。