当前位置:   article > 正文

神经网络:前馈神经网络简介

前馈神经网络

概述

神经网络前馈是接收输入数据并生成输出的机器学习模型。这些网络由多层人工神经元组成,这些人工神经元通过加权连接连接。在不环回的情况下,数据以单一方向从输入层流向输出层。在训练期间调整神经元之间连接的权重,以减少模型预测的输出与实际正确输出之间的差异。

先决条件

  • 线性代数:矩阵和矩阵运算。
  • 概率与统计:概率分布和概率密度函数。
  • 编程:熟悉Python等编程语言。
  • 梯度下降:用于更新参数的优化算法。
  • 反向传播:用于计算损失函数与参数有关的梯度的算法。
  • 激活功能:在隐藏层中引入非线性,了解不同的激活函数,如 ReLU、sigmoid 和 tanh。
  • 蟒:能够使用 TensorFlow 和 PyTorch 等库实现神经网络。

介绍

神经网络前馈是一种人工神经网络,可以解决许多问题,包括图像分类、自然语言处理和时间序列预测。它们对于涉及模式识别的任务特别有效。这些网络由相互连接的“神经元”组成,这些“神经元”被组织成层,输入通过第一层,输出由最后一层产生。输入层和输出层之间也可能有任意数量的隐藏层。每个神经元都有相关的权重和偏差,这些权重和偏差在训练过程中会进行调整,以优化网络的性能。经过训练后,这些网络可以处理新的输入,并根据其学习的模式产生输出。神经网络前馈在机器学习工具包中被广泛使用且很有价值。

什么是前馈神经网络?

神经网络前馈,也称为神经元的多层网络,称为“前馈”,其中信息从一个方向从输入层流向输出层,而不会循环回馈。它由三种类型的层组成:

  • 输入层
    输入层接受输入数据并将其传递到下一层。

  • 隐藏层:
    处理和转换输入数据的一个或多个隐藏层。每个隐藏层都有一组神经元连接到上一层和下一层的神经元。这些层使用激活函数(如 ReLU 或 sigmoid)将非线性引入网络,使其能够学习和建模输入和输出之间更复杂的关系。

  • 输出层
    输出层生成最终输出。根据问题的类型,输出层中的神经元数量可能会有所不同。例如,在二元分类问题中,它只有一个神经元。相比之下,多类分类问题将具有与类数一样多的神经元。

神经网络前馈的目的是近似某些函数。网络的输入是值的向量 x,它逐层通过网络,并转换为输出 y。网络的最终输出预测给定输入的目标函数。网络使用一组参数 θ (theta) 进行预测,该参数在训练期间进行调整,以最小化网络预测与目标函数之间的误差

培训包括调整�θ(theta) 值以最小化错误。这是通过向网络提供一组输入输出对(也称为训练数据)并计算网络预测与每对的真实输出之间的误差来完成的。然后,该误差用于计算与参数相关的误差梯度,这告诉我们如何调整参数以减少误差。这是使用梯度下降等优化技术完成的。一旦训练过程完成,网络就“学习”了该函数,并可用于预测新的输入。

最后,网络存储这个最优值θ(theta),因此它可以使用它来预测新的输入。

  • I:
    输入节点(数据进入神经网络的起点)
  • W:
    连接权重(用于确定节点之间连接的强度)
  • H:
    隐藏节点(网络中处理输入的层)
  • HA:
    激活的隐藏节点(通过预定义函数后隐藏节点的值)
  • O:
    输出节点(网络的最终输出,计算为最后一个隐藏层的加权和)
  • OA:
    激活的输出节点(通过预定义函数后网络的最终输出)
  • B:
    偏置节点(常量值,通常设置为 1.0,用于调整网络的输出)

神经网络前馈中的层

输入层

在神经网络前馈中,输入层是网络的第一层,它负责接受输入数据并将其传递到下一。输入图层不会对数据执行任何计算或转换。它仅充当输入数据的占位符。

输入层具有多个神经元,对应于输入数据中的要素数量。例如,如果我们使用图像作为输入,则输入层中的神经元数量将是图像中的像素数。输入层中的每个神经元都连接到下一层中的所有神经元。

我们还可以使用输入层向输入数据添加信息,例如偏置项。这是通过在输入层添加一个偏置神经元来完成的,该神经元始终输出 1。

神经网络前馈的输入层很简单,它只有一个功能来接受输入数据并将其馈送到下一层。它没有可学习的参数,因此没有必要更新这些参数。它仅作为神经网络工作的起点,计算从下一层开始。

隐藏层

在神经网络前馈中,隐藏层是指输入层和输出层之间的一个层。之所以称为隐藏,是因为它不直接与外部环境交互。相反,它只接收来自输入层或先前隐藏层的输入,然后在将输出传递到下一层之前执行内部计算。

