改进爬山算法之三:最陡上升爬山法(Steepest-Ascent Hill Climbing,SAHC)
最陡上升爬山法(Steepest-Ascent Hill Climbing)是一种启发式搜索算法,它模拟了爬山的过程,旨在找到目标函数的全局最大值(或最小值,如果使用最陡下降法)。
图1 爬山法演示图
一、基本原理
最陡上升爬山法也称为梯度上升(Gradient Ascent)或最优化爬山法(Optimization Hill Climbing),是一种局部搜索算法,用于在连续空间中找到函数的最大值。这种方法在机器学习、优化问题和人工智能领域中非常常见。
最陡上升爬山法的基本思想是:从当前解出发,在解的邻域内搜索使目标函数(或损失函数)值增长最快的方向,即最陡上升方向,然后沿着这个方向移动一小步,得到一个新的解,并重复这个过程,直到达到一个局部最大值(即没有更高值的邻居解)或满足某种停止条件为止。这种方法简单、直观,但也有一些局限性,比如可能会陷入局部最大值,而不是全局最大值。
前面说过的几种爬山法在选择下一步的区别:
(1)爬山算法(Hill Climbing Algorithm,HCA)是在邻域内搜索最优解作为下一步方向;
(2)随机化爬山法(Stochastic Hill Climbing)是随机选择下一个移动的邻近解作为下一步方向;
(3)首次爬山法(First-Choice Hill Climbing)是选择第一个比当前解好的解作为下一步方向;
(4)最陡上升爬山法(Steepest-Ascent Hill Climbing)是邻域内搜索使目标函数值增长最快的解作为下一步方向。
二、算法步骤
(1)初始化:选择一个初始解作为起点。
(2)计算斜率:在当前解的邻域内,计算目标函数在各个方向的斜率即导数(或梯度)。
(3)确定最陡上升方向:根据斜率的大小,确定使目标函数值增长最快的方向,即最陡上升方向。
(4)移动解:沿着最陡上升方向移动一小步,得到一个新的解。
(5)重复:重复步骤2到步骤4,直到达到局部最大值或满足停止条件。
三、数学表达
最陡上升爬山法的核心在于找到使目标函数值增长最快的方向,即梯度方向,并沿着该方向更新当前解。以下是最陡上升爬山法的数学公式:
(1)目标函数:设目标函数为,其中是维向量(是一个多元函数),表示解空间中的一个点。
(2)梯度计算:在点处,目标函数的梯度表示为,它是一个维向量,其分量是在各个方向上的偏导数。梯度方向是函数值增长最快的方向。
梯度分量计算公式为(函数关于的偏导数):
其中,是第个分量为1,其余分量为0的维单位向量。偏导数表示当其他所有变量都保持不变,只有变化时,函数