机器学习和神经网络 - 页 52

 

Adam 优化器(DL 21)



Adam 优化器(DL 21)

本讲座的目的是演示我们如何解决随机梯度下降 (SGD) 的弱点,并介绍已广泛用于训练神经网络的 Adam 优化器。

在 SGD 中,我们通过减去学习率的乘积和损失相对于我们训练的每个批次的权重的偏导数来更新神经网络中的每个权重。这个过程朝着损失的负梯度方向采取步骤,逐渐将其最小化。然而,SGD 可能会遇到几种阻碍其有效性的故障模式。

为了说明这些问题,我们从一个一维的例子开始,我们的目标是最小化损失。在这种情况下,SGD 沿着梯度的方向带我们下坡,逐渐接近最小值。但是,在某些情况下,SGD 无法发挥作用。如果我们达到局部最小值,即梯度为零,我们将不会离开该点。同样,处于梯度也为零的损失函数的平台上会阻碍进展。尽管来自不同批次训练的随机性有时可以帮助避免局部最小值或高原,但它并不能完全解决这些问题。

在更高维度的优化问题中,例如训练具有多个权重维度的神经网络,会出现额外的挑战。在不同方向上存在局部最小值和最大值的鞍点会导致梯度为零,从而减慢学习速度。此外,不同维度上偏导数尺度的差异会导致梯度下降过程中出现之字形行为,从而导致超调和收敛速度变慢。

Adam 优化器通过两个关键思想解决了这些问题。第一个是势头,当朝着同一个方向采取了几个步骤时,它有利于继续朝着同一个方向前进。动量有助于克服高原并可以引导算法远离鞍点。第二个想法涉及维护偏导数和平方偏导数的移动平均值。通过估计偏导数的二阶矩(方差),我们可以对每个维度中采取的步骤进行归一化,减少之字形和超调。

Adam 更新规则将权重更新中的偏导数项替换为偏导数 (v) 的移动平均值除以平方偏导数 (s) 的移动平均值的平方根,以及一个小常数 (epsilon)以避免被零除。此更新规则可确保跨维度的步骤更加平衡,并已证明在训练神经网络方面比普通 SGD 更有效。

Adam 优化器通过合并动量和维持偏导数的移动平均数来解决 SGD 的局限性。这些修改增强了优化器导航局部最小值、平台和鞍点的能力,同时减少了曲折行为和超调。因此,Adam 已成为实践中训练神经网络的热门选择。

 

自动编码器 (DL 22)



自动编码器 (DL 22)

在许多深度学习场景中,我们经常会遇到在一个数据集上训练神经网络并使用该网络的隐藏层对可应用于其他问题或数据集的数据进行编码的想法。这个概念被称为迁移学习。例如,对于残差网络,预训练涉及学习有用的图像处理技术,这些技术以后可以应用于不同的数据集。通过丢弃预训练模型的输出层并为新任务添加新的输出层,我们实质上创建了一个新网络来处理预训练模型产生的编码数据。

词嵌入还用于数据编码,其目标是学习一种在隐藏层中捕获有意义信息的表示。这个想法也延伸到其他各种情况。一个包含这一概念的著名模型是自动编码器。自动编码器在无监督数据上进行训练,其中输入数据和输出数据相同。虽然使用线性回归来解决这个回归问题似乎微不足道,但自动编码器的主要目标是在其隐藏层中学习更紧凑的表示。

通过逐渐减小隐藏层的大小,自动编码器强制网络学习输入数据的压缩表示。如果网络能够始终如一地从这个压缩表示中再现原始输入,它就可以有效地学习数据压缩。例如,如果我们有一个 200x200 像素的图像作为输入,并将其缩减为一个包含 1000 个神经元的隐藏层,然后它可以向后扩展以重现原始图像的近似值,我们就可以实现 20:1 的压缩比。

然而,仅使用神经网络进行数据压缩并不是特别有用,因为有更高效的非基于学习的压缩算法可用。相反,自动编码器的价值在于使用网络的前半部分为其他深度学习任务中的迁移学习生成表示,或者使用后半部分作为解码器从输入集中生成数据示例。

