反向传播中的梯度检查

2024-03-05

我正在尝试对具有 2 个单位输入层、2 个单位隐藏层和 1 个单位输出层的简单前馈神经网络实现梯度检查。我所做的如下:

  1. 取所有层之间网络权重的每个权重 w 并使用 w + EPSILON 然后使用 w - EPSILON 执行前向传播。
  2. 使用两个前馈传播的结果计算数值梯度。

我不明白的是如何准确地执行反向传播。通常,我将网络的输出与目标数据进行比较(在分类的情况下),然后在网络中反向传播误差导数。然而,我认为在这种情况下必须反向传播一些其他值,因为数值梯度计算的结果不依赖于目标数据(而仅依赖于输入),而误差反向传播取决于目标数据。那么,梯度检查的反向传播部分应该使用什么值呢?


反向传播是在分析计算梯度之后执行的,然后在训练时使用这些公式。神经网络本质上是一个多元函数,需要找到或训练函数的系数或参数。

相对于特定变量的梯度的定义是函数值的变化率。因此,正如您所提到的,从定义来看一阶导数 https://en.wikipedia.org/wiki/Derivative我们可以近似函数的梯度,包括神经网络。

要检查神经网络的分析梯度是否正确,最好使用数值方法进行检查。

For each weight layer w_l from all layers W = [w_0, w_1, ..., w_l, ..., w_k]
    For i in 0 to number of rows in w_l
        For j in 0 to number of columns in w_l
            w_l_minus = w_l; # Copy all the weights
            w_l_minus[i,j] = w_l_minus[i,j] - eps; # Change only this parameter

            w_l_plus = w_l; # Copy all the weights
            w_l_plus[i,j] = w_l_plus[i,j] + eps; # Change only this parameter

            cost_minus = cost of neural net by replacing w_l by w_l_minus
            cost_plus = cost of neural net by replacing w_l by w_l_plus

            w_l_grad[i,j] = (cost_plus - cost_minus)/(2*eps)

此过程一次仅更改一个参数并计算数值梯度。在这种情况下我使用了(f(x+h) - f(x-h))/2h,这似乎对我来说效果更好。

请注意,您提到:“因为数值梯度计算的结果不依赖于目标数据”,这是不正确的。就像当你找到cost_minus and cost_plus上面,成本是根据以下计算的

  1. 权重
  2. 目标班级

因此,反向传播的过程应该独立于梯度检查。在反向传播更新之前计算数值梯度。在一个时期内使用反向传播计算梯度(使用与上面类似的方法)。然后比较向量/矩阵的每个梯度分量并检查它们是否足够接近。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

