ludwig 批量大小在平台上的操作 ```markdown 批量大小在平台上的操作 ```

zd287kbt  于 6个月前  发布在  其他
关注(0)|答案(8)|浏览(54)

你好,

根据我的经验,减少批次大小在数据集上提供了更好的准确性。

有没有一种方法可以在平台期降低批次大小而不是增加?

我尝试使用0.5而不是2与“在平台期降低批次大小的速率”,但这会导致崩溃。

提前感谢

翻译结果:

嗨,

根据我的经验,减小批次大小可以提高数据集上的准确性。

是否有办法在平台期降低批次大小而不是增加?

我尝试将“在平台期降低批次大小的速率”从2改为0.5,但这会导致程序崩溃。

提前感谢您的帮助。

xlpyo6sf

xlpyo6sf1#

@theodor38 增加批次大小是来自这篇论文的一种做法:https://openreview.net/pdf?id=B1Yy1BxCZ
它已经成为了一种标准。
所以,目前没有办法在平台上减少批次大小。
如果你愿意的话,我可以将其视为一个功能请求。

idfiyjo8

idfiyjo82#

@w4nderlust 我的意思是,我尝试了增加和减少。减少效果更好,因为我有一个相当大的数据集,而且从默认的128个批次开始,搜索最优超参数需要很长时间。所以在平台稳定时有减少选项会更有利,因为它可以同时服务于超参数搜索和准确性 -至少在我的情况下是这样。从较大的批次数开始,然后逐渐减小,确实帮助我每次都实现了更好的准确性。而且速度更快
感谢您的回复。
祝好运

b1zrtrql

b1zrtrql3#

我不太明白它怎么能更快:单批处理肯定更快,但考虑到完成一个周期所需的时间(这才是重要的),它肯定会慢。
此外,小批量大小会给你一个更不准确的梯度估计(所有数据集上的梯度),所以那篇论文的大致意思是,在训练的开始阶段,你可能会得到一个梯度估计较差的结果,因为无论如何你都离任何最小值很远,而在训练的后期,你希望得到更准确的估计,因为你离最小值更近,梯度也更小,减少梯度中的噪声是一个好主意。
我并不怀疑你的特殊经验,研究它的详细情况会很有趣,但这与我的直觉和我读过的大多数论文有些相悖。话虽如此,我很愿意考虑这是一个功能请求,并修改实现使其也能适应减小的批量大小。如果你对此感兴趣并想为此做出贡献,请告诉我,我会告诉你需要更改代码的哪部分,这样做其实很简单。否则,我会把它添加到待办事项列表中,最终解决它;)

uelo1irk

uelo1irk4#

由于我一开始使用进化策略来调整hps,从较大的批量大小开始可以更快地收敛到最优的hps,然后逐渐减小批量大小以提高准确性。较小的批量大小 == 较慢的epoch完成速度。虽然这假设具有较大批量大小的最优神经网络结构也可以与较小的批量大小一起工作。尽管它似乎可以。
论文中的直观感觉很强烈。我会进行更多的实验以确保我没有自欺欺人:)但到目前为止,我确信了。
是的,请告诉我关于contrib的方向,我会至少尝试一下:)
谢谢

nwlqm0z1

nwlqm0z15#

你可以看到这张图片。Evo算法在1000-20000的批次大小中进行选择。X轴按准确率排序,从高到低(1是最高精度模型)。它每次都收敛到一个较小的批次大小!这是在整个训练过程中保持固定批次大小的结果。这给了我一个想法,即从高开始,然后逐渐降低。

vbkedwbf

vbkedwbf6#

由于我一开始使用进化策略来调整hps,从较大的批量大小开始可以更快地收敛到最优的hps,然后逐渐减小批量大小以提高准确性。较小的批量大小 == 较慢的epoch完成。尽管这假设具有较大批量大小的最优神经网络结构与较小的一个也能很好地工作。尽管它似乎如此。

