Python 深度学习 计算图 ❯
深度学习的基础知识包含了深度学习这一领域里面的计算图。训练神经网络更新于 2024/5/31 13:54:49目前阶段我们的核心任务是掌握神经网络的具体训练方法, 而在深入探索深度学习领域时, 我们必须重点了解反向传播算法以及对应的反向传递机制。我们得想办法搞清楚神经网络里那些权重的最优数值, 好让网络能够给到我们想要的那种结果。拿梯降法, 就是那种不断迭代的方式, 来帮助咱们训练这个神经元网络。最开始的时候, 这些权重是随机乱设的, 没有固定模式。等把权重随机搞定之后, 咱们就把数据分成一小块一小块的子集, 然后用前向传递这一套流程去试着预测一下这些数据的走向。算完之后, 要跟着看成本函数C的大小, 最后调整每一个权重w的具体数值, 调整的幅度是跟dC/dw挂钩的, 这个导数意思就是成本函数对于单个权重变化情况的一个反应速度。在那个地方起作用的比例常数, 通常就被大家称为学习率。我们可以使用反向传播算法来有效地计算梯度。反向传播的关键观察点是, 根据链式微分法则, 神经网络中每一个神经元的梯度, 都能够通过拥有传出连接的邻居神经元的那些梯度来进行计算。由此, 我们按照反向的顺序来计算梯度。具体操作是, 首先需要计算出输出层的梯度, 接着去计算最上层的那一隐藏层, 随后再计算前面一个隐藏的层级。这样的过程会一直向前推进, 如此继续下去, 直到最后把输入层的梯度也算出来为止。反向传播算法主要是借助计算图这个概念来完成的, 在这种情况下, 每个神经元会被扩展到计算图的许多节点之中, 并且这些节点会执行加法、乘法之类的简单数学运算, 需要特别注意的是, 计算图的边缘上面是不存在任何权重的, 所有的权重全部分配给了节点, 由此使得权重变成了它们自己的独立节点, 接下来我们就可以在计算图上运行反向传播算法了, 等到计算过程全部结束后, 仅需针对权重节点的梯度实施更新操作即可, 至于其余的那些梯度统统都可以直接丢弃掉。梯度下降优化技术有一种优化函数, 它是根据由权重所引发的误差来进行权重调整操作的一种方法, 该方法通常被称为梯度下降。梯度是斜率的另一个叫法, 在 x-y 图上, 斜率用来描述两个变量之间的关系, 比如运行过程中的上升情况, 或者距离随时间变化的改变状况, 在此种情况下, 斜率指的是网络误差与单个权重之间的比例, 也就是说它表示误差是如何随着权重的变化而发生变化的。更准确一点说, 我们想要找到那个能够让误差变得最小的权重。我们希望找到能正好表示出输入数据里面包含的信号的那个权重, 然后把它转变成正确的分类结果。随着神经网络不断地进行学习, 它会逐渐地去调整大量的权重参数, 这么做是为了让这些权重最终能够将输入的信号正确地映射成相对应的含义。网络总的误差与每一个权重之间所存在的比率, 在数学上是一个导数,这个导数的符号是dE/dw。它的作用是用来计算当权重发生一个非常微小的变化时, 这个微小的变化究竟会导致网络误差跟着产生多大程度上的微小变化。每一个权重只是深度网络里面许多变换其中的一个因素, 重量信号经过多层激活以及求和运算, 所以我们会使用微积分的链式法则来做反向计算, 从而得到网络的激活状态和网络输出值, 这样一来便引入了我们一直在讨论的权重问题, 以及它跟总体误差之间的关系。这里有两个变量, 它们分别是误差以及权重。这个权重的传递过程是由第三个变量也就是激活来作为中介的。我们可以用一种方法来计算那个关于权重变化会影响误差变化的结果。具体做法是, 先算一算激活变了会让误差变多少, 然后再去算权重变了会让激活变多少。深度学习这种技术的基本出发点就是根据模型自己跑出来的那个误差, 去反复调整模型里头的那些权重参数, 然后呢, 就是一直调啊调, 直到那个误差再也降不下去为止。如果梯度值比较小, 那么深度网络的训练速度就会变得相当缓慢, 但是如果梯度值比较大了, 深度网络的训练速度就能变得迅速起来。在训练过程中出现的任何不准确的情况, 都有可能致使最终产生的输出结果也是不准确的。人们把将网络从输出端向输入端进行追溯的训练方式称之为反向传播, 也有人叫它反向传播。我们知道正向传播是从输入信息开始并向着前方逐步推进的, 而反向传播执行的操作正好与此相反, 它从右边开始往左边方向去计算梯度。每当计算梯度的时候, 我们总是需要将目前这个点所对应的之前的所有梯度都拿过来用上。我们可以先从输出层的哪一个节点开始作为起点, 边缘区域会利用该节点的梯度信息, 等到我们返回到隐藏层的结构时, 整体的形势就变得更加复杂化了, 因为位于零和1这两个数字之间的取值进行乘法运算以后, 必然会产生一个数值较小的结果, 由此导致梯度的值不断地变小, 这就使得反向传播算法在训练的过程中需要消耗非常巨大的时间成本, 并且同时对最终的准确性也会造成不良影响。深度学习算法中的挑战浅层神经网络以及深度神经网络, 都面临着某些挑战, 例如过度拟合现象, 还有计算时间的问题, DNN受到过度拟合的影响, 原因在于, 使用额外的抽象层, 允许它们对训练数据里面的罕见依赖关系进行建模。正则化方法, 其中包括了像退出、提前停止以及数据增强和迁移学习这些技术手段, 都会在模型训练的过程当中被施加进去, 以此来对抗可能会出现的过度拟合现象。具体来看, 退出这种正则化手段, 是在训练的时段里随机地把隐藏层中那些单元给忽略掉, 这么做的一个直接好处, 就是能帮助避免模型去依赖一些非常罕见的特征关系。深度神经网络方面, 它也会考虑到好几个与训练有关的参数, 比如网络的规模大小, 这里指的是包含的层数多少, 还有每一层里面分布着的单元数量, 此外还包括学习率指标以及初始权重的设定情况。由于实际情况下想要花费时间去寻找最佳的那些参数, 其所需要承担的时间成本和计算资源成本都是非常高昂的, 因此想要找到最优的参数组合并不一定总是可行得通。通过使用批处理等技术手段, 能够有效地提升计算的速度表现。同时, 得益于GPU具备的强大处理能力, 那些所需要的矩阵和向量方面的计算任务, 在运行于GPU之上时都得到了非常好的执行效果, 从而极大程度地给予训练整个过程以支持性的帮助。这种技术是现在非常流行的神经网络正则化手段。深度神经网络在当前阶段特别容易表现出过度拟合的现象。现在我们来瞧瞧这到底是怎样的一种情况, 然后再去看看它运转起来的实际过程又是如何展开的。借用那位作为深度学习领域拓荒者的代表人物的言论原话, 我们可以得知: 倘若你手中掌握着一个深度神经网络模型, 并且确认该模型并未出现过度拟合的情形之时, 那么你的正确做法便是去启用一个规模更为庞大的神经网络架构。它是一种技术。在梯度下降的每一次迭代当中, 我们会丢掉一组随机挑选出来的节点。这意味着我们会随机地忽略掉一些节点, 就好像这些节点根本就没有存在过一样。每个神经元以q的概率保留, 以1-q的概率随机丢弃。神经网络中每一层的q值可能不同。隐藏层的值为0.5, 输入层的值为0, 这在各种任务上都很有效。在进行评估工作以及开展预测任务的时候, 我们不再使用相关的机制或者手段。具体操作上, 我们需要把每一个神经节点所产生的输出结果乘以q这个数值, 这样做的目的就是为了确保流入到下一层中的相关信息数据能够保持与之前预期相一致的标准数值。背后的想法就是下面这个意思, 在那些正则化操作没有被加入到神经网络里面的情况之下, 各个神经元之间是会产生相互依赖关系的, 这种相互依赖关系最终会导致出现过度拟合的问题。实现技巧具体的实现做法是在相关的库比如那些叫做什么的库里面去完成, 具体方式是让被挑中的那些神经元的输出数值维持在零这个状态。换种说法来解释就是, 尽管这些神经元实体本身仍然是存在的, 并没有消失, 但是它们最终产出的结果会被强行改成零处理掉。提前停止我们使用一种叫做梯度下降的迭代算法。这种算法用来训练神经网络。提前停止这个做法背后的道理其实非常简单, 就是一旦发现误差开始变大, 我们就应该立即停止训练过程。这里所提到的误差, 具体是指在验证数据集上进行测量得到的结果, 而该验证数据集本身又来自于训练数据的一部分, 这部分数据的主要用途是用来对超参数进行调整与优化的。在此种特定的情境之下, 所谓的停止标准恰恰就是我们需要关注的那个超参数。数据增强这个过程涉及到我们增加现有数据的数量, 或者通过使用现有数据并对其进行一些转换的方法来对数据进行增强。我们所使用的具体转换方式依赖于我们希望完成的任务类型。同时, 有助于提升神经网络效果的各种转换形式, 还需要考虑到该神经网络的具体结构安排。比如, 在很多计算机视觉工作里面, 像是对象分类这种东西, 有一种挺管用的数据变样方式, 就是在原始数据的裁剪或者是平移之后的版本上面, 去弄出来一些新的数据点来。当计算机接受图像作为输入, 它会接收一个由像素值构成的数组。假设整个图像向左移动 15 个像素。我们在不同的方向上应用许多不同的移位, 从而产生一个增强数据集, 该数据集的大小比原始数据集大很多倍。迁移学习所谓迁移学习, 就是指采用预训练模型并且使用我们自己的数据集对模型进行微调的过程。有几种方法能够达到这个目的, 下文将对这些方法进行简要介绍并列出具体要点如下 −。这个概念背后的意思是, 预训练模型会充当特征提取器的角色, 并且只有最后一层会在当前任务上进行训练。深度学习的基础知识包含了深度学习这一领域里面的计算图。
上一篇/下一篇内容由系统自动关联
返回资讯列表 →