我对机器学习还比较新手,目前正在优化模型的超参数。我通过随机搜索的方式进行。我的问题是:我是否应该在搜索其他超参数(如损失函数、层数等)时,同时搜索训练轮数和批次大小?如果不这样做,我是否应该先固定这些值,找到其他参数,然后再返回来调整这些值?
我的担忧是a) 搜索多个训练轮数会非常耗时,因此在初步扫描时将其设为一个较低的值会很有用;b) 这些参数,尤其是训练轮数,在模型表现良好时会不成比例地影响结果,并且不会真正提供关于我其余架构的信息,因为应该存在一个范围,在一定点之前,更多的训练轮数会更好。我知道这并不完全准确,即训练轮数是一个真正的超参数,过多可能会导致过拟合问题。例如,目前我的模型并没有随着训练轮数的增加而明显改善,尽管在我的研究领域内,有人在处理类似问题时建议,通过实施批量归一化可以缓解这一问题,而这也是我正在测试的另一个参数。最后,我担心批次大小会受到我将数据缩小到60%的事实的很大影响,以使我的代码能够合理运行(我认为最终模型将在比我目前可用的模拟数据多得多的数据上进行训练)。
回答:
我同意你关于训练轮数的直觉。为了在相同的工作时间内完成更多的训练“实验”,通常会将这个值保持尽可能低。我在这里没有好的参考资料,但欢迎在评论中提供参考。
对于几乎所有其他方面,我强烈推荐Leslie N. Smith的一篇论文,A disciplined approach to neural network hyper-parameters: Part 1 — learning rate, batch size, momentum, and weight decay。
如你所见,批次大小被包括在内,但训练轮数没有。你还会注意到,模型架构(层数、层大小等)也没有包括在内。Neural Architecture Search本身就是一个巨大的研究领域,与超参数调整分开。
至于损失函数,除了在仅用于训练的辅助损失的背景下,我无法想到任何“调整”它的理由,我怀疑这不是你所指的。
将应用于验证或测试集的损失函数是问题陈述的一部分。它与数据一起,定义了你要解决的问题。你不是通过调整来改变它,而是通过说服产品经理,你的替代方案对业务需求更好来改变它。