正如您在这张图片中看到的,进化算法被给予了一个在1000-20000之间选择批次大小的选择。x轴按准确性排序,从高到低(1是具有最高准确率的模型)。它最终每次都收敛到一个较低的批量大小!这是在整个训练过程中保持固定的批量大小。这给了我一个从大到小开始的想法。

从论文中得到的直觉似乎是坚实的。我会进行更多的实验以确保我没有愚弄自己:但到目前为止,我已经确信了。

如果这个想法得到证实,确实很有趣去探索。我要留意的事情有:你的适应度函数是什么?也就是说,你在图上画的是y轴吗?如果是训练损失,你可能会找出使模型过拟合的最佳参数;如果是准确性,请确保它是验证准确性。还要确保如果你在最小化/最大化时使用负号,因为你实际上可能得到了你想要的相反的东西。

是的,请指导我在contrib上的方向,我会至少尝试一下:

这是相关代码的部分:
https://github.com/uber/ludwig/blob/master/ludwig/models/model.py#L1291-L1299
https://github.com/uber/ludwig/blob/aa4e52ef948ec50e20e339f4b5bb859281ed9d59/ludwig/models/model.py#L1677-L1730
我认为将其更改为在0和1之间增加值应该很容易,只要确保批量大小永远不会低于零,并注意重新转换为整数。

如果你使其正常工作,请随时创建一个PR。
另外,你是否考虑贡献进化超参数优化?
我们有一个包含在Ludwig中进行超参数优化的方法的分支,它已经包含了网格和随机策略,不久将有一个贝叶斯策略,拥有一个进化策略将会非常酷。在这里,您可以看到它的实现方式:
https://github.com/uber/ludwig/blob/hyperopt/ludwig/hyperopt.py
https://github.com/uber/ludwig/blob/hyperopt/ludwig/utils/hyperopt_utils.py
如果您对此感兴趣,添加一个实现HyperoptStrategy接口的类应该非常容易。

vecaoik1

vecaoik17#

这幅图的y轴是什么含义?如果它是训练损失,你可能正在找出最佳过拟合的参数。如果是准确率,确保它是验证准确率。

图上的y轴是批处理大小。很抱歉没有给轴起一个合适的名字。x轴是按准确率排名的模型和批处理大小。在x轴上有大约1500个模型,最左边的是准确率最高的模型。我有一个非常强大的验证集,所有准确率都是用验证集来衡量的。几乎没有过度拟合,因为这些模型也在实时生产中进行测试。

从阅读关于超参数优化的论文中,我发现大多数概念都是基于卷积神经网络模型的。然而,我认为从卷积神经网络中获得的一些直觉并不适用于简单的DNN(深度神经网络)和回归等。至少看起来是这样。对此有什么看法吗?

我会尽力做出贡献。这将是一个挑战:)

wlwcrazw

wlwcrazw8#

这是什么意思?在图上,y轴是什么?如果是训练损失,你可能正在找出最佳过拟合的参数。如果是准确率,请确保它是验证准确率。

图上的y轴是批量大小。抱歉没有给轴起个合适的名字。x轴是按准确率排名的模型和批量大小。在x轴上有大约1500个模型,最左边的是准确率最高的模型。我有一个非常强大的验证集,所有准确率都是用验证集测量的。几乎没有过拟合,因为这些模型也在实时生产中进行测试。

从阅读关于超参数的论文中,我看到大多数概念都是基于卷积神经网络模型的。然而,我认为从卷积神经网络获得的一些直觉并不适用于简单的DNN(深度神经网络)等具有回归等功能的情况。至少看起来是这样。对此有什么看法吗?

明白了。这是一个有趣的发现,值得进一步研究。我也好奇你正在使用Ludwig的哪些生产用例。如果不能私下讨论,请随时私信与我聊天,因为了解它们可以帮助我确定未来的发展方向。

我会尽力做出贡献。这将是一个挑战!
如有疑问,请随时问我。

相关问题