Python 与 TensorFlow2 生成式 AI(一)(4)

简介: Python 与 TensorFlow2 生成式 AI(一)

Python 与 TensorFlow2 生成式 AI(一)(3)https://developer.aliyun.com/article/1512063

默认情况下,GradientTape() 使用的内存资源在调用 gradient() 后被释放;但是,你也可以使用 persistent 参数来存储这些结果²³:

x = tf.constant(3.0)
with tf.GradientTape(persistent=True) as t:
  t.watch(x)
  y = x * x
  z = y * y
dz_dx = t.gradient(z, x)  # 108.0 (4*x³ at x = 3)
dy_dx = t.gradient(y, x)  # 6.0 

现在你已经看到 TensorFlow 如何实际计算梯度以评估反向传播,让我们回顾一下反向传播技术是如何随着时间的推移而发展,以应对实际实现中的挑战的细节。

反向传播的缺陷

虽然反向传播过程提供了一种以合理方式更新网络内部权重的方法,但它存在几个缺点,使得深度网络在实践中难以使用。其中一个是 梯度消失 的问题。在我们推导反向传播公式时,你看到网络中更深层次的权重的梯度是来自更高层的连续偏导数的乘积。在我们的例子中,我们使用了 Sigmoid 函数;如果我们绘制出 Sigmoid 的值及其一阶导数,我们可以看到一个潜在的问题:


图 3.6:Sigmoid 函数及其梯度²⁴

随着 Sigmoid 函数的值向极端值(0 或 1,代表“关闭”或“打开”)增加或减少,梯度的值趋近于零。这意味着从隐藏激活函数 y 的这些梯度得到的更新值 wb 会趋向于零,使得权重在迭代之间变化很小,使得反向传播过程中隐藏层神经元的参数变化非常缓慢。很显然,这里的一个问题是 Sigmoid 函数饱和;因此,选择另一个非线性函数可能会规避这个问题(这确实是作为 ReLU 提出的解决方案之一,我们稍后会讨论)。

另一个问题更微妙,与网络如何利用其可用的自由参数有关。正如你在 第一章生成型 AI 简介:“从模型中“绘制”数据 中看到的,变量的后验概率可以计算为似然和先验分布的乘积。我们可以将深度神经网络看作是这种概率的图形表示:神经元的输出,取决于其参数,是所有输入值和这些输入上的分布(先验)的乘积。当这些值变得紧密耦合时就会出现问题。举个例子,考虑一下头痛的竞争性假设:


图 3.7:解释逆效应

如果一个病人患有癌症,那么关于他们是否感冒的证据是如此压倒性,以至于没有提供额外价值;实际上,两个先前的假设的价值由于其中一个的影响而变得耦合。这使得计算不同参数的相对贡献变得棘手,特别是在深层网络中;我们将在我们关于《第四章,教网络生成数字》中讨论受限玻尔兹曼机和深度信念网络的问题。正如我们在该章节中将更详细地描述的那样,一项 2006 年的研究²⁵展示了如何抵消这种效应,这是对深度神经网络中可行推断的最早的一次突破,这一突破依赖于产生手绘数字图像的生成模型。

除了这些问题之外,在 20 世纪 90 年代和 21 世纪初,神经网络更广泛应用的其他挑战还包括像支持矢量机²⁶、梯度和随机梯度提升模型²⁷、随机森林²⁸甚至是惩罚回归方法如 LASSO²⁹和 Elastic Net³⁰这样的方法,用于分类和回归任务。

虽然理论上,深度神经网络的表征能力可能比这些模型更强,因为它们通过连续层构建输入数据的分层表示,与通过单一转换给出的“浅”表示如回归权重或决策树相反,但在实践中,训练深层网络的挑战使得这些“浅”方法对实际应用更有吸引力。这也与较大网络需要调整成千上万甚至是百万参数的事实相搭上了较大计算资源的事实,使这些实验在云供应商提供的廉价计算资源的爆炸之前是不可行的,包括 GPU 和 TPU 特别适用于快速矩阵计算。

现在我们已经介绍了训练简单网络架构的基础知识,让我们转向更复杂的模型,这些模型将构成书中许多生成模型的基础:CNNs 和序列模型(RNNs,LSTMs 等)。

网络的种类:卷积和递归

到目前为止,我们主要通过引用前馈网络来讨论神经网络的基础知识,其中每个输入都连接到每个层的每个输出。虽然这些前馈网络有助于说明深层网络的训练方式,但它们只是现代应用中使用的一类更广泛架构的一部分,包括生成模型。因此,在讨论使训练大型网络变得实用的一些技术之前,让我们回顾一下这些替代的深度模型。

视觉网络:卷积架构

正如本章开头所指出的,深度神经网络模型的灵感之一是生物神经系统。当研究人员试图设计可以模仿视觉系统功能的计算机视觉系统时,他们转向了视网膜的结构,这是在 20 世纪 60 年代神经生物学家 David Huber 和 Torsten Weisel 的生理学研究中揭示的。³¹ 正如以前所描述的,生理学家 Santiago Ramon Y Cajal 提供了神经结构如视网膜被安排在垂直网络中的视觉证据。