隐藏层的主要功能是提取输入数据的特征和抽象表示。通过具有多个隐藏层,神经网络可以学习输入数据中越来越复杂和抽象的特征。隐藏层中的每个神经元都接收来自前一层神经元的输入,对其进行处理,并将其传递到下一层。这样,隐藏层可以转换输入数据并提取有用的特征,从而使网络能够学习输入和输出之间更复杂和抽象的关系。

激活函数用于隐藏层,以将非线性引入网络。激活函数的常见示例包括 ReLU、sigmoid 和 tanh。激活函数的选择取决于具体问题,但 ReLU 在许多情况下是常用的,因为它往往工作良好并提高了训练速度。

隐藏层中的神经元和层的数量是在网络设计和训练过程中可以调整的超参数之一。一般来说,神经元和层越多,网络可以学习的特征就越复杂和抽象。然而,这也增加了过拟合的风险,需要更多的计算能力来训练网络。

输出层

神经网络前馈中的输出层是网络架构中的最后一层。它的主要功能是根据处理后的输入数据生成网络的最终输出。输出层将最后一个隐藏层的输出作为其输入,并通过对该数据应用一组最终的变换来生成网络的最终输出。

输出层中的神经元数量取决于网络旨在解决的具体问题。例如,在二元分类问题中,输出层通常具有单个神经元,该神经元生成一个介于 0 和 1 之间的概率值,指示输入数据属于正类的概率。同样,在多类分类问题中,输出层的神经元数量与类的数量一样多。每个神经元都会生成一个概率值,指示属于每个类的输入数据的概率。

输出层还具有一组可学习的参数,例如权重和偏差,这些参数在训练期间会更新,以最小化所选的损失函数。

激活函数也应用于输出层,因为它取决于问题。输出层的一些常见激活函数是用于二元分类的 sigmoid 和用于多类分类的 softmax

权重和偏差

在神经网络的前馈中,权重和偏差是在训练期间更新的可学习参数,以最小化所选的损失函数。这些参数特定于网络中的每个神经元,在确定网络的最终输出方面起着至关重要的作用。

权重是控制不同层神经元之间连接强度的参数。它们用于在输入信号通过神经元的激活函数之前对其进行缩放。换句话说,权重决定了特定输入对神经元输出的影响程度。在神经网络前馈中,权重通常表示为矩阵,每层一个矩阵

偏差是控制神经元偏移量或基线激活水平的参数。它们沿 y 轴移动输入信号,然后再将其传递到激活函数。当输入为零时,它们有助于防止所有输出为。与权重一样,偏差也表示为矩阵,每层一个矩阵

权重和偏差在训练期间迭代更新,以最小化损失函数。这通常使用优化算法来完成,例如随机梯度下降或其变体。更新权重和偏差的过程称为反向传播,它是训练神经网络前馈的重要步骤。

激活函数

激活函数是应用于神经网络前馈中神经元输出的数学函数。它将非线性引入网络,使其能够学习和建模输入和输出之间更复杂的关系。如果没有激活函数,神经网络将是线性的,功能较弱,表达能力较差

我们可以在神经网络前馈中使用许多不同的激活函数;一些最常见的包括:

Sigmoid:
Sigmoid 激活函数将任何输入值映射到 0 到 1 之间的值,这对于二元分类问题很有用。

整流线性单元 (ReLU):
它是神经网络中的热门选择。它被定义为 f(x)=max(0,x) ,其中 x 是函数的输入。对于任何输入 x,如果 x 为正,则 ReLU 函数的输出为 x,如果 x 为负,则为 0。此激活函数的计算简单,并且比其他非线性激活函数(如 tanh 或 sigmoid)更快。

tanh(双曲正切):
与 sigmoid 类似,tanh 将值从 -1 映射到 1。

Softmax:
softmax 激活函数将输入值映射到概率分布,这对于多类分类问题很有用。

神经网络中的每个神经元都可以有其激活函数,激活函数的选择将取决于问题、数据集和网络结构。尽管如此,对一层中的所有神经元具有相同的激活功能是很常见的。

值得注意的是,在某些情况下,不需要激活函数。例如,线性激活函数用于回归问题的输出层。

​​​​​​​通用逼近定理

通用近似定理是一个数学结果,它指出,在给定足够的训练数据的情况下,具有包含有限数量神经元的单个隐藏层的神经网络可以近似任何连续函数到任何所需的精度。这个定理很重要,因为它表明神经网络前馈可以表示许多功能,使它们成为许多机器学习任务的强大工具。

该定理指出:

如果隐藏神经元的激活函数是一个非恒定的、有界的、单调递增的连续函数,那么对于任何给定的连续函数,它映射了��Rn自��Rm任何正数ε,都存在一个前馈网络,该网络具有一个隐藏层和有限数量的神经元,因此它计算的函数近似于给定函数,误差最多为 ε。

该定理为使用神经网络作为函数逼近器提供了理论基础,但存在一些实际局限性。其中一个局限性是,在实践中,具有多个隐藏层和大量神经元的神经网络通常比具有单个隐藏层的网络获得更好的性能,并且该定理需要涵盖这种情况。此外,该定理需要考虑训练过程的复杂性,这可能需要大量的数据和计算资源,以及网络泛化到看不见的数据的能力。

