是和否。
是的,有可能达到这个结果。但我推荐另一种方法,而不是自我优化的神经网络:
1.不要让训练时间干扰。
如果您试图在环境运行时训练代理,那可能就是问题所在。训练时间通常比评估时间长得多。并且部署的模型通常不会训练,因此在生产中不会出现问题。
你可以做两件事:
1.1 在训练期间“暂停”游戏。
这可能看起来像“作弊”,但在您的代理人看来,他们实际上并没有在火车时间玩。再一次,它只是模拟它在生产中的表现。
但如果你不能暂停它:
1.2 在运行时禁用训练。
存储所有状态和决定。等到比赛结束,然后你训练整个批次。
专业棋手不会在闪电战挑战中学习。但是他们后来确实研究了自己的游戏,以从错误中吸取教训。
2. 优化超参数以提高速度。
您可以调整一些超参数(例如 NN 的大小)以寻找更快的模型。请记住,它仍然是一种始终在固定时间内运行的算法,但您可能会找到某种方法使其始终运行
2.1 使用机器学习进行优化
有一些元学习技术和其他方法,例如NEAT,可以自动搜索简单有效的拓扑。NEAT 已经奖励了最简单的架构,惩罚了复杂性(通常与速度有关),但您也可以强制它专门考虑运行时间。
3.另一个任务的另一个网络
您可以创建另一个短网络来决定下一步是准确还是快速。基于此结果,它将在精度或速度之间进行选择。这种选择可以是通过标记一个参数(如分支预测)甚至运行一个全新的算法:
NeedForSpeed = TimeEstimation(state)
#Sorry, I couldn't resist the pun!
if NeedForSpeed > 0.8
decision = agent.instantReactionDecisionTree(state)
elif NeedForSpeed > 0.5
decision = agent.decideStandard(state, branchPrediction=True )
elif NeedForSpeed > 0.2
decision = agent.decideStandard(state)
else:
decision = agent.DeepNN(state)
奖励:使用其他 ML 算法
一些算法具有直接影响时间 x 精度权衡的显式参数。
例如,MCST(蒙特卡洛斯搜索树)可以一直运行直到它探索所有可能性,但它通常会在之前完成,为您提供迄今为止找到的最佳解决方案。
因此,一种可能性是尝试其他方法而不是神经网络。