自动编码器在迁移学习中的初步应用在深度学习的早期非常突出。但是,此后已经开发出更好的迁移学习方法。另一方面,利用网络的解码器部分生成数据样本成为许多其他深度学习算法的基础。

最简单的方法是通过最小化隐藏层的大小来实现最大可能的压缩。在这种情况下,提供给解码器的任何合理输入向量都应该生成类似于输入数据分布的数据。然而,确定隐藏层的最佳大小具有挑战性。它可能太小,无法准确再现输入,也可能太大,导致生成与原始数据集不相似的不切实际的数据。

为了解决这个问题,我们可以修改架构以鼓励自动编码器学习类似于随机采样向量的表示。这种修改将我们引向了变分自编码器。在变分自动编码器中,中间的隐藏向量被替换为表示均值和方差的两个向量。训练过程涉及使用正态分布生成随机向量,然后将其与隐藏编码向量相结合,为解码器创建输入。此外,编码器网络的损失包括一个散度项,该散度项鼓励均值和方差保持接近正态分布。这有助于将表示聚集在空间中心周围,使其对于随机抽样更加可靠。因此,变分自动编码器允许我们生成与网络学习的数据分布非常相似的样本。

总之,使用神经网络的隐藏层作为数据编码的概念已经演变成从学习到的概率分布中采样的能力。这为生成对抗网络和生成多样化且有趣的数据打开了大门。

 

生成对抗网络(DL 23)



在上一讲中,我们介绍了变分自动编码器,这是一种生成建模方法。自动编码器的主要目标是学习可用于从生成分布中采样的潜在变量。考虑从分布生成样本的另一种方法是通过计算随机数生成器

在编程中使用随机库时,随机分布的样本是根据随机或伪随机位序列生成的。随机数生成器执行计算以将此位序列转换为来自不同分布的样本。许多分布都建立在这些生成器的均匀分布之上。

这种生成建模的替代方法涉及训练生成器神经网络。生成器将随机噪声作为输入并将其转换为来自数据分布的随机样本。例如,如果数据集包含小狗的图像,则目标是训练神经网络在给定任何输入噪声的情况下生成随机的小狗图片。

为了训练生成器网络,使用了一个称为鉴别器的附加神经网络。鉴别器从真实训练数据或生成器网络的输出中获取输入,并确定输入是真实的还是虚假的。生成器网络旨在生成可以欺骗鉴别器的样本,而鉴别器旨在区分真实数据和假数据。这在两个网络之间造成了敌对关系。

训练过程包括首先训练判别器,让它学习真实数据的分布。然后,生成器被训练以产生类似于真实数据的输出并且可以欺骗鉴别器。训练在鉴别器和生成器之间交替进行,以提高它们的性能。

生成器网络的损失函数可以与判别器的损失函数相反,也可以是完全不同的损失函数。梯度可以通过鉴别器传播回生成器网络,以根据损失函数更新其权重。这允许生成器学习如何改进其目标函数。

生成器和鉴别器网络可以使用不同的损失函数,尤其是当目标是为数据分布中的特定类别生成样本时。生成器可以以标签等附加信息为条件,以生成欺骗鉴别器输出特定类别的样本。

在训练对抗网络时,需要考虑潜在的故障模式。一种故障模式是生成器网络只是从真实数据分布中生成样本,这不会最小化其目标函数。过度拟合是另一个问题,因为生成器可以记住实际数据而不是生成不同的样本。

为避免过度拟合,重要的是限制生成器接触真实数据并确保它没有太多机会记住它。真实数据集不直接输入生成器网络。当生成器影响鉴别器网络中的权重时,生成器间接地从真实数据中学习,然后影响传递回生成器的损失。

如果成功,经过训练的生成器网络可以生成类似于真实数据但又超出真实数据的样本。这对于训练其他神经网络和艺术目的的数据增强很有用。讲座中讨论了用于艺术和数据增强的生成对抗网络的示例。