图 3.8:视网膜的“深层神经网络”^(32 33)

Huber 和 Weisel 研究了猫的视网膜系统,展示了它们对形状的知觉是由排列在一列中的单个细胞的活动所组成的。每一列细胞都被设计用来检测输入图像中边缘的特定方向;复杂形状的图像是由这些简单图像拼接在一起的。

早期的 CNNs

这种列的概念启发了对 CNN 结构的早期研究³⁴。与前馈网络中学习单元之间的个体权重不同,这种结构(图 3.9)使用了专门用于检测图像中特定边缘的一组神经元中的共享权重。网络的初始层(标记为 H1)由每个 64 个神经元的 12 组组成。这些组中的每个都是通过在 16 x 16 像素的输入图像上传递一个 5 x 5 的网格来得到的;这个组中的每一个 64 个 5 x 5 的网格共享相同的权重,但与输入的不同空间区域相关联。你可以看到,如果它们的接受域重叠了两个像素,那么每个组中必须有 64 个神经元来覆盖输入图像。

当这 12 组神经元在 H1 层中结合在一起时,它们形成了 12 个表示图像中特定边缘的存在或不存在的 8 x 8 网格(图 3.9)。这种权重共享在直观上是有意义的,因为由权重表示的卷积核被指定用来检测图像中的不同颜色和/或形状,不管它出现在图像的哪个位置。这种降采样的效果是一定程度上的位置不变性;我们只知道边缘发生在图像某个区域内,但由于降采样导致的分辨率降低,我们无法知道确切位置。因为它们是通过将一个 5 x 5 的矩阵(卷积核)与图像的一部分相乘得到的,这种操作被用在图像模糊和其他转换中,这 5 x 5 的输入特征被称为 卷积核,也给网络起了名字。


图 3.9:卷积神经网络³⁵

当我们有了这 12 个缩小了的 8 x 8 图像时,下一层(H2)还有 12 组神经元;在这里,卷积核是 5 x 5 x 8——它们横跨从H1上的一个 8 x 8 地图,遍及 12 个中的 8 个组。由于一个 5 x 5 的网格可以在 8 x 8 的网格上上下移动四次以覆盖 8 x 8 网格中的所有像素,我们需要 16 个这样的 5 x 5 x 8 组的神经元。

就像视觉皮层中更深层的细胞一样,网络中的更深层对来自不同边缘检测器的多个列进行整合,将信息组合在一起。

最后,该网络的第三个隐藏层(H3)包含 30 个隐藏单元和H2中的 12 x 16 个单元之间的全全连接,就像在传统的前馈网络中一样;最终的 10 个输出单元将输入图像分类为 10 个手写数字之一。

通过权重共享,在该网络中的自由参数总数得到了减少,虽然在绝对术语中仍然很大。虽然反向传播成功地用于此任务,但需要为一组成员受限的图像设计精心的网络,这些图像具有局限性的结果——对于如检测来自数百或数千个可能类别的对象等实际应用,需要采用其他方法。

AlexNet 和其他 CNN 创新技术

2012 年的一篇文章产生了最先进的结果,使用一个被称为 AlexNet 的模型将 ImageNet 中的 130 万张图像分类为 1000 种分类。这些模型要实现训练,需要采用一些后来的创新技术。(36)如我之前提到的一样,一个是使用 ReLU(37)替代 sigmoid 或双曲正切函数。ReLU 是以下形式的函数:


与 sigmoid 函数或 tanh 相比,在函数饱和时,其导数会缩小至 0,而 ReLU 函数具有恒定的梯度和 0 处的不连续性(图 3.10)。这意味着梯度不会饱和,导致网络的深层训练更慢,导致优化困难。


图 3.10:替代激活函数的梯度(38)

虽然 ReLU 函数具有非消失梯度和低计算要求的优势(因为它们只是阈值线性变换),但缺点是如果输入低于 0,则它们可能会“关闭”,导致再次出现 0 梯度。这个问题在之后的工作中得到解决,在 0 以下引入了一个“泄漏”。(39)


进一步的改进是使此阈值自适应,具有斜率为a参数化泄漏 ReLUPReLU)。(40)


AlexNet 使用的另一个技巧是辍学。⁴¹ 辍学的想法受到合奏方法的启发,在合奏方法中,我们对许多模型的预测进行平均,以获得更稳健的结果。显然,对于深度神经网络来说,这是不可行的;因此,一个妥协方案是以 0.5 的概率随机将某些神经元的值设为 0。这些值在每次反向传播的前向传递中被重置,允许网络有效地对不同的架构进行采样,因为“辍学”的神经元在该传递中不参与输出。


图 3.11:辍学

AlexNet 中使用的另一个增强是局部响应归一化。尽管 ReLU 不像其他单元那样饱和,模型的作者仍然发现限制输出范围有价值。例如,在一个单个卷积核中,他们使用相邻卷积核的值对输入进行归一化,这意味着总体响应被重新缩放⁴²:


