【问题标题】:Does epoch size need to be an exact mutiple of batch size?时期大小是否需要是批量大小的精确倍数?
【发布时间】:2018-05-19 11:46:16
【问题描述】:

在训练网络时,如果 epoch 中的样本数量不是批次大小的精确倍数,这是否重要?我的训练代码似乎并不介意这种情况,尽管我的损失曲线目前非常嘈杂(如果这是一个相关问题)。

知道这一点会很有用,就好像这不是一个问题,因为它可以节省处理数据集以使其按批量大小量化的问题。它还可以减少对捕获数据的浪费。

【问题讨论】:

    标签: machine-learning neural-network


    【解决方案1】:

    epoch 中的样本数是否不是批大小的精确倍数是否重要

    不,它没有。您的样本数可以说是 1000,批量大小可以是 400。

    您可以根据要覆盖的 epoch 总数来决定迭代的总数(其中每次迭代 = 对批次进行采样并进行梯度下降)。比如说,您想要大约 5 个 epoch,然后您的迭代次数大致 >= 5 * 1000 / 400 = 13。因此,您将对随机批次进行 13 次采样以获得大约 5 个 epoch。

    【讨论】:

    • 似乎合法 :o)
    【解决方案2】:

    在卷积神经网络 (CNN) 的上下文中,批量大小是一次输入算法的示例数。这通常是 2 的一些小幂,例如 32,64,128 等。在训练期间,优化算法计算批次的平均成本,然后运行反向传播以更新权重。在单个 epoch 中,算法以 $n_{batches} = {n_{examples} \over batchsize} $ 次运行。通常该算法需要训练几个 epoch 才能实现权重值的收敛。每个批次通常都是从整个示例集中随机抽样的。

    想法是这样的:小批量优化 wrt (x1,..., xn) 等价于连续优化步骤 wrt x1, ..., xn 输入,因为梯度是线性算子。这意味着小批量更新等于其各个更新的总和。这里的重要说明:我假设 NN 不应用批处理规范或任何其他向推理模型添加显式变化的层(在这种情况下,数学有点毛茸茸)。

    所以batch size可以看作是一种纯粹的计算思想,通过向量化和并行计算加速优化。假设一个人可以承受任意长时间的训练并且数据被正确打乱,批量大小可以设置为任何值。但并非所有超参数都自动成立,例如非常高的学习率很容易迫使优化发散,所以不要误以为超参数调整通常不重要。

    【讨论】:

    • 这个网络没有批量标准化。目前只使用dropout。可能会在某个时候添加 L2 规范。由于均方误差计算是非线性运算,因此不认为批次与相同数量的随机步骤相同。
    猜你喜欢
    • 2011-06-05
    • 1970-01-01
    • 1970-01-01
    • 2016-10-04
    • 2018-12-01
    • 2018-04-17
    • 2015-04-06
    • 1970-01-01
    • 2014-04-15
    相关资源
    最近更新 更多