训练神经网络

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

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

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

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

梯度下降优化技术

一种常用的优化函数,根据它们引起的误差调整权重称为"梯度下降".

渐变是斜率的另一个名称,斜率在xy图上表示两个变量如何相互关联:运行时的上升,在这种情况下,斜率是网络误差与单个权重之间的比率;在这种情况下,斜率是时间变化的距离变化等.也就是说,当重量变化时误差如何变化.

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

当神经网络学习时,它会慢慢调整许多权重,以便它们可以正确地将信号映射到意义.网络误差与每个权重之间的比率是一个导数dE/dw,用于计算重量轻微变化导致误差略有变化的程度.

每个重量只是涉及许多变换的深层网络中的一个因素;权重的信号通过激活并在几个层上求和,因此我们使用微积分的链规则来回溯网络激活和输出.这导致了我们所讨论的权重及其与总体误差的关系.

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

深度学习的基本思想仅仅是:调整模型的权重以响应它产生的错误,直到你不能再减少错误为止.

深网训练缓慢如果值很高,则梯度值小且快.训练中的任何不准确都会导致输出不准确.从输出回到输入的网络训练过程称为反向传播或反向传播.我们知道前向传播从输入开始并向前发展. Back prop会反向/反向计算从右到左的渐变.

每次我们计算一个渐变时,我们都会使用之前的所有渐变.

让我们从输出层的节点开始.边使用该节点处的渐变.当我们回到隐藏层时,它变得更加复杂.两个数字在0和1之间的乘积给出了较小的数字.渐变值越来越小,因此后支撑需要花费大量时间进行训练和精度受损.

深度学习算法中的挑战

浅层神经网络和深度神经网络都存在一些挑战,如过度拟合和计算时间. DNN受到过度拟合的影响,因为使用了额外的抽象层,可以对训练数据中的稀有依赖进行建模.

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

Dropout

Dropout是一种流行的神经网络正则化技术.深度神经网络特别容易过度拟合.

现在让我们看看辍学是什么以及它是如何工作的.

用Geoffrey Hinton的话说,深度学习的先驱之一,'如果你有一个深度神经网并且它不会过度拟合,你应该使用更大的一个并使用辍学'.

辍学是一种技术在每次梯度下降迭代期间,我们删除一组随机选择的节点.这意味着我们随机忽略一些节点,就好像它们不存在一样.

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

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

Dropout背后的想法如下:在没有丢失正则化的神经网络中,神经元之间会产生相互依赖,从而导致过度拟合.

实现技巧

Dropout在库中实现通过将随机选择的神经元的输出保持为0,例如TensorFlow和Pytorch.即,虽然神经元存在,但其输出被覆盖为0.

提前停止

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

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

数据扩充

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

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

当计算机接受图像作为输入时,它会接收像素值数组.让我们说整个图像向左移动15个像素.我们在不同的方向上应用了许多不同的移位,导致扩展数据集的大小是原始数据集的大小.

转移学习

采用预先训练的模型并使用我们自己的数据集"微调"模型称为转移学习.有几种方法可以做到这一点.下面介绍几种方法和减号;

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

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

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