其中a是图像上给定xy位置处的非标准化输出,j的总和是在相邻卷积核上,Bk和 alpha 是超参数。这种重新缩放让人想起后来被广泛应用于卷积和其他神经网络架构中的一种创新,批量归一化⁴³。批量归一化还对网络内部的“原始”激活应用转换:


其中x是非标准化输出,By是尺度和偏移参数。这种转换被广泛应用于许多神经网络架构,以加速训练,尽管它的有效原因仍然是争论的话题。⁴⁴

现在你对使大型 CNN 训练成为可能的一些方法论进步有了一些了解,让我们来研究 AlexNet 的结构,看看我们将在后面章节中实现的生成模型中使用的一些额外的架构组件。

AlexNet 架构

尽管图 3.12中的 AlexNet 架构看起来令人生畏,但一旦我们将这个大型模型分解为单独的处理步骤,就不那么难理解了。让我们从输入图像开始,跟踪通过每个后续神经网络层的一系列转换为每个图像计算输出分类的方法。


图 3.12:AlexNet

输入到 AlexNet 的图像大小为 224 x 224 x 3(对于 RGB 通道)。第一层由 96 个单元和 11 x 11 x 3 卷积核组成;输出经过响应归一化(如前所述)和最大化池化。最大化池化是一种采取n x n网格上的最大值来记录输入中是否“任何位置”出现模式的操作;这又是一种位置不变性的形式。

第二层也是一组规模为 5 x 5 x 8 的卷积,以 256 个为一组。第三层到第五层都有额外的卷积,没有规范化,接着是两个全连接层和一个输出大小为 1,000 表示 ImageNet 中可能的图像类。AlexNet 的作者使用了几个 GPU 来训练模型,这种加速对输出非常重要。


图 3.13:来自 AlexNet 的图像核

在初始的 11 x 11 x 3 卷积中,即训练过程中学到的特征中(图 3.13),我们可以看到可识别的边缘和颜色。虽然 AlexNet 的作者没有展示出网络中更高层次的神经元合成这些基本特征的例子,但另一项研究提供了一个示例,在该研究中,研究人员训练了一个大型的 CNN 来对 YouTube 视频中的图像进行分类,得到了网络最上层的一个神经元,它似乎是一个猫探测器(图 3.14)。


图 3.14:从 YouTube 视频中学习到的猫探测器⁴⁵

这个概述应该让你明白 CNN 架构看起来的样子,以及什么样的发展使得它们随着时间的推移而成为图像分类器或基于图像的生成模型的基础更加可行。现在我们将转向另一类更专业的架构——RNN,这种架构用于开发时间或基于序列的模型。

序列数据的网络

除了图像数据,自然语言文本也一直是神经网络研究中的一个热门话题。然而,与我们迄今为止检查的数据集不同,语言有一个重要的顺序与其含义相关。因此,为了准确地捕捉语言或时间相关数据中的模式,有必要使用专门设计用于此目的的网络。

RNN 和 LSTM

让我们想象一下,我们试图预测句子中的下一个词,给定到目前为止的词。试图预测下一个词的神经网络不仅需要考虑当前词,还需要考虑可变数量的先前输入。如果我们只使用一个简单的前馈 MLP,该网络实际上会将整个句子或每个词都处理为一个向量。这引入了这样一个问题:要么必须将可变长度的输入填充到一个共同的长度,并且不保留任何相关性的概念(也就是说,在生成下一个预测时,句子中哪些单词比其他单词更相关),或者在每一步中只使用上一个词作为输入,这样会丢失句子其余部分的上下文和提供的所有信息。这种问题激发了“原生”RNN⁴⁶,它在计算一个神经元的输出时,不仅考虑当前输入,还考虑前一步的隐藏状态:


可以将这个过程想象为每一层递归地馈送到下一个时间步骤的序列中。实际上,如果我们“展开”序列的每个部分,我们最终得到一个非常深的神经网络,其中每一层共享相同的权重。⁴⁷


图 3.15:展开的 RNN⁴⁸

训练深度前馈网络所具有的困难也同样适用于循环神经网络;使用传统激活函数时,梯度往往在长距离上衰减(或者如果梯度大于 1,则爆炸)。

然而,与前馈网络不同,RNNs 不是用传统的反向传播进行训练,而是用一种称为时间反向传播BPTT)的变体:网络被展开,如前所述,使用反向传播,对每个时间点的误差进行平均处理(因为每一步都有一个“输出”,即隐藏状态)。⁴⁹此外,在 RNNs 的情况下,我们遇到的问题是网络的记忆非常短暂;它只包含最近单元的信息,而当前单元之前的信息则难以保持长期上下文。对于翻译等应用来说,这显然是一个问题,因为句子末尾的单词的解释可能依赖于句子开头的术语,而不仅仅是直接前面的术语。

LSTM 网络的开发是为了使 RNNs 能够在长序列上保持上下文或状态。⁵⁰


