【问题标题】:mini batch backpropagation clarification小批量反向传播澄清
【发布时间】:2021-11-02 03:37:39
【问题描述】:

阅读了很多文章,现在我脑筋急转弯,需要对 mini batch 的概念有一个全新的认识。我是机器学习的新手,如果我的过程是否正确,我将不胜感激。这是我的前提:

我有一个包含 355 个特征和 8 个类输出的数据集。共有12200条数据。这是我的神经网络的粗略可视化:

我决定隐藏层 1 使用 181 个神经元,隐藏层 2 使用 96 个神经元。我对隐藏层使用 ReLu 激活,对输出层使用 Logistic。

为了进行小批量,我将批量大小设置为 8。所以我总共有 1525 个批次,每个批次有 8 个数据集。这是我的步骤:

  1. 获取第一批数据(8 组 355 个输入和 8 个输出)。
  2. 批次的前向传播。
  3. 获取误差并计算误差平方和。 对于平方和,我首先对批次的误差进行平均,使用公式 SumError = (1/8)*sum(error^2)
  4. 批次的反向传播
  5. 获取反向传播后权重值的平均值。
  6. 使用新的权重作为下一批的权重。
  7. 获取下一批数据(8 组 355 个输入和 8 个输出)。
  8. 使用新的权重集重复 2-7。
  9. 当所有批次完成后,获取 SumError 的平均值以获得每个时期的平方和。
  10. 重复 1-9 直到每个 epoch 的 SumError 很小。
  11. 获取用于验证的最终权重

这就是我的小批量的过程。这个对吗?我的意思是,对于权重,我是使用每批之后计算的权重作为下一批的输入权重,还是先收集所有权重(起始权重将用于所有批次),然后平均所有批次的重量?然后使用平均权重作为下一个 epoch 的输入?

【问题讨论】:

    标签: python neural-network mini-batch


    【解决方案1】:

    实际上,您必须定义您的 epoch,并且每个 epoch 至少应该将所有输入数据传播一次(不仅仅是 2-7 次)。并且在一个 epoch 更新一个权重并重复这些步骤直到完成所有 epoch。

    【讨论】:

    • 嗨,冉,感谢您的回复。所以基本上,我会将它设置为运行 Epoch = 20。每个 Epoch 将在 MiniBatch 中运行,Batchsize 为 8。这意味着在每个 epoch 中,它将运行 1525 个批次。我将首先收集所有 delta 权重,然后对它们进行平均并更新权重以馈送到下一个 epoch。这是正确的吗?
    • 嗨,Axia,不像收集所有数据并平均它们并一次更新重量。你可以这样想,在每个 epoch 中,每个 mini-batch 数据每次都会更新权重。目的是根据最佳梯度快速找到正确的方向。并且每个小批量内部可能包含不同小批量数据中的历史数据。因此,随着小批量更新的次数,最后一次权重必须比上一次提前。最后通过 epoch 的时间,你可以看到误差会减少,你会得到最好的权重。
    • 哇。非常感谢冉!我现在更清楚了。非常感谢您花时间回答我的问题。干杯!
    • 别担心 :) 如果你喜欢我的回答你可以给我一个大拇指哈哈
    • 实际上会喜欢并接受答案并竖起大拇指,但如果它是作为评论发表的,我似乎无法这样做。对不起,仍然是堆栈的菜鸟。我认为必须发布为我接受解决方案的答案?还是我也错过了一些可以竖起大拇指的东西?
    猜你喜欢
    • 1970-01-01
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-23
    • 1970-01-01
    相关资源
    最近更新 更多