训练

要训练神经网络前馈,通常遵循以下步骤:

  • 步骤1:收集并准备数据集
  • 步骤2:定义网络体系结构。
  • 步骤3:初始化权重和偏差
  • 步骤4:通过网络提供训练数据。
  • 步骤5:调整权重和偏差以最小化误差。
  • 步骤7:多个 epoch 重复该过程。
  • 步骤8:此过程通过最小化预测输出与所需目标之间的误差来提高网络在给定任务上的性能。训练完成后,网络可以对新数据进行预测。

反向传播

反向传播是一种用于训练神经网络前馈的算法。它由两个步骤组成:向传播(输入通过网络传递,并计算输出)和后向传播(计算误差,并更新权重以减少误差)。

例如,如果我们想训练一个神经网络来预测房屋的价格,给定其平方英尺、卧室数量等。

反向传播用于调整网络的权重,以最小化预测价格与正确价格之间的差异。

计算梯度

梯度是训练神经网络前馈的一个重要概念,因为它允许调整神经元的权重和偏差,以最小化预测输出和所需目标之间的误差。计算梯度的一种常用方法是通过随机梯度下降等优化算法。该过程涉及计算损失函数的梯度,该梯度涉及每个神经元的权重和偏差,并在梯度的相反方向上调整它们。然后,使用链式法则和偏导数计算梯度,以使用特定的更新规则更新权重和偏差。此过程将重复多个周期,以最大程度地减少错误并提高网络性能。

链式法则

链式法则是一种数学原理,它允许复合函数的导数用构成复合函数的导数来表示。在神经网络前馈的上下文中,链式规则用于计算损失函数与网络中神经元的权重和偏差有关的梯度。梯度是通过递归应用链式规则来计算的,从输出层开始,然后通过隐藏层向后工作到输入层。关于特定层中权重或偏差的损失函数的梯度由该层输出的损失函数的导数乘以该层输出的关于权重或偏差的导数给出。计算完梯度后,我们可以用它来更新权重和偏差,以最小化误差。

使用链式规则进行反向传播

反向传播是一种用于训练神经网络前馈的技术。它通过网络向后传播预测输出和所需目标之间的误差,以更新神经元的权重和偏差。链式规则是反向传播算法的关键部分,因为它可以有效地计算有关权重和偏差的损失函数的梯度。反向传播包括通过网络馈送输入数据,计算误差,使用链式规则将误差传播回网络以计算每一层的梯度,以及使用梯度和特定更新规则更新权重和偏差。此过程将重复多个周期,以最大程度地减少错误并提高网络性能。

渐变消失

梯度消失问题是深度神经网络前馈中可能出现的一个挑战,其中与损失函数有关的权重和偏差的梯度变得非常小,因此难以有效地更新权重和偏差。这可能是由于使用不适当的激活函数或糟糕的网络架构造成的。为了解决前馈网络中梯度消失的问题,更合适的激活函数和技术(如批量归一化和跳过连接)可能会有所帮助。虽然梯度消失问题更常与递归神经网络有关,但它也可能发生在前馈网络中,尤其是深度网络。

训练深度神经网络的优化

  • 权重的初始化(例如使用 Xavier 或 He 方法)可能会影响训练效率
  • 优化器的选择(如 SGD、Adam 或 RProp)可能会影响训练的稳定性和速度
  • 批量大小决定了每次迭代中用于计算梯度的样本数。* 较大的批量大小可以带来更稳定的训练,但可能会更慢,而较小的批量可能更快但不太稳定。
  • 学习率决定了优化器进行的权重更新的步长。高学习率会导致优化器超过最佳权重,而低学习率会导致收敛速度缓慢。
  • 正则化技术(如丢弃和权重衰减)可以防止过度拟合并改善泛化。
  • 监控验证损失,并在验证损失趋于平稳时使用早期停止到结束训练,可以防止过度拟合并提高模型性能。
  • 对训练数据进行预处理和增强,例如对数据进行归一化和添加噪声,可以提高模型的泛化能力。
  • 使用快速 GPU 和针对深度学习优化的软件(如 TensorFlow)可以加快训练速度。

结论

  • 神经网络前馈由输入层、一个或多个隐藏层和输出层组成。权重和偏差通过训练进行调整,以减少预测输出和真实输出之间的误差。
  • 激活函数为网络增加了非线性,使其能够学习数据中更复杂的关系。
  • 前馈过程涉及使用矩阵乘法和激活函数通过网络将输入数据从输入层传递到输出层。
  • 前馈网络可用于各种任务,例如分类、回归和预测
  • 若要提高网络性能,请考虑使用适当的初始化、优化算法、批量大小、学习率和正则化技术来优化训练过程。
  • 数据预处理和增强以及使用优化的硬件和软件也可以增强训练过程。
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/105631
推荐阅读
  

闽ICP备14008679号