8.17 为何需要机器学习
一个算法成功的关键在于其运行机制是否与待求解问题的特性相吻合。换言之,给定一个(或一类)待求解的问题,算法设计的目的是寻求一个与该问题相匹配的算法。在过去,复杂问题的求解往往高度依赖于领域专家的先验知识。这一般又可分为两种思路,其一,利用先验知识对问题进行适度抽象和简化,将一个复杂问题转化为一个相对简单的、经典的问题(如线性规划、二次规划问题),从而可以直接利用已有的成熟算法求解;其二,不简化问题模型,直接利用先验知识设计新的算法。若将算法与问题表示为一个二元组,这两种思路可被直观地理解为“固定算法改问题”和“固定问题找算法”,其共性在于均需要有比较充分的先验知识。然而,现实世界中的复杂优化问题不仅可能具有非凸、不连续、不可微等复杂的数学性质,甚至有可能具有“黑盒”的特点,即我们无法得到问题的形式化表述,而仅能通过实验评价算法或候选解的好坏。这些特点给获取问题先验知识增添了很多难度,进而对算法设计提出了巨大的挑战。
EA 的运行过程可以被视为算法与问题迭代交互的过程,期间会产生大量关于问题的数据(例如某个候选解的质量)。在先验知识难以获取的情况下,一个很自然的想法是能否利用机器学习的手段,分析演化过程中产生的数据,发现有助于问题求解的知识(如图 1 所示),进而提升算法的性能。具体地说,机器学习可以自然用于 EA 的几个主要步骤:初始化,分析问题特征以产生分布更均匀或更靠近最优解的初始群体;停止条件估计,分析算法的搜索状态以确定是否停止算法;后代生成,分析群体特征以获取群体全局或局部分布并指导产生有偏好的新解;群体更新,分析并选择最有希望的候选解。从机器学习的角度而言,监督学习、非监督学习、增强学习等各类方法均有可能用于从上述的不同侧面或角度学习与待求解问题有关的知识。