此外,训练有素的生成器网络在数据增强和艺术之外的各种应用中也很有价值。此类应用之一是生成合成数据以改进神经网络的训练以解决其他重要问题。

通过利用生成器网络,我们可以生成专门为增强神经网络训练而定制的数据样本。例如,如果我们有一个类不平衡的分类问题,我们可以使用生成器为代表性不足的类生成额外的样本。这可以帮助平衡数据集并提高模型学习少数类的能力。

此外,生成对抗网络有可能生成探索不同类别或特征组合之间空间的样本。例如,如果我们为生成器提供 0.5 狗和 0.5 猫等特征的组合,它可以生成结合了狗和猫特征的样本。这种在不同类别或特征之间进行插值的能力为创造性和新颖的输出开辟了可能性。

生成对抗网络已在各个领域得到应用。在计算机视觉领域,它们已被用于生成逼真的图像、增强图像质量,甚至创建深度伪造。在自然语言处理中,它们被用来生成逼真的文本、语言之间的翻译,甚至创建聊天机器人。

重要的是要注意,训练生成对抗网络可能是一项具有挑战性的任务。它需要仔细调整超参数,选择合适的损失函数,并管理生成器和鉴别器网络之间的权衡。此外,确保训练的稳定性和避免模式崩溃(生成器仅生成有限的样本集)是重要的考虑因素。

尽管存在这些挑战,生成对抗网络在生成真实和多样化的样本方面表现出了令人印象深刻的能力。正在进行的研究继续推进该领域,探索新的架构、损失函数和训练技术,以进一步提高这些网络的性能和可靠性。

总之,生成对抗网络为生成建模提供了一个强大的框架。通过以对抗方式训练生成器和鉴别器网络,我们可以学习生成类似于真实数据分布的样本。这为数据增强、创造性应用和改进各种机器学习任务的训练开辟了令人兴奋的可能性。

 

AlphaGo 和 AlphaGo 零 (DL 24)



AlphaGo 和 AlphaGo 零 (DL 24)

AlphaGo 和 AlphaGo Zero 是谷歌子公司 DeepMind 开发的两款围棋智能体。这些系统将深度卷积神经网络与自我对弈强化学习相结合,以实现围棋算法的重大进步。 2016 年,AlphaGo 成为第一个击败人类世界冠军的围棋 AI。在本视频中,我们将探索 DeepMind 如何创建这些系统,并讨论在 AlphaGo 和 AlphaGo Zero 上发表的研究论文中的主要发现。

围棋是一种规则简单的双人游戏:玩家轮流将黑色和白色棋子放在棋盘的空白交叉点上。被对手的棋子包围的棋子或棋子组被捕获并从棋盘上移走。当双方都通过时游戏结束,分数由周围的石头和空路口的数量决定。

为围棋开发 AI 算法需要提前规划多个动作。像深蓝这样的国际象棋引擎通过考虑所有可能的移动顺序并评估最终的棋盘位置来实现这一点。然而,由于游戏的复杂性和更高的分支因素,评估棋盘位置的质量更具挑战性。将搜索空间限制在有前途的走法和确定棋盘位置质量是 AlphaGo 使用深度学习解决的重要问题。

AlphaGo 通过训练深度神经网络来估计棋盘状态的价值和策略来解决这些问题。价值网络预测从给定状态获胜的概率,而策略网络估计移动质量。这些模型通过将注意力限制在有前途的动作上并提供质量估计来指导规划算法。

AlphaGo 和 AlphaGo Zero 的架构不同。最初的 AlphaGo 使用单独的策略和价值网络,而 AlphaGo Zero 使用一个单独的网络,具有用于策略和价值输出的独立头部。两种架构都包含残差块以提取重要的板状态信息。 AlphaGo 的训练数据包括高水平业余爱好者的对局,而 AlphaGo Zero 仅使用自我对弈的数据。

