Python深度学习训练神经网络


现在我们将学习如何训练一个神经网络。我们还将学习Python深度学习中的反向传播算法和反向传递。

我们必须找到神经网络权重的最优值来获得所需的输出。为了训练神经网络,我们使用迭代梯度下降法。我们最初从权重的随机初始化开始。随机初始化后,我们用前向传播过程对数据的某个子集进行预测,计算相应的成本函数C,并将每个权重w更新一个与dC / dw成比例的量,即成本函数的导数与重量。比例常数被称为学习率。

使用反向传播算法可以有效计算梯度。对于向后传播或向后传播的关键观察,由于分化链的规则,神经网络中每个神经元的梯度可以利用神经元的梯度来计算,它具有向外的边缘。因此,我们将向后计算梯度,即首先计算输出层的梯度,然后计算最顶层的隐藏层,其次是前一个隐藏层,等等,结束于输入层。

反向传播算法主要使用计算图的思想来实现,其中每个神经元被扩展到计算图中的许多节点,并执行简单的数学运算,如加法,乘法。计算图在边上没有任何权重; 所有的权重被分配给节点,所以权重成为它们自己的节点。然后向后传播算法在计算图上运行。一旦计算完成,只有权重节点的梯度才需要更新。其余的渐变可以被丢弃。

梯度下降优化技术

一种常用的优化功能根据它们造成的误差来调整权重,称为“梯度下降”。

坡度是坡度的另一个名称,斜坡在xy图上表示两个变量如何相互关联:坡度上升,距离随时间变化的变化等。在这种情况下,坡度为网络误差与单一重量之间的比率; 即错误如何随着重量的变化而变化。

更准确地说,我们想要找出哪个重量产生的误差最小。我们希望找到正确表示输入数据中包含的信号的权重,并将它们转换为正确的分类。

随着神经网络的学习,它会缓慢调整许多权重,以便它们可以正确地将信号映射到意义。网络误差与这些权重中的每一个之间的比率是导数dE / dw,其计算权重中的轻微变化引起误差的轻微变化的程度。

每个权重只是涉及许多变换的深层网络中的一个因素;
权重的信号经过几层的激活和求和,所以我们使用微积分的链式规则通过网络激活和输出进行工作。这导致我们讨论权重,以及它与整体误差的关系。

给定两个变量,错误和权重,由第三个变量 激活
,通过权重传递。我们可以通过首先计算激活变化如何影响误差变化以及体重变化如何影响激活变化来计算体重变化如何影响误差变化。

深度学习的基本思想就是:根据产生的错误调整模型的权重,直到不能再减少错误为止。

如果梯度值小,则深网络缓慢,如果值很高,则深度网络快。培训中的任何不准确都会导致不准确的结果。将网络从输出端训练回输入端的过程称为反向传播或反向支撑。我们知道前向传播从输入开始并继续前进。后退道具反向/相反计算从右到左的渐变。

每次我们计算一个梯度时,我们都会使用之前所有的梯度。

让我们从输出层的节点开始。边缘使用该节点处的渐变。当我们回到隐藏层时,它变得更加复杂。0和1之间的两个数字的乘积给你一个较小的数字。渐变值越来越小,因此back prop需要花费大量时间进行训练并且精确度受到影响。

深度学习算法面临的挑战

浅层神经网络和深度神经网络都有一定的挑战,如过度拟合和计算时间。DNN受到过度拟合的影响,因为使用了附加的抽象层,这使得他们可以在训练数据中建立罕见的依赖关系。

**在训练过程中应用 正常化**
方法,例如辍学,早期停止,数据增强,转移学习,以打击过度拟合。在训练期间,剔除正规化从隐藏层中随机省略单元,这有助于避免罕见的依赖性。DNN考虑了几个训练参数,例如大小,即层数和每层单元的数量,学习速率和初始权重。由于时间和计算资源的高成本,寻找最佳参数并不总是实用的。批处理等几个黑客可以加速计算。GPU的巨大处理能力显着地帮助了训练过程,因为所需的矩阵和向量计算在GPU上得到了很好的执行。

退出

辍学是神经网络流行的正规化技术。深度神经网络特别容易过度拟合。

现在让我们看看退出是什么以及它是如何工作的。

用深度学习的先驱Geoffrey Hinton的话来说,“如果你有一个深层的神经网络,而且不是过度拟合,那么你应该使用一个更大的神经网络并使用退出”。

丢失是一种技术,在梯度下降的每次迭代中,我们丢弃一组随机选择的节点。这意味着我们会随机忽略一些节点,就好像它们不存在一样。

每个神经元以概率q保持并以概率1-q随机丢弃。对于神经网络中的每个层,值q可能不同。隐藏层的值为0.5,输入层的值为0,适用于各种任务。

在评估和预测期间,不使用丢失。每个神经元的输出都乘以q,以便到下一层的输入具有相同的期望值。

Dropout背后的想法如下 - 在一个没有辍学正规化的神经网络中,神经元在彼此之间形成互相依赖,导致过度拟合。

实施伎俩

通过将随机选择的神经元的输出保持为0,在TensorFlow和Pytorch等库中实现丢失。也就是说,虽然神经元存在,但其输出被覆盖为0。

提早停止

我们使用称为梯度下降的迭代算法训练神经网络。

早期停止的想法很直观。当错误开始增加时,我们停止训练。在这里,错误的意思是在验证数据上测量的错误,这是用于调整超参数的训练数据的一部分。在这种情况下,超参数就是停止标准。

数据增强

我们增加数据量的过程,或者通过使用现有数据并对其应用一些变换来增加数据量。所使用的确切转换取决于我们打算实现的任务。此外,帮助神经网络的转换依赖于其架构。

例如,在诸如对象分类等许多计算机视觉任务中,有效的数据增强技术正在添加新的数据点,这些数据点是裁剪或翻译版本的原始数据。

当计算机接受图像作为输入时,它将采用一组像素值。让我们说整个图像左移15像素。我们在不同的方向上应用了许多不同的移位,导致数据集增大了原始数据集大小的数倍。

转移学习

采用预先训练的模型并用我们自己的数据集“模拟”模型的过程称为转移学习。有几种方法可以做到这一点。下面介绍几种方法 -

  • 我们在大型数据集上训练预先训练的模型。然后,我们删除网络的最后一层,并用随机权重的新层替换它。

  • 然后,我们冻结所有其他层的权重并正常训练网络。这里冻结图层不会改变梯度下降或优化期间的权重。

这背后的概念是,预先训练的模型将作为一个特征提取器,只有最后一层将在当前任务上进行训练。