微积分在行动:神经网络

人工神经网络是一种计算模型,用于近似输入和输出之间的映射关系。 

它的灵感来源于人脑的结构,同样由相互连接的神经元网络组成,这些神经元在接收到来自相邻神经元的一组刺激后传播信息。

训练神经网络涉及一个同时采用反向传播和梯度下降算法的过程。正如我们将看到的,这两种算法都大量使用了微积分。

在本教程中,您将了解微积分的各个方面是如何应用于神经网络的。 

完成本教程后,您将了解:

  • 人工神经网络由神经元层和连接组成,其中每个连接都被赋予一个权重值。
  • 每个神经元都实现一个非线性函数,将一组输入映射到一个输出激活值。
  • 在训练神经网络时,反向传播和梯度下降算法大量使用了微积分。 

让我们开始吧。 

 

微积分在行动:神经网络
图片由 Tomoe Steineck 拍摄,部分权利保留。

 

教程概述

本教程分为三个部分;它们是:

  • 神经网络简介
  • 神经元的数学原理
  • 训练网络

先决条件

对于本教程,我们假设您已经了解以下内容:

您可以通过点击上面给出的链接来复习这些概念。

神经网络简介

人工神经网络可以被视为函数逼近算法。 

在监督学习环境中,当给定许多代表感兴趣问题的输入观测值及其相应的目标输出时,人工神经网络将寻求近似两者之间存在的映射关系。 

神经网络是一种受人脑结构启发的计算模型。 

– 第65页, 深度学习, 2019。

人脑由一个庞大且相互连接的神经元网络组成(大约一千亿个),每个神经元都包含一个细胞体、一组称为树突的纤维和一个轴突。

人脑中的神经元

树突充当神经元的输入通道,而轴突充当输出通道。因此,神经元将通过其树突接收输入信号,这些树突又连接到其他相邻神经元的(输出)轴突。通过这种方式,足够强的电脉冲(也称为动作电位)可以沿着一个神经元的轴突传输到所有连接到它的其他神经元。这使得信号可以在人脑结构中传播。 

因此,神经元就像一个全或无的开关,它接收一组输入,然后输出一个动作电位或不输出任何东西。 

– 第66页, 深度学习, 2019。

人工神经网络类似于人脑的结构,因为 (1) 它同样由大量相互连接的神经元组成,(2) 旨在通过接收来自相邻神经元的一组刺激并将其映射到输出,从而将信息传播到整个网络,以馈送到下一层神经元。 

人工神经网络的结构通常组织成神经元层(回想树状图的描述)。例如,下图说明了一个全连接神经网络,其中一层中的所有神经元都连接到下一层中的所有神经元。

一个全连接前馈神经网络

输入呈现在网络的左侧,信息向右传播(或流动)到另一端的输出。由于信息在此处在网络中沿前向传播,因此我们也将此类网络称为前馈神经网络。 

输入层和输出层之间的神经元层被称为隐藏层,因为它们无法直接访问。 

两个神经元之间的每个连接(在图中用箭头表示)都被赋予一个权重,该权重作用于流经网络的数据,我们稍后将看到。 

想开始学习机器学习微积分吗?

立即参加我为期7天的免费电子邮件速成课程(附示例代码)。

点击注册,同时获得该课程的免费PDF电子书版本。

神经元的数学原理

更具体地说,假设一个特定的人工神经元(或 Frank Rosenblatt 最初将其命名为感知器)接收 n 个输入,[x1, ..., xn],其中每个连接都被赋予一个相应的权重,[w1, ..., wn]。 

执行的第一个操作是将输入值乘以其对应的权重,并将偏置项 b 添加到它们的和中,从而产生输出 z

z = ((x1 × w1) + (x2 × w2) + … + (xn × wn)) + b

我们可以选择将此操作表示为以下更紧凑的形式:

我们目前执行的这个加权和计算是一个线性操作。如果每个神经元都必须单独执行这个特定的计算,那么神经网络将仅限于学习线性输入-输出映射。 

然而,我们可能想要建模的许多现实世界关系都是非线性的,如果我们试图使用线性模型来建模这些关系,那么模型将非常不准确。 

– 第77页, 深度学习, 2019。

因此,每个神经元执行第二个操作,通过应用非线性激活函数 a(.) 来转换加权和: 

如果我们把偏置项作为一个单独的权重 w0 整合到求和中(注意求和现在从 0 开始),我们可以更紧凑地表示每个神经元执行的操作:

每个神经元执行的操作可以如下所示:

神经元实现的非线性函数

因此,每个神经元可以被认为实现了一个非线性函数,将一组输入映射到输出激活。 

训练网络

训练人工神经网络涉及寻找最能模拟数据中模式的权重集。这是一个同时采用反向传播和梯度下降算法的过程。这两种算法都大量使用了微积分。 

每次网络向前(或向右)遍历时,可以通过损失函数(例如平方误差和 (SSE))计算网络误差,即网络产生的输出与预期真实值之间的差值。然后,反向传播算法计算此误差对权重变化的梯度(或变化率)。为此,它需要使用链式法则和偏导数。 

为简单起见,考虑一个由两个神经元通过单个激活路径连接的网络。如果我们将它们分解,我们会发现这些神经元依次执行以下操作:

两个级联神经元执行的操作

链式法则的首次应用将网络的整体误差与第二个神经元激活函数 a2 的输入 z2 相关联,并随后与权重 w2 相关联,如下所示

