模型求解器的任务是找到最佳参数集,以最大程度地减少列车/精度误差。 在本章中,我们将通过一些python / matlab代码给出UML描述,同时可以自己实现它。
从UML描述中,我们可以推断出有关Solver类的一些信息:
1、它使用训练集,并参考您的模型
2、使用不同类型的优化器(例如:SGD,ADAM,具有动力的SGD)
3、跟踪培训期间的所有损失和准确性
4、保留获得最佳验证性能的参数集
使用范例:
这是您实际上要开始模型训练时调用的方法,在Train方法内部调用Step,Check_Accuracy方法:
1、根据时期数,训练规模和批次大小计算每个时期的迭代次数
2、每次迭代的调用步骤
3、降低学习率
4、计算验证准确性
5、根据验证准确性缓存最佳参数
基本上,在步骤操作期间,完成以下操作:
1、从训练集中提取一批。
2、获取模型损失和梯度
3、使用优化器之一执行参数更新。
检查精度
基本上在每个时期的末尾调用此方法。 基本上,它使用当前参数集,并预测整个验证集。 目的是最终获得准确性。
模型损失操作
我们在“ Step”操作中提到获得模型损失和梯度。 此操作通过“ getLoss”方法实现。 考虑以下基本模型。
在下面,我们为先前的简单模型提供了“ getLoss”功能。
另外,下面还有“ softmaxloss”功能,包括“ dout”, f r a c p a r t i a l L p a r t i a l X s c o r e s \ frac {\ partial L} {\ partial X {scores}} frac partialL partialXscores
机器学习研究现状表明,基于深度学习的现代方法和传统的人工智能方法并不一样。深度学习被证实可在多个领域中作为特征提取的强有力工具,如计算机视觉、强化学习、最优控制、自然语言处理等。不幸的是,深度学习有一个致命弱点,即它不能处理需要组合泛化能力(combinatorial generalization)的问题。例如,将地图作为图像输入,学习预测 Google Maps 上的最快路线,这是最短路径问题的一个实例。这样的问题还有很多,如 (Min,Max)-Cut 问题、最小损失完美匹配问题(Min-Cost Perfect Matching)、旅行商问题、图匹配问题等。
如果只是要孤立地解决此类组合问题,我们有很棒的求解器工具箱可以使用,从高效的 C 语言实现的算法,到更通用的 MIP(mixed integer programming)求解器,如 Gurobi。求解器需要定义明确的结构化输入,因此求解器面临的主要问题是输入空间的表示形式。
尽管组合问题是机器学习研究领域的课题之一,但对于解决此类问题的关注却一直有所不足。这并不意味着社区未把组合泛化问题视为通往智能系统路上的关键挑战。理想情况下,人们能够以端对端、没有任何妥协的方式,通过强大的函数逼近器(如神经网络)将丰富的特征提取与高效的组合求解器结合起来。这正是我们在论文《Differentiation of Blackbox Combinatorial Solvers》中所实现的目标,我们因此获得了很高的评审分数,并将在 ICLR 2020 会议上做 spotlight 演讲。同时求解器其类中包含一个Net的指针,主要是实现了训练模型参数所采用的优化算法,其派生类就可以对整个网络进行训练。