训练价值网络相对简单,使用棋盘状态表示和赢/输标签。训练策略网络更加复杂,因为它需要预测移动质量。 AlphaGo Zero 对此进行了改进,它通过在推出期间根据搜索算法生成的移动质量估计来训练策略网络。随着时间的推移,策略网络学会估计未来几个步骤的移动质量。

AlphaGo 和 AlphaGo Zero 都使用蒙特卡洛树搜索 (MCTS) 作为它们的规划算法。 MCTS 执行 rollouts 以收集有关移动序列值和不确定性的信息。搜索算法使用策略和价值网络来评估棋盘状态并估计移动质量。通过自我对弈强化学习,两个系统都提高了网络的质量估计并成为更强大的棋手。

总的来说,AlphaGo 和 AlphaGo Zero 的发展代表了围棋人工智能的一个重要里程碑。这些系统将深度学习与强化学习和规划算法相结合,以在围棋游戏中实现卓越的性能和战略发挥。

 

计算图(DL 25)



计算图(DL 25)

本讲座的重点是计算图,它是程序中数据流和计算序列的可视化表示。虽然计算图通常用于理解神经网络中的前向和反向传播,但它们可以应用于任何程序。通过使神经网络中的隐式操作显式化,计算图可以更清楚地理解所涉及的计算。

在计算图中,每个节点代表一个计算,例如将权重乘以激活、对加权输入求和、计算激活函数或计算损失。节点之间的连接表示程序中变量之间的依赖关系。通过了解如何对图中的任何节点求导,我们可以表示神经网络中的前向传播和反向传播步骤。

为了计算神经网络中梯度下降所需的偏导数,我们使用链式法则通过网络向后传播导数。在每一步,我们将当前操作的导数乘以前一个节点的导数。当一个节点有多个输出时,我们将来自每个输出的导数相加。

计算图允许我们计算神经网络的输出并计算损失相对于每个权重的偏导数。通过对图进行拓扑排序并传播导数,我们可以确定网络中任何参数的偏导数。

本讲座还提供了计算图示例,说明了中间值和导数是如何计算的。通过将函数分解为更小的计算并将名称分配给中间值,我们可以使用计算图计算函数输出及其偏导数。

此外,计算图不仅可以处理标量变量,还可以处理表示向量、矩阵或张量的变量。通过使用对应于高维对象的变量,例如激活向量和权重矩阵,我们可以将计算图应用于密集连接的神经网络和其他复杂计算。

为了扩展密集连接神经网络的计算图,我们可以引入对应于激活向量或权重矩阵的变量。让我们将整个网络层的激活矢量命名为“a1”,用矢量帽子符号 (^) 表示。同样,我们可以将权重表示为矩阵 W1。

在这个扩展图中,层中每个节点的输入是激活向量 (a1) 和相应的权重矩阵 (W1) 的点积。我们可以将此操作表示为矩阵乘法:a1 * W1。

此外,我们可以引入与层中每个节点关联的偏置向量 (b1)。在应用激活函数之前,将偏置项按元素添加到激活和权重的点积中。

接下来,我们将激活函数(例如 sigmoid 或 ReLU)逐元素应用于生成的向量。让我们将此向量表示为“a2”(带有帽子符号),代表下一层的激活。

我们可以对神经网络中的后续层重复此过程,将节点与边连接起来,并通过图形传播激活和权重。

为了计算这个扩展计算图中的前向传递,我们将从输入值(例如图像的像素强度)开始,并通过图向前传播它们,在每个节点应用矩阵乘法、逐元素加法和激活函数直到我们得到最终的输出。

当谈到反向传播时,目标是计算损失函数相对于网络中每个权重的偏导数。通过扩展计算图,我们可以通过网络向后追踪梯度流,使我们能够使用链式法则有效地计算这些偏导数。

在反向传播过程中,我们从损失函数相对于最终输出的导数开始,并使用链式法则通过图形向后传播。在每个节点,我们将传入的导数乘以相应操作(激活函数、矩阵乘法等)对其输入的导数。

通过遵循这个过程,我们可以计算网络中每个权重的梯度,这允许我们使用梯度下降及其变体等优化算法来更新权重。