您可能会注意到,链式法则的应用除其他项外,还涉及乘以神经元激活函数对其输入 z2 的偏导数。有不同的激活函数可供选择,例如 sigmoid 函数或 logistic 函数。如果我们将 logistic 函数作为示例,那么它的偏导数将计算如下:

因此,我们可以按以下方式计算 ????2

这里,t2 是预期的激活值,通过计算 t2a2 之间的差值,我们计算的是网络生成的激活值与预期真实值之间的误差。 

由于我们正在计算激活函数的导数,因此它应该在整个实数空间上连续且可微分。在深度神经网络的情况下,误差梯度会在大量隐藏层上反向传播。这可能导致误差信号迅速减小到零,特别是如果导数函数的最大值本身就很小(例如,逻辑函数的倒数最大值为 0.25)。这就是所谓的梯度消失问题。ReLU 函数在深度学习中如此受欢迎地用于缓解这个问题,因为其在其域的正部分中的导数等于 1。 

下一个向后的权重位于网络更深处,因此,链式法则的应用可以类似地扩展,以将总误差与权重 w1 连接起来,如下所示

如果再次选择逻辑函数作为激活函数,那么我们可以按以下方式计算 ????1

一旦我们计算了网络误差相对于每个权重的梯度,就可以应用梯度下降算法来更新每个权重,以便在时间 t+1 进行下一次前向传播。对于权重 w1,使用梯度下降的权重更新规则将指定如下

尽管我们在此处考虑了一个简单的网络,但我们所经历的过程可以扩展到评估更复杂、更深层次的网络,例如卷积神经网络(CNN)。 

如果所考虑的网络具有来自多个输入(并可能流向多个输出)的多个分支,则其评估将涉及对每个路径的不同导数链求和,类似于我们之前推导广义链式法则的方式。 

进一步阅读

如果您想深入了解,本节提供了更多关于该主题的资源。

书籍

总结

在本教程中,您了解了微积分的各个方面是如何应用于神经网络的。 

具体来说,你学到了:

  • 人工神经网络组织成神经元和连接层,其中每个连接都被赋予一个权重值。
  • 每个神经元都实现一个非线性函数,将一组输入映射到一个输出激活值。
  • 在训练神经网络时,反向传播和梯度下降算法大量使用了微积分。

你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。

掌握机器学习微积分!

Calculus For Machine Learning

通过微积分概念变得更聪明

...通过更好地理解微积分的符号和术语

在我的新电子书中探索如何实现
机器学习微积分

它提供**自学教程**,并附有关于以下内容的**完整工作代码**:
微分梯度拉格朗日乘子法雅可比矩阵等等...

将恰到好处的微积分知识带到
您的机器学习项目


查看内容

, , , ,

微积分实战:神经网络 的 19 条回复

  1. Nell 2021年8月23日 下午2:00 #

    这太棒了!

    • Adrian Tam
      Adrian Tam 2021年8月24日 上午8:18 #

      谢谢。

  2. Sachin 2021年8月24日 下午4:49 #

    又一篇好文章。你能从头开始写一篇关于多层感知器神经网络的文章吗?

  3. Cesar Lopez 2021年8月28日 上午7:50 #

    我一直感到困惑的一点是如何决定一层需要多少个神经元。例如,你如何决定在第一个隐藏层中(如果是一个全连接层)定义多少个神经元?

    • Adrian Tam
      Adrian Tam 2021年8月28日 上午9:39 #

      这里没有经验法则。你需要进行实验和验证。神经网络是一种近似机器。你拥有的神经元越多,你的模型就越有可能更好地近似现实世界来解决你的问题。然而,神经元越多,资源消耗就越大,或者需要更长的时间才能收敛。这里存在一个权衡。

  4. Zineb 2021年10月9日 上午2:14 #

    好文章

    • Adrian Tam
      Adrian Tam 2021年10月13日 上午5:36 #

      谢谢。

  5. joe 2021年12月6日 上午2:28 #

    我目前正在学习深度学习和神经网络。我想知道如何使用梯度下降来训练我的神经网络。

  6. AlrawdA 2022年2月25日 下午5:45 #

    信息量太大了。

    • James Carmichael 2022年2月26日 下午12:32 #

      感谢您的反馈,AlrawdA!

  7. Jan 2022年11月13日 下午8:29 #

    你好,非常感谢这篇精彩的文章。
    我想知道在最后一个公式(权重更新规则)中,应该是减号而不是加号吗?

    • James Carmichael 2022年11月14日 下午3:33 #

      嗨,Jan……你说的对!感谢您的反馈!

  8. Siddhant Khadgi 2024年2月1日 下午2:36 #

    您好,我有一个问题。为了在更改参数时获得新值,我们是应该将斜率项添加到旧值还是从中减去?

  9. Mamuka Gomarteli 2024年2月11日 上午10:15 #

    我在 ????2 处跟不上了:为什么 d(error)/d(a2)=t2-a2?此外,“预期真实值”这个表达没有意义:你预期的是模型输出,但真实值是实际输出。t2-a2 是误差,但我们需要误差对激活函数的偏导数……

发表回复

Machine Learning Mastery 是 Guiding Tech Media 的一部分,Guiding Tech Media 是一家领先的数字媒体出版商,专注于帮助人们了解技术。访问我们的公司网站以了解更多关于我们的使命和团队的信息。