反向传播中的梯度检查 的相关文章

  • C# 中的激活函数列表

    我可以在数学中找到激活函数列表 但在代码中却找不到 所以我想如果应该有这样一个列表的话 这将是代码中放置这样一个列表的正确位置 从这两个链接中算法的翻译开始 https en wikipedia org wiki Activation fu
  • 我如何知道我的神经网络模型是否过度拟合(Keras)

    我使用 Keras 来预测输出是 1 还是 0 数据如下所示 funded amnt emp length avg cur bal num actv rev tl loan status 10000 5 60088 19266 2 1 13
  • 使用 ScikitLearn 的神经网络实现时出现的问题

    我正在尝试使用 Scikit Learn 提供的神经网络实现来实现图像处理 我有近 10 000 张 JPG 格式的彩色图像 我将这些图像转换为 PNG 格式并删除了颜色信息 新图像都是黑白图像 将这些图像转换为矢量格式后 这些图像矢量形成
  • 如何设计深度卷积神经网络? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 据我了解 所有 CNN 都非常相似 它们都有一个卷积层 后面是池化层和 relu 层 有些具有专门的层 例如 FlowNet 和 Segn
  • 如何注释图像分割的基本事实?

    我正在尝试训练一个执行图像分割的 CNN 模型 但如果我有几个 我很困惑如何创建基本事实 图像样本 图像分割可以将输入图像中的每个像素分类为 预定义的类别 例如汽车 建筑物 人或任何其他类别 有没有任何工具或一些好主意来创建地面 图像分割的
  • AlexNet 中的神经元数量

    In AlexNet http www cs toronto edu 7Efritz absps imagenet pdf 图像数据为3 224 224 第一个卷积层用96个大小的核对图像进行过滤11 11 3步幅为 4 像素 我对第一层的
  • 为什么我的 keras LSTM 模型陷入无限循环?

    我正在尝试构建一个小型 LSTM 它可以通过在现有 Python 代码上进行训练来学习编写代码 即使是垃圾代码 我已将数百个文件中的数千行代码连接到一个文件中 每个文件以
  • 反向传播实现问题

    我应该做什么 我有一个黑白图像 100x100px 我应该训练一个反向传播 http en wikipedia org wiki Backpropagation神经网络与该图像 输入是图像的 x y 坐标 从 0 到 99 输出是 1 白色
  • 液态状态机:它是如何工作的以及如何使用它?

    我现在正在学习LSM 液态状态机 我试图了解它们到底是如何用于学习的 我对在网上读到的内容感到非常困惑 我将写出到目前为止我所理解的内容 但这可能是不正确的 所以如果您能纠正我并解释什么是正确的 我会很高兴 LSM 根本没有经过训练 它们只
  • Caffe:如果内存中只能容纳一小部分,我该怎么办?

    我正在尝试训练一个非常大的模型 因此 我只能将非常小的批量大小放入 GPU 内存中 处理小批量的结果非常噪声梯度估计 https stackoverflow com a 33717093 1714410 我该怎么做才能避免这个问题 您可以更
  • 神经网络中“特征”的定义是什么?

    我是神经网络的初学者 我对这个词很困惑feature 你能给我一个定义吗feature 这些特征是隐藏层中的神经元吗 这些特征是输入向量的元素 特征的数量等于网络输入层的节点数量 如果您使用神经网络根据物理属性的测量将动物分类为猫或狗 那么
  • pytorch 中的 autograd 可以处理同一模块中层的重复使用吗?

    我有一层layer in an nn Module并在一次中使用两次或多次forward步 这个的输出layer稍后输入到相同的layer pytorch可以吗autograd正确计算该层权重的梯度 def forward x x self
  • BatchNorm 动量约定 PyTorch

    Is the 批归一化动量约定 http pytorch org docs master modules torch nn modules batchnorm html 默认 0 1 与其他库一样正确 例如Tensorflow默认情况下似乎
  • Pytorch ValueError:优化器得到一个空参数列表

    当尝试创建神经网络并使用 Pytorch 对其进行优化时 我得到了 ValueError 优化器得到一个空参数列表 这是代码 import torch nn as nn import torch nn functional as F fro
  • R 神经网络在时间序列的最大步长内不收敛

    我正在编写一个神经网络来预测时间序列中的元素x sin x 2 在 R 中 使用neuralnet包裹 这就是训练数据的生成方式 假设窗口有 4 个元素 最后一个元素是必须预测的元素 nntr0 lt 1 25 sin 1 25 2 nnt
  • caret::train:为 mlpWeightDecay(RSNNS 包)指定更多非调整参数

    我在使用插入符号包和 RSNNS 包中的 mlpWeightDecay 方法指定学习率时遇到问题 mlpWeightDecay 的调整参数是大小和衰减 将大小保持为 4 并在 c 0 0 0001 0 001 0 002 上调整衰减的示例
  • 实例标准化与批量标准化

    据我所知 批量归一化通过将激活转向单位高斯分布来帮助加快训练速度 从而解决梯度消失问题 批量归一化行为在训练 使用每个批次的平均值 var 和测试时间 使用训练阶段的最终运行平均值 var 时应用不同 另一方面 实例归一化充当本文提到的对比
  • 将数值和分类数据混合到具有密集层的 keras 序列模型中

    我在 Pandas 数据框中有一个训练集 我将此数据框传递到model fit with df values 以下是有关 df 的一些信息 df values shape 981 5 df values 0 array 163 0 6 83
  • R中的神经网络包出现大错误

    我正在尝试弄清楚如何使神经网络包发挥作用 我用我创建的数据及其结果 大约 50 行数据和三列 第四列是我想要的结果 它是通过简单的数学执行 如对其他三列求和 得出的 进行了一些测试 到目前为止一切顺利 然后我决定将这个包应用到真实数据上 我
  • Keras 获取中间层的输出

    what my model looks like defining the model archictecture model Sequential 1st conv layer model add Conv2D 32 5 5 activa

随机推荐