图 3.16:LSTM 网络

在传统的 RNN 中,我们只保留来自前一步隐藏单元激活的短期记忆h。除了这个短期记忆外,LSTM 架构引入了一个额外的层c,即“长期”记忆,它可以持续多个时间步长。从某种意义上说,这种设计让人想起了电容器,它可以使用c层来储存或保持“电荷”,一旦达到某个阈值就释放它。为了计算这些更新,一个 LSTM 单元由许多相关的神经元或门组成,这些门在每个时间步骤上一起作用来转换输入。

给定输入向量x和前一时刻t-1的隐藏状态h,在每个时间步长,LSTM 首先计算了一个值,从 0 到 1 表示c的每个元素中“遗忘”了多少信息:


我们进行第二次类似的计算来确定要保留输入值的哪些部分:


现在我们知道了c的哪些元素被更新了;我们可以计算这个更新如下:


其中是一个 Hadamard 积(逐元素乘法)。本质上,这个方程告诉我们如何使用 tanh 变换计算更新,使用输入门过滤它们,并使用忘记门将它们与前一个时间步的长期记忆结合起来,以潜在地过滤掉旧值。

要计算每个时间步的输出,我们计算另一个输出门:


并且在每一步计算最终输出时(隐藏层作为下一步的短期记忆提供给下一步),我们有:


提出了许多这种基本设计的变体;例如,“窥视孔”LSTM 用c(t-1)替代了h(t-1)(因此每个操作都可以“窥视”长期记忆单元),⁵¹而 GRU⁵²通过删除输出门简化了整体设计。这些设计的共同之处在于,它们避免了训练 RNN 时出现的梯度消失(或爆炸)困难,因为长期记忆充当缓冲区,以维持梯度并在许多时间步骤上传播神经元激活。

构建更好的优化器

到目前为止,在本章中,我们已经讨论了几个例子,其中更好的神经网络架构实现了突破;然而,与此同样(甚至更加)重要的是用于在这些问题中最小化误差函数的优化过程,通过选择产生最低误差的参数来“学习”网络的参数。回顾我们对反向传播的讨论,这个问题有两个组成部分:

  • 如何初始化权重:在许多历史应用中,我们看到作者使用了一定范围内的随机权重,并希望通过反向传播的使用从这个随机起始点至少得到一个局部最小化的损失函数。
  • 如何找到局部最小损失:在基本的反向传播中,我们使用梯度下降和固定学习率以及一阶导数更新来遍历权重矩阵的潜在解空间;然而,有充分的理由相信可能存在更有效的方法来找到局部最小值。

事实上,这两者都被证明是深度学习研究进展的关键考虑因素。

梯度下降到 ADAM

正如我们在反向传播的讨论中看到的那样,1986 年提出的用于训练神经网络的原始版本在获取梯度并更新权重之前对整个数据集进行了损失平均。显然,这相当慢,并且使模型的分发变得困难,因为我们无法分割输入数据和模型副本;如果我们使用它们,每个副本都需要访问整个数据集。

相比之下,SGD 在n个样本后计算梯度更新,其中n可以是从 1 到N(数据集的大小)的范围。在实践中,我们通常执行小批量梯度下降,其中n相对较小,而且我们在每个 epoch(数据的一次遍历)后随机分配数据给n批次。

但是,SGD 可能会很慢,导致研究人员提出加速搜索最小值的替代方案。正如在原始反向传播算法中所见,一个想法是使用一种记住先前步骤并在前进方向继续的指数加权动量形式。已经有提出了各种变体,如Nesterov Momentum,它增加了一个项来增加这种加速^(53)。


与原始反向传播算法中使用的动量项相比,将当前动量项加到梯度中有助于保持动量部分与梯度变化保持一致。

另一种优化方法,称为自适应梯度Adagrad)^(54),通过该参数梯度的平方和(G)来缩放每次更新的学习率;因此,经常更新的元素被降采样,而不经常更新的元素被推动以更大的幅度进行更新:


这种方法的缺点是,随着我们继续训练神经网络,总和G将无限增加,最终将学习率缩小到一个非常小的值。为了解决这个缺点,提出了两种变体方法,RMSProp^(55)(经常应用于 RNN)和 AdaDelta^(56),在计算G时加入固定宽度窗口的 n 步。

自适应动量估计ADAM)^(57)可以看作是一种尝试将动量和 AdaDelta 结合起来;动量计算用于保留过去梯度更新的历史,而在 AdaDelta 中使用的固定更新窗口内的衰减平方梯度总和用于调整结果梯度的大小。

这里提到的方法都具有一阶的特性:它们只涉及损失对输入的一阶导数。虽然计算简单,但这可能导致在神经网络参数的复杂解空间中导航时出现实际挑战。如图 3.17所示,如果我们将权重参数的景观视为一条沟壑,那么一阶方法要么在曲率快速变化的区域移动得太快(顶部图像),超调极小值,要么在曲率较低的极小值“沟壑”中移动得太慢。理想的算法将考虑曲率和曲率变化的变化速率,允许优化器顺序方法在曲率变化特别缓慢时采用更大的步长,反之亦然(底部图像)。