总之,扩展计算图以表示密集连接的神经网络使我们能够可视化和计算前向和反向传播步骤。它可以有效地计算梯度,并通过权重更新促进网络的优化。

 

自动微分 (DL 26)



自动微分 (DL 26)

反向模式自动微分 (AD) 是一种用于计算函数梯度的技术。在 Julia 中,Zygote 库提供了自动微分的能力。在 Julia 中处理大型机器学习项目时,通常会使用构建在 Zygote 之上的 Flux 深度学习库。

Zygote 提供了一个“梯度”函数,它接受另一个函数和输入参数,并自动计算这些点的梯度。例如,给定一个函数和输入 (1, 2, -1),Zygote 可以将梯度计算为 (22, 4, -12)。此功能很方便,但类似于您可能在零计划中实现的功能。

自动微分的强大之处在于它能够为更复杂的函数计算梯度。例如,让我们考虑一个函数来计算斐波那契数列的第 n 个元素。使用 Zygote 的梯度函数,我们可以计算这个 Fibonacci 函数的梯度。在输入 (0, 1, 12) 处,关于“a”的偏导数是 89,关于“b”的偏导数是 144。但是,没有关于“n”的偏导数,因为它不是连续的此函数中的变量。

要了解 Zygote 如何计算此类函数的梯度,我们可以研究反向模式自动微分。在反向模式 AD 中,在执行函数时构建计算图,并通过该图反向传播偏导数。为了实现这一点,变量的数值被替换为存储值和用于导数计算的附加信息的对象。

这些对象中可以存储两种类型的信息:(1) 变量的值及其相对于每个输入的偏导数(正向模式 AD),或 (2) 变量的值和计算中的前面的变量以及用于计算其值的函数(反向模式 AD)。对于深度学习,反向模式 AD 更有用,因为它在输出(通常为一个)数量而非输入(例如,神经网络中的权重参数)数量方面的缩放比例更好。

通过创建这些反向模式自动差异对象并在函数评估期间构建计算图,我们可以在以后执行反向传播。中间变量存储计算结果,对象中的父边表示图中节点之间的依赖关系。计算图(包括函数节点和依赖项)是隐式构建的。将链式法则应用于每个节点,导数可以通过图形向后传播。

这种反向模式自动差异对象及其值、父对象和函数的集合通常存储在梯度磁带中。使用这种方法,即使是具有更复杂的中间计算的函数也可以被微分,只要组件的导数是已知的。这些变量的值可以是标量、向量、矩阵或张量,从而能够区分具有各种数据类型的函数。

总而言之,反向模式自动微分得到 Julia 中的 Zygote 等库的支持,使我们能够高效地计算函数的梯度。通过构建计算图并通过它传播导数,我们可以自动化计算梯度的过程,使其适用于深度学习和其他复杂应用。

 

用于机器学习的 Coursera 神经网络 — Geoffrey Hinton - 讲座 1.1 — 为什么我们需要机器学习



第 1.1 讲 — 为什么我们需要机器学习 [机器学习的神经网络]

欢迎来到关于机器学习神经网络的 Coursera 课程!在本课程中,我们将探索神经网络的迷人领域及其在机器学习中的应用。在深入研究神经网络学习算法的复杂性之前,让我们花点时间讨论一下机器学习的重要性及其用途,并提供一些示例来说明其功能。

机器学习是解决传统编程方法难以解决的复杂问题所必需的。例如,从不同的角度、不同的光照条件和杂乱的场景中识别三维物体是一项具有挑战性的任务。复杂性在于我们并不完全了解我们的大脑是如何进行这种识别的,这使得编写明确的程序来解决这些问题具有挑战性。即使我们确实发现了底层程序,要有效实施也可能极其复杂。

另一个例子是检测欺诈性信用卡交易。传统的基于规则的系统很难捕捉到欺诈模式的复杂性,因为它们需要结合许多不可靠的规则,这些规则会随时间不断变化。机器学习提供了一种替代方法,它利用大量示例为给定输入指定正确的输出。学习算法处理这些示例以生成有效处理任务的程序。生成的程序可能看起来与传统的手工制作程序不同,可能包含数百万个加权数字。但是,如果实施得当,它可以很好地泛化到新案例,并通过对更新信息进行再培训来适应不断变化的数据。