图 3.17:复杂的景观和二阶方法^(58)

因为它们利用了导数的改变速率(二阶导数),这些方法被称为二阶,并且在优化神经网络模型中已经取得了一定的成功^(59)。

然而,每次更新所需的计算量比一阶方法大,因为大多数二阶方法涉及大型矩阵求逆(因此内存利用率高),需要近似来使这些方法可扩展。然而,最终,实际优化网络的突破之一不仅来自于优化算法,还包括我们如何初始化模型中的权重。

Xavier 初始化

正如之前所述,在早期研究中,常常用一定范围的随机值初始化神经网络的权重。2006 年在深度置信网络的训练中取得的突破,正如您将在第四章教授网络生成数字中看到的那样,使用了预训练(通过生成建模方法)来在执行标准反向传播之前初始化权重。

如果您曾经在 TensorFlow Keras 模块中使用过一个层,您会注意到层权重的默认初始化是从截断的正态分布或均匀分布中抽取的。这个选择是从哪里来的?正如我之前描述的,使用 S 型或双曲线激活函数的深度网络的一个挑战是,它们倾向于变得饱和,因为这些函数的值受到非常大或负的输入的限制。我们可以解释初始化网络的挑战是保持权重在这样一个范围内,以至于它们不会使神经元的输出饱和。另一种理解方法是假设神经元的输入和输出值具有类似的方差;信号在通过神经元时不会被大幅放大或减小。

在实践中,对于一个线性神经元,y = wx + b,我们可以计算输入和输出的方差为:


b是常数,因此我们剩下:


由于权重矩阵中有N个元素,并且我们希望var(y)等于var(x),这给出了:


因此,对于权重矩阵w,我们可以使用方差为 1/N(输入和输出单元的平均数量,因此权重的数量)的截断正态分布或均匀分布。⁶⁰变体也已经应用于 ReLU 单元:⁶¹这些方法被称为它们原始作者的名字,如 Xavier 或 He 初始化。

总的来说,我们回顾了 TensorFlow 2 中底层使用的几种常见优化器,并讨论了它们如何改进基本的 SGD 形式。我们还讨论了聪明的权重初始化方案如何与这些优化器共同作用,使我们能够训练越来越复杂的模型。

摘要

在本章中,我们涵盖了深度学习的基本词汇 - 如起始对感知器和多层感知器的研究导致了简单的学习规则被放弃,而采用反向传播。我们还研究了专门的神经网络架构,如基于视觉皮层的卷积神经网络(CNNs),以及专门用于序列建模的循环网络。最后,我们检查了最初为反向传播提出的梯度下降算法的变体,这些变体的优点包括动量,并描述了将网络参数放在更容易导航到局部最小值范围的权重初始化方案。

在这种背景下,我们将着手进行生成模型的项目,首先是使用深度信念网络生成 MNIST 数字的项目,见第四章教授网络生成数字