机器学习擅长识别模式,例如真实场景中的物体、面部表情或口语。它在识别异常方面也很强大,例如异常的信用卡交易序列或核电站中的异常传感器读数。此外,机器学习在预测任务中很有价值,例如预测股票价格或根据用户过去的选择和其他人的行为预测用户偏好。

在整个课程中,我们将使用 MNIST 手写数字数据库作为标准示例来解释许多机器学习算法。该数据库被广泛使用,并允许对不同方法进行有效比较。通过使用此类任务,我们可以更好地掌握机器学习的基本概念和原理。

这些示例仅触及了机器学习和神经网络卓越功能的皮毛。随着技术进步和现成的计算资源,可以有效地训练和部署复杂的机器学习模型。这些模型有可能处理日益复杂的任务,突破我们可以通过机器学习实现的目标的界限。

在本课程中,我们将深入研究神经网络的复杂性,讨论它们的架构、训练算法和实际实现技术。到课程结束时,您将在神经网络方面打下坚实的基础,并有能力将它们应用到广泛的问题中。

加入我们进入机器学习神经网络世界的激动人心的旅程。准备好扩展您的知识,提高您的技能,并释放这项变革性技术的潜力!

 

第 1.2 讲——什么是神经网络



第 1.2 讲——什么是神经网络 [机器学习的神经网络]

在本视频中,我将讨论大脑中的真实神经元,它们是我们将在本课程中探索的人工神经网络的基础。虽然在整个课程的大部分时间里我们不会过多地关注真实的神经元,但我想首先提供一个简短的概述。

研究神经元网络如何计算有几个原因。首先,它帮助我们了解大脑的功能。虽然直接在大脑上进行实验似乎合乎逻辑,但它是一个复杂而脆弱的器官,不能很好地经受住操纵。因此,计算机模拟对于理解实证结果至关重要。

其次,研究神经网络使我们能够掌握并行计算的概念,其灵感来自于大脑通过相对较慢的神经元组成的庞大网络进行计算的能力。了解这种并行计算方式可能会导致并行计算机的进步,这与传统的串行处理器有很大不同。它对大脑擅长的任务特别有效,例如视觉,但不太适合乘法等任务。

与本课程相关的第三个原因涉及使用受大脑启发的创新学习算法来解决实际问题。即使这些算法不能精确模仿大脑的运作,它们也可能具有很高的价值。因此,虽然我们不会深入研究大脑的功能,但它可以作为灵感的来源,表明大型并行神经元网络可以执行复杂的计算。

在本视频中,我将提供有关大脑工作原理的更多见解。典型的皮层神经元由细胞体、向其他神经元发送信息的轴突和从其他神经元接收信息的树突树组成。在一个神经元的轴突与另一个神经元的树突树连接的地方,我们发现了一个突触。当一个活动尖峰沿着轴突传播时,它会将电荷注入突触后神经元。

当树突树中接收到的电荷使称为轴突丘的区域去极化时,神经元会产生尖峰。一旦去极化,神经元就会沿着其轴突传输尖峰信号,这本质上是一种去极化波。

突触本身有一个有趣的结构。它们包含充满递质化学物质的囊泡。当尖峰到达轴突时,它会触发这些囊泡迁移并释放到突触间隙中。递质分子扩散穿过突触间隙并与突触后神经元膜上的受体分子结合。这种结合改变了分子的形状,在膜上形成孔洞,允许特定离子流入或流出突触后神经元,从而改变其去极化状态。

与计算机内存相比,突触相对较慢,但它们比计算机中的随机存取存储器具有优势。它们体积小、功耗低且适应性强。适应性至关重要,因为它使突触能够通过利用本地可用信号来改变它们的强度。这种适应性有助于学习和执行复杂计算的能力。