参考文献

  1. López-Muñoz F., Boya J., Alamo C. (2006). 神经元理论,神经科学的基石,颁给圣地亚哥·拉蒙·伊·卡哈尔的诺贝尔奖 100 周年。《大脑研究公报》. 70 (4–6):391–405. pubmed.ncbi.nlm.nih.gov/17027775/
  2. Ramón y Cajal, Santiago (1888). 鸟类中枢神经中枢结构
  3. McCulloch, W.S., Pitts, W. (1943). 神经活动中所固有的思想的逻辑演算。数理生物物理学通报5, 115–133. doi.org/10.1007/BF02478259
  4. 请注意:Rashwan M., Ez R., reheem G. (2017). 阿拉伯语言语音识别的计算智能算法.《开罗大学工程领域杂志》. 12. 886-893. 10.21608/auej.2017.19198. wwwold.ece.utep.edu/research/webfuzzy/docs/kk-thesis/kk-thesis-html/node12.html
  5. Rashwan M., Ez R., reheem G. (2017). 阿拉伯语言语音识别的计算智能算法.《开罗大学工程领域杂志》. 12. 886-893. 10.21608/auej.2017.19198. wwwold.ece.utep.edu/research/webfuzzy/docs/kk-thesis/kk-thesis-html/node12.html
  6. 人工神经元. 维基百科. 检索日期:2021 年 4 月 26 日,网址:en.wikipedia.org/wiki/Artificial_neuron
  7. Shackleton-Jones Nick. (2019 年 5 月 3 日).人们如何学习:设计教育和培训,以提高绩效。Kogan Page。英国伦敦
  8. Hebb, D. O. (1949). 行为组织:神经心理学理论。纽约:Wiley 和 Sons 出版社
  9. Rosenblatt, Frank (1957). 感知器-一个认知和识别自动装置。报告 85-460-1. 康奈尔航空实验室。
  10. Marvin Minsky 和 Seymour Papert,1972 年(第二版,第一版 1969 年)《感知器:计算几何的介绍》,MIT 出版社,剑桥,马萨诸塞州
  11. Hassan, Hassan & Negm, Abdelazim & Zahran, Mohamed & Saavedra, Oliver. (2015). 利用高分辨率卫星图像评估人工神经网络进行浅水湖泊水深估计:以 El Burullus Lake 为例. 国际水技术期刊. 5.
  12. Marvin Minsky 和 Seymour Papert, 1972 (第二版带有更正,第一版 1969) 感知机:计算几何简介, The MIT Press, 剑桥 MA
  13. Pollack, J. B. (1989). “无意伤害:感知机扩展版评论”. 数学心理学杂志. 33 (3): 358–365.
  14. Crevier, Daniel (1993), AI:人工智能的动荡探索, 纽约,纽约: BasicBooks.
  15. Cybenko, G. 通过 S 型函数的叠加进行逼近. 数学. 控制信号系统 2, 303–314 (1989). doi.org/10.1007/BF02551274
  16. Goodfellow, Ian; Bengio, Yoshua; Courville, Aaron (2016). 6.5 反向传播和其他差分算法. 深度学习. MIT 出版社. pp. 200–220
  17. Rumelhart, D., Hinton, G. & Williams, R. (1986) 通过反向传播误差学习表示. 自然 323, 533–536. doi.org/10.1038/323533a0
  18. Guess A R., (2015 年 11 月 10 日). Google 开源机器学习库 TensorFlow. DATAVERSITY. www.dataversity.net/google-open-sources-machine-learning-library-tensorflow/
  19. Berland (2007). ReverseaccumulationAD.png. 维基百科. 可从: commons.wikimedia.org/wiki/File:ReverseaccumulationAD.png
  20. 自动微分. 维基百科. en.wikipedia.org/wiki/Automatic_differentiation
  21. R.E. Wengert (1964). 一个简单的自动导数评估程序. Comm. ACM. 7 (8): 463–464.;Bartholomew-Biggs, Michael; Brown, Steven; Christianson, Bruce; Dixon, Laurence (2000). 算法的自动微分. 计算与应用数学杂志. 124 (1–2): 171–190.
  22. TensorFlow 作者 (2018). automatic_differentiation.ipynb. 可从: colab.research.google.com/github/tensorflow/tensorflow/blob/r1.9/tensorflow/contrib/eager/python/examples/notebooks/automatic_differentiation.ipynb#scrollTo=t09eeeR5prIJ
  23. TensorFlow 作者. 梯度和自动微分简介. TensorFlow. 可从: www.tensorflow.org/guide/autodiff
  24. Thomas (2018). 梯度消失问题和 ReLU – TensorFlow 调查. 机器学习冒险。查阅:adventuresinmachinelearning.com/vanishing-gradient-problem-tensorflow/
  25. Hinton, Osindero, Yee-Whye (2005). 深度信念网络的快速学习算法. 多伦多大学,计算机科学。查阅:www.cs.toronto.edu/~fritz/absps/ncfast.pdf
  26. Cortes, C., Vapnik, V. 支持向量网络. 机器学习 20, 273–297 (1995). doi.org/10.1007/BF00994018
  27. Friedman, J. H. (February 1999). 贪婪函数逼近:梯度增强机 (PDF)
  28. Breiman, L. 随机森林. 机器学习 45, 5–32 (2001). doi.org/10.1023/A:1010933404324
  29. Tibshirani R. (1996). 通过套索实现回归收缩和选择. 英国皇家统计学会杂志。Wiley. 58 (1): 267–88.
  30. Zou H., Hastie T. (2005). 通过弹性网络实现正规化和变量选择. 英国皇家统计学会杂志 B 系列:301–320
  31. Hubel D. H., Wiesel T. N. (1962) 感觉野,视交互及猫脑视觉皮层功能体系结构. 生理学杂志,1962, 160: 106-154。doi.org/10.1113/jphysiol.1962.sp006837
  32. charlesfrye.github.io/FoundationalNeuroscience/img/corticalLayers.gif
  33. Wolfe, Kluender, Levy (2009). 感知和知觉. 坎伯兰:Sinauer Associates Inc.。
  34. LeCun, Yann, et al. 反向传播应用于手写邮政编码识别. 神经计算,1.4 (1989): 541-551.
  35. LeCun, Yann, et al. 反向传播应用于手写邮政编码识别. 神经计算,1.4 (1989): 541-551.
  36. 使用深度卷积神经网络进行 ImageNet 分类www.nvidia.cn/content/tesla/pdf/machine-learning/imagenet-classification-with-deep-convolutional-nn.pdf
  37. Nair V., Hinton G E. (2010). 修正线性单元改进限制玻尔兹曼机. 机器学习国际会议论文集,2010 年,以色列海法。
  38. Agarap A F. (2019, September 5). 通过梯度噪音添加来避免伴随梯度消失的问题. 朝着数据科学。towardsdatascience.com/avoiding-the-vanishing-gradients-problem-96183fd03343
  39. Maas A L., Hannun A Y., Ng A Y. (2013). 修正线性非线性改进神经网络声学模型. 机器学习国际会议论文集,2013 年,美国佐治亚州亚特兰大市。
  40. He,K.,Zhang,X.,Ren,S.,Sun,J.(2015)。 深入挖掘整流器:在 ImageNet 分类上超越人类水平性能。 arXiv:1502.01852。arxiv.org/abs/1502.01852
  41. Hinton,G E.,Srivastava,N.,Krizhevsky,A.,Sutskever,I.,Salakhutdinov,R R.(2012)。 通过防止特征检测器的协同适应来改进神经网络。 arXiv:1207.0580。arxiv.org/abs/1207.0580
  42. Krizhevsky A.,Sutskever I.,Hinton G E.(2012)。 使用深度卷积神经网络的 ImageNet 分类。神经信息处理系统 25(NIPS 2012)的一部分。papers.nips.cc/paper/2012/file/c399862d3b9d6b76c8436e924a68c45b-Paper.pdf
  43. Ioffe,S.,Szegedy,C.(2015)。 批量归一化:通过减少内部协变量转移加速深层网络训练。 arXiv:1502.03167。 arxiv.org/abs/1502.03167
  44. Santurkar,S。,Tsipras,D。,Ilyas,A。,Madry,A.(2019)。 批量归一化如何帮助优化? arXiv:1805.11604。 arxiv.org/abs/1805.11604
  45. Dean J.,Ng,A Y.(2012)。 使用大规模脑模拟进行机器学习和人工智能。The Keyword | Google。blog.google/technology/ai/using-large-scale-brain-simulations-for/
  46. Rumelhart,D.,Hinton,G.和 Williams,R.(1986 年)通过反向传播错误学习表示自然 323,533–536。 doi.org/10.1038/323533a0
  47. LeCun,Y.,Bengio,Y.和 Hinton G.(2015)。 深度学习自然 521,436–444。 www.nature.com/articles/nature14539.epdf
  48. Olah(2015 年)。 理解 LSTM 网络. colah 的博客。可从colah.github.io/posts/2015-08-Understanding-LSTMs/获取。
  49. Mozer,M. C.(1995)。 用于时间模式识别的聚焦反向传播算法。在 Chauvin,Y .; Rumelhart,D.(eds。)。 反向传播:理论,体系结构和应用。 ResearchGate。 Hillsdale,NJ:劳伦斯 Erlbaum 凯斯。第 137-169 页。
  50. Greff K.,Srivastava,R K。,Koutník,J.,Steunebrink,B R。,Schmidhuber,J.(2017)。 LSTM:搜索空间奥德赛。 arXiv:1503.04069v2。 arxiv.org/abs/1503.04069v2
  51. Gers FA, Schmidhuber E. LSTM 循环网络学习简单的无上下文和有上下文的语言. IEEE 交易神经网络。 2001 年;12(6):1333-40. doi:10.1109/72.963769。 PMID:18249962。
  52. Cho, K., van Merrienboer, B., Gulcehre, C., Bahdanau, D., Bougares, F., Schwenk, H., Bengio, Y. (2014). 使用 RNN 编码器-解码器学习短语表示用于统计机器翻译。arXiv:1406.1078。arxiv.org/abs/1406.1078
  53. Sutskever, I., Martens, J., Dahl, G. & Hinton, G. (2013). 初始化和动量在深度学习中的重要性。第 30 届国际机器学习大会论文集, PMLR 28(3):1139-1147.
  54. Duchi J., Hazan E., Singer Y. (2011). 用于在线学习和随机优化的自适应次梯度方法。机器学习研究杂志 12 (2011) 2121-2159.
  55. Hinton, Srivastava, Swersky. 神经网络用于机器学习,第 6a 讲。可从:www.cs.toronto.edu/~tijmen/csc321/slides/lecture_slides_lec6.pdf
  56. Zeiler, M D. (2012). ADADELTA:一种自适应学习率方法。arXiv:1212.5701。arxiv.org/abs/1212.5701
  57. Kingma, D P., Ba, J. (2017). Adam:一种随机优化方法。arXiv:1412.6980。arxiv.org/abs/1412.6980
  58. Martens J. (2010). 通过无 Hessian 优化的深度学习。ICML. Vol. 27. 2010.
  59. Martens J. (2010). 通过无 Hessian 优化的深度学习。ICML. Vol. 27. 2010.
  60. Glorot X., Bengio Y., (2010). 理解训练深度前馈神经网络的困难。第十三届人工智能与统计国际会议论文集。
  61. He, K., Zhang, X., Ren, S., Sun, J. (2015). 深入研究整流器:在 ImageNet 分类上超越人类水平性能。arXiv:1502.01852。arxiv.org/abs/1502.01852