那么问题来了:突触如何决定如何改变它们的强度?它们的适配规则是什么?这些都是基本的考虑因素。

总而言之,大脑通过接收来自其他神经元的输入的神经元发挥作用。只有一小部分神经元接收来自感觉受体的输入。神经元通过传递活动尖峰在皮层内进行交流。输入对神经元的影响取决于它的突触权重,可以是正的也可以是负的。这些突触权重进行调整,使整个网络能够学习和执行各种计算,例如对象识别、语言理解、规划和运动控制。

大脑由大约 10^11 个神经元组成,每个神经元具有大约 10^4 个突触权重。因此,大脑包含大量突触权重,其中许多有助于在毫秒内进行持续计算。与现代工作站相比,这为大脑提供了更高的带宽来存储知识。

大脑的另一个有趣的方面是它的模块化。大脑皮层的不同区域最终专注于不同的功能。来自感官的输入在遗传上被定向到特定区域,影响它们的最终功能。大脑的局部损伤会导致特定的影响,例如语言理解能力或物体识别能力的丧失。大脑的灵活性显而易见,因为功能可以重新定位到大脑的其他部分以应对早期损伤。这表明大脑皮层包含一种灵活的、通用的学习算法,可以根据经验适应特定的任务。

总之,大脑一旦学会就会执行快速的并行计算,并具有非凡的灵活性。它类似于 FPGA,其中构建了标准的并行硬件,随后的信息决定了要执行的具体并行计算。传统计算机通过顺序编程实现灵活性,但这需要快速的中央进程来访问程序行并执行冗长的顺序计算。

 

第 1.3 讲——一些简单的神经元模型



第 1.3 讲——一些简单的神经元模型 [机器学习的神经网络]

我将描述一些简单的神经元模型,包括线性神经元、阈值神经元和更复杂的模型。这些模型比真正的神经元更简单,但仍然允许我们创建用于机器学习的神经网络。在理解复杂系统时,我们需要将它们简化和理想化以掌握它们的工作原理。这涉及删除非必要的细节并应用数学和类比。虽然不要忽视基本属性很重要,但研究已知不正确但在实践中仍然有用的模型可能很有价值。例如,神经网络通常使用传达真实值的神经元而不是离散的尖峰信号,即使真实的皮层神经元表现不同。

最简单的神经元类型是线性神经元,它具有计算限制,但可以深入了解更复杂的神经元。它的输出由偏差和输入活动的加权和决定。偏差加上加权活动的图形成一条直线。相比之下,由 McCulloch 和 Pitts 引入的二元阈值神经元会在加权和超过阈值时发送活动尖峰。这些尖峰代表神经元组合产生它们自己的真值的真值。虽然逻辑曾经被视为理解思维的主要范式,但现在认为大脑结合了各种不可靠的证据来源,使得逻辑不太适用。

二进制阈值神经元可以用两个等价方程来描述。总输入是输入活动乘以权重的总和,如果总输入高于阈值,则输出为 1。或者,总输入包括偏置项,如果总输入大于零,则输出为 1。整流线性神经元结合了线性神经元和二元阈值神经元的特性。它计算线性加权和,但应用非线性函数来确定输出。如果总和低于零,则输出为零;如果总和高于零,则输出等于总和,从而产生非线性但线性的零以上输出。

Sigmoid 神经元常用于人工神经网络。它们提供实值输出,该输出是总输入的平滑且有界的函数。经常使用 logistic 函数,其中输出是 1 除以 1 加上总输入的负指数。对于大的正输入,输出为 1,而对于大的负输入,输出为零。 sigmoid 函数具有平滑的导数,有助于神经网络的学习。

随机二元神经元使用与逻辑单元相同的方程,但它们不是将概率输出为实数,而是做出概率决策并输出 1 或 0。概率表示产生尖峰的可能性。如果输入非常正,它们可能会产生一个 1,而非常负的输入可能会产生一个零。整流线性单元遵循类似的原则,但在尖峰生产中引入了随机性。整流线性单元的输出表示产生尖峰的速率,实际尖峰时间由单元内的随机泊松过程决定。