相关文章
|
2月前
|
存储 人工智能 开发工具
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
只需要通过向AI助理提问的方式输入您的需求,即可瞬间获得核心流程代码及参数,缩短学习路径、提升开发效率。
1443 4
AI助理化繁为简,速取代码参数——使用python SDK 处理OSS存储的图片
|
22天前
|
存储 人工智能 搜索推荐
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
Memoripy 是一个 Python 库,用于管理 AI 应用中的上下文感知记忆,支持短期和长期存储,兼容 OpenAI 和 Ollama API。
70 6
Memoripy:支持 AI 应用上下文感知的记忆管理 Python 库
|
7天前
|
机器学习/深度学习 人工智能 数据挖掘
AI精通Python365天第1课,揭秘难易度
学习Python能显著提升就业竞争力,实现工作自动化,增强数据分析、机器学习、Web开发等技能,促进跨领域应用和个人成长。无论是职场新人还是资深人士,掌握Python都能带来正向的职业发展和收入增长,同时回馈社会。通过AI辅助学习Python,从基础代码开始实践,逐步提升编程能力,让技术成为个人发展的强大助力。
16 1
|
17天前
|
机器学习/深度学习 人工智能 算法
强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用
本文探讨了强化学习在游戏AI中的应用,从基本原理、优势、应用场景到具体实现方法,以及Python在其中的作用,通过案例分析展示了其潜力,并讨论了面临的挑战及未来发展趋势。强化学习正为游戏AI带来新的可能性。
51 4
|
27天前
|
人工智能 IDE 开发工具
Python AI 编程助手
Python AI 编程助手。
42 5
|
1月前
|
人工智能 C语言 Python
AI师傅+通义灵码=零基础小白上手python真·不是梦
作为一名不懂编程的设计师,我一直渴望掌握AI辅助设计。在快刀青衣的推荐下,我尝试了AI师傅和通义灵码,成功写出了第一个Python程序,并理解了编程的基本概念。通过AI师傅的引导和通义灵码的帮助,我顺利完成了Coursera上的Python课程,获得了两张证书。这种学习方式让编程变得不再遥不可及,为我的未来学习打开了新大门。
|
2月前
|
人工智能 文字识别 Java
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
尼恩,一位拥有20年架构经验的老架构师,通过其深厚的架构功力,成功指导了一位9年经验的网易工程师转型为大模型架构师,薪资逆涨50%,年薪近80W。尼恩的指导不仅帮助这位工程师在一年内成为大模型架构师,还让他管理起了10人团队,产品成功应用于多家大中型企业。尼恩因此决定编写《LLM大模型学习圣经》系列,帮助更多人掌握大模型架构,实现职业跃迁。该系列包括《从0到1吃透Transformer技术底座》、《从0到1精通RAG架构》等,旨在系统化、体系化地讲解大模型技术,助力读者实现“offer直提”。此外,尼恩还分享了多个技术圣经,如《NIO圣经》、《Docker圣经》等,帮助读者深入理解核心技术。
SpringCloud+Python 混合微服务,如何打造AI分布式业务应用的技术底层?
|
2月前
|
数据采集 人工智能 自然语言处理
AI Agent 金融助理0-1 Tutorial 利用Python实时查询股票API的FinanceAgent框架构建股票(美股/A股/港股) AI Finance Agent
金融领域Finance AI Agents方面的工作,发现很多行业需求和用户输入的 query都是和查询股价/行情/指数/财报汇总/金融理财建议相关。如果需要准确的 金融实时数据就不能只依赖LLM 来生成了。常规的方案包括 RAG (包括调用API )再把对应数据和prompt 一起拼接送给大模型来做文本生成。稳定的一些商业机构的金融数据API基本都是收费的,如果是以科研和demo性质有一些开放爬虫API可以使用。这里主要介绍一下 FinanceAgent,github地址 https://github.com/AI-Hub-Admin/FinanceAgent
|
2月前
|
人工智能 开发者 Python
python读取word文档 | AI应用开发
在RAG系统中,构建知识库时需读取多种外部文档,其中Word文档较为常见。本文介绍如何使用`python-docx`库读取Word文档(.docx格式)中的标题、段落、表格和图片等内容。首先通过`pip install python-docx`安装库,然后利用提供的接口提取所需信息。尽管该库功能强大,但在识别标题样式时需自定义逻辑,并且仅提供图片的URI而非直接加载。示例代码展示了读取文本、识别标题、读取表格及获取图片URI的方法。【10月更文挑战第2天】
90 2
|
3月前
|
机器学习/深度学习 人工智能 TensorFlow
神经网络深度剖析:Python带你潜入AI大脑,揭秘智能背后的秘密神经元
【9月更文挑战第12天】在当今科技飞速发展的时代,人工智能(AI)已深入我们的生活,从智能助手到自动驾驶,从医疗诊断到金融分析,其力量无处不在。这一切的核心是神经网络。本文将带领您搭乘Python的航船,深入AI的大脑,揭秘智能背后的秘密神经元。通过构建神经网络模型,我们可以模拟并学习复杂的数据模式。以下是一个使用Python和TensorFlow搭建的基本神经网络示例,用于解决简单的分类问题。
49 10

热门文章

最新文章