二元神经元和整流线性单元中的这些随机行为将内在随机性引入神经网络。虽然尖峰产生的速率是确定性的,但尖峰的实际时间变成了一个随机过程。这种随机性增加了系统的可变性和随机性。

了解这些不同的神经元模型为我们提供了一系列的计算能力。线性神经元在计算上是有限的,但可以提供对更复杂系统的洞察力。二元阈值神经元允许基于阈值比较进行决策。整流线性神经元结合了线性和非线性,可以同时进行决策和线性处理。 Sigmoid 神经元提供平滑、有界的输出,并且由于其可微性而常用于神经网络。随机二元神经元和整流线性单元将随机性引入系统,允许概率决策并引入可变性。

通过在神经网络中组合不同类型的神经元,我们可以为机器学习任务创建强大的模型。这些网络可以从数据中学习,调整它们的权重和偏差,并根据学习到的模式进行预测或分类。了解这些神经元模型的原理和行为有助于我们设计和训练有效的神经网络。

然而,必须记住,这些神经元模型是大脑中真实神经元的简化抽象。大脑是一个极其复杂和动态的系统,这些模型作为近似来捕捉神经处理的某些方面。虽然它们可能无法捕捉到真实神经元的全部复杂性,但它们为构建计算模型和实现令人印象深刻的机器学习能力提供了有用的工具。

研究不同的神经元模型,包括线性神经元、阈值神经元、整流线性神经元、S 型神经元和随机二元神经元,使我们能够理解各种计算属性和行为。这些模型构成了构建神经网络的基础,使我们能够执行各种机器学习任务。虽然经过简化,但它们提供了对神经系统功能的宝贵见解。

 

第 1.4 讲——学习的一个简单例子



第 1.4 讲——一个学习的简单例子[机器学习的神经网络]

在这个机器学习示例中,我们将探索一个学习识别数字的简单神经网络。在整个过程中,您将使用基本学习算法见证权重的演变。

我们的重点是训练一个简单的网络来识别手写形状。该网络由两层组成:代表像素强度的输入神经元和代表类别的输出神经元。目标是使对应于特定形状的输出神经元在呈现该形状时变得活跃。

每个活动像素为其所属的形状“投票”,并且这些投票具有不同的强度。假设输出单元之间存在竞争,得票最多的形状获胜。我们将在后面的讲座中深入探讨这个竞争方面。

为了可视化权重,我们需要一个可以容纳数千个权重的显示器。我们将为每个输出单元创建小地图,而不是将权重写在输入和输出单元之间的各个连接上。这些地图通过使用黑白斑点表示输入像素的连接强度。每个斑点的面积表示大小,而颜色表示连接的符号。

最初,权重被分配小的随机值。为了提高权重,我们将向网络提供数据并训练它相应地调整权重。当显示图像时,我们将权重从活动像素增加到正确的类别。然而,为了防止权重变得过大,我们还将权重从活动像素递减到网络猜测的类别。这种训练方法引导网络做出正确的决定,而不是坚持其最初的倾向。

在向网络展示数百个训练示例后,我们再次观察权重。它们开始形成规则的图案。随着进一步的训练示例,权重不断变化并最终稳定下来。此时,权重类似于形状的模板。例如,进入“一”单元的权重用作识别一个的模板。同样,进入“九”单元的权重着重于根据特定特征的存在与否来区分九和七。

值得注意的是,由于网络的简单性,这种学习算法只能实现有限的形状判别能力。学习到的权重有效地充当模板,网络根据模板和墨水之间的重叠来确定获胜者。然而,当面对手写数字变化的复杂性时,这种方法就显得不足了。为了解决这个问题,我们需要提取特征并分析它们的排列,因为简单的整个形状模板匹配不能充分解决问题。

总之,该示例演示了如何训练一个简单的神经网络来识别数字。虽然网络的权重不断演变并类似于形状模板,但当面对手写数字的复杂变化时,这种方法的局限性就变得很明显。