Jiahong 的个人博客

凡事预则立,不预则废


  • Home

  • Tags

  • Archives

  • Navigation

  • Search

Math——增广拉格朗日乘子法


整体说明

  • 增广拉格朗日方法(Augmented Lagrangian Method, ALM)是一种用于求解约束优化问题的数值优化算法。它结合了拉格朗日乘子法和罚函数法的优点,能够在保证收敛性的同时避免传统罚函数法中罚参数过大导致的数值不稳定问题

问题描述

  • 考虑一个约束优化问题:
    $$
    \begin{align}
    &\min_{x \in \mathbb{R}^n} , f(x) \\
    \text{s.t.} \quad &g_i(x) = 0, \quad i = 1, \dots, m, \\
    &h_j(x) \leq 0, \quad j = 1, \dots, p.
    \end{align}
    $$
  • 其中:
    • \(f(x)\) 是目标函数;
    • \(g_i(x)\) 是等式约束;
    • \(h_j(x)\) 是不等式约束

增广拉格朗日函数

  • 为了处理上述约束优化问题,引入拉格朗日乘子 \(\lambda \in \mathbb{R}^m\) 和 \(\mu \in \mathbb{R}^p\),并定义增广拉格朗日函数为:
    $$
    L_A(x, \lambda, \mu; \rho) = f(x) + \sum_{i=1}^m \left[ \lambda_i g_i(x) + \frac{\rho}{2} g_i(x)^2 \right] + \sum_{j=1}^p \left[ \mu_j h_j(x) + \frac{\rho}{2} \max(0, h_j(x))^2 \right],
    $$
  • 其中:
    • \(\lambda_i\) 是等式约束 \(g_i(x) = 0\) 的拉格朗日乘子;
    • \(\mu_j\) 是不等式约束 \(h_j(x) \leq 0\) 的拉格朗日乘子;
    • \(\rho > 0\) 是罚参数,用于平衡约束违反的程度

算法步骤

  • 增广拉格朗日方法通过迭代更新变量 \(x\)、拉格朗日乘子 \(\lambda\) 和 \(\mu\),以及罚参数 \(\rho\) 来求解优化问题。具体步骤如下:

初始化

  • 初始化 \(x^{(0)}\),\(\lambda^{(0)}\),\(\mu^{(0)}\),以及初始罚参数 \(\rho^{(0)} > 0\)
  • 设置收敛容差 \(\epsilon > 0\) 和最大迭代次数 \(k_{\text{max}}\)

迭代过程

对于第 \(k\) 次迭代依次执行下面的流程:

  • 优化子问题(更新原始变量) :固定 \(\lambda^{(k)}\)、\(\mu^{(k)}\) 和 \(\rho^{(k)}\),求解以下无约束优化问题:
    $$
    x^{(k+1)} = \arg\min_x L_A(x, \lambda^{(k)}, \mu^{(k)}; \rho^{(k)}).
    $$

  • 更新拉格朗日乘子 :

    • 对于等式约束 :
      $$
      \lambda_i^{(k+1)} = \lambda_i^{(k)} + \rho^{(k)} g_i(x^{(k+1)}), \quad i = 1, \dots, m.
      $$
      • 问题:为什么拉格朗日乘子的更新公式是这样的?理论上,这等价于梯度上升法
      • 直观理解:目标是让 \(g_i(x^{(k+1)}) \rightarrow 0\)?
        • 当 \(g_i(x^{(k+1)}) < 0\) 时,缩小 \(\lambda\),表示可适当放开约束,使得下次优化子问题时 \(g_i(x^{(k+1)})\) 变大?
        • 当 \(g_i(x^{(k+1)}) > 0\) 时,增大 \(\lambda\),表示可适当收紧约束,使得下次优化子问题时 \(g_i(x^{(k+1)})\) 变小?
    • 对于不等式约束 :
      $$
      \mu_j^{(k+1)} = \max\left(0, \mu_j^{(k)} + \rho^{(k)} h_j(x^{(k+1)})\right), \quad j = 1, \dots, p.
      $$
  • 检查收敛条件 :如果满足下面条件,则停止迭代,输出 \(x^{(k+1)}\) 作为解,否则继续迭代
    $$
    |g(x^{(k+1)})|_\infty \leq \epsilon \quad \text{ And } \quad |\max(0, h(x^{(k+1)}))|_\infty \leq \epsilon,
    $$

  • 更新罚参数 :通常选择逐步增大罚参数,例如按下面的方法更新
    $$
    \rho^{(k+1)} = \beta \rho^{(k)},
    $$

    • 其中 \(\beta > 1\) 是一个预设的增长因子

终止条件

  • 当达到最大迭代次数或满足收敛条件时,算法终止

特点与优势

  • 稳定性 :相比于传统罚函数法,增广拉格朗日方法对罚参数 \(\rho\) 的依赖较小,能够避免数值不稳定问题
  • 灵活性 :可以处理等式和不等式约束,适用范围广泛
  • 全局收敛性 :在适当的条件下,增广拉格朗日方法具有全局收敛性

附录:对偶上升法与增广拉格朗日乘子法

  • 对偶上升法(Dual Ascent)和增广拉格朗日乘子法(Augmented Lagrangian Method,ALM)都是用于解决约束优化问题的迭代算法。它们在更新变量的方式上有显著的不同
  • 特别说明 :两者的区别不仅仅是对偶变量更新的公式不同,最小化求解原始变量时,分别在最小化拉格朗日函数和增广拉格朗日函数 ,这里区别也很大
  • 以下对照均已等式约束为例

对偶上升法

  • 对偶上升法是一种基于拉格朗日对偶理论的优化方法。它的基本思想是通过交替更新原始变量和对偶变量来逼近最优解。具体步骤如下:
    • 初始化 :选择初始值 \(x^{(0)}\) 和对偶变量 \(\lambda^{(0)}\)
    • 构建增广拉格朗日函数 :构造带拉格朗日函数 \(L(x, \lambda) = f(x) + \lambda^T h(x) \)
    • 最小化拉格朗日函数 :对于固定的 \(\lambda^{(k)}\),求解无约束优化问题(拉格朗日函数)以找到 \(x^{(k+1)}\)
    • 更新对偶变量 :更新对偶变量 \(\lambda^{(k+1)} = \lambda^{(k)} + \alpha_k \nabla_\lambda L(x^{(k+1)}, \lambda^{(k)})\),其中 \(\alpha_k\) 是步长参数
      • 说明:这是根据梯度上升法来更新参数(使用梯度上升是因为更新对偶变量时,目标是最大化原始拉格朗日函数 \(L(x^{(k+1)}, \lambda^{(k)})\)),其中有\(\nabla_\lambda L(x^{(k+1)}, \lambda^{(k)}) = h(x^{(k+1)})\)
  • 这种方法要求目标函数和约束条件满足一定的凸性条件,并且通常需要较小的步长 \(\alpha_k\) 来保证收敛性

增广拉格朗日乘子法

  • 增广拉格朗日乘子法是在拉格朗日乘子法的基础上添加了一个二次惩罚项 ,从而增强了原问题的凸性和稳定性。其主要特点如下:
    • 初始化 :同样选择初始值 \(x^{(0)}\) 和 \(\lambda^{(0)}\)
    • 构建增广拉格朗日函数 :构造带有惩罚项的拉格朗日函数 \(L_{\rho}(x, \lambda) = f(x) + \lambda^T h(x) + \frac{\rho}{2} |h(x)|^2\),其中 \(\rho > 0\) 是惩罚参数
    • 最小化增广拉格朗日函数 :对于固定的 \(\lambda^{(k)}\) 和 \(\rho\),求解无约束优化问题(增广拉格朗日函数)以找到 \(x^{(k+1)}\)
    • 更新对偶变量 :更新 \(\lambda^{(k+1)} = \lambda^{(k)} + \rho h(x^{(k+1)})\)
      • 说明:这等价于固定学习率为 \(\rho\) 的梯度上升法更新 \(\lambda\),其中有\(\nabla_\lambda L_{\rho}(x^{(k+1)}, \lambda^{(k)}) = h(x^{(k+1)})\)
  • 与对偶上升法相比,增广拉格朗日乘子法不需要特别小的步长(固定为 \(\rho\) 了),并且由于惩罚项的存在,它能够更好地处理非凸问题,并且通常具有更好的数值稳定性和收敛速度

比较总结

  • 收敛性 :增广拉格朗日乘子法通常比对偶上升法有更强的收敛性,特别是在非凸问题上
  • 鲁棒性 :由于加入了惩罚项,增广拉格朗日乘子法通常更稳健,不易受到数值不稳定的影响
  • 计算复杂度 :每一步中,增广拉格朗日乘子法可能需要解决一个更加复杂的优化问题 ,因为它包含了额外的惩罚项
  • 适用场景 :如果问题是严格凸的,对偶上升法可能是足够的;但如果存在非凸性或需要更高的鲁棒性 ,则增广拉格朗日乘子法通常是更好的选择

附录:其他相关方法之拉格朗日乘子法

  • 拉格朗日乘子法一般用于求解一个原始问题的最优形式(最优形式一般包含着拉格朗日乘子),部分时候根据KKT条件可以直接求得最优解

具体示例

  • 拉格朗日乘子法 :通过引入拉格朗日乘子将约束条件与目标函数结合成一个新的函数,即拉格朗日函数。其基本思想是将原约束优化问题转化为无约束的拉格朗日函数的极值问题
    • 对于具有等式约束的优化问题:
      $$
      \begin{align}
      &\min f(x) , \\
      \text{s.t.} \ &h_i(x)=0 , i = 1,2,\cdots,m
      \end{align}
      $$
    • 拉格朗日函数定义为:
      $$ L(x,\lambda)=f(x)+\sum_{i = 1}^{m}\lambda_ih_i(x)$$
    • 通过求解 \(\nabla L = 0\) 来得到原问题的最优解

求解方式

  • 拉格朗日乘子法 :直接对拉格朗日函数求偏导数并令其为零,得到一组方程组,然后求解方程组得到最优解。这种方法在理论上很优美,但在实际求解中,当约束条件较多或问题较为复杂时,求解方程组可能会变得非常困难

ML——共轭梯度法和最速下降法

本文介绍共轭梯度法和最速下降法

  • 最速下降法(Steepest Descent Method)和共轭梯度法(Conjugate Gradient Method, CG)也是求解无约束最优化问题的优化方法,其他无约束优化方法见:ML——求解无约束最优化问题的优化方法
  • 共轭梯度法是以共轭方向为搜索方向的一类算法,最早用于求解线性方程组,后来用于求解无约束最优化问题
  • 最速下降法和共轭梯度法都仅限于求解正定矩阵对应的方程或正定二次型对应的无约束最优化问题

优化问题定义

  • 在满足一定要求的情况下,求解线性方程组的解和求解最优化问题有一定的等价性
  • 当 \(A\) 为对称正定矩阵时,有下面的两个问题等价:
    • 问题一:求解线性方程组
      $$ Ax = b $$
    • 问题二:求解最优化问题的解
      $$ \min_x \frac{1}{2}(x - x^*)^TA(x - x^*) $$
      • 其中 \(x^*\) 为线性方程组的解
    • 等价原因:正定矩阵 \(A\) 使得二次型 \((x - x^*)^TA(x - x^*) \) 一定大于等于0,当二次型 \((x - x^*)^TA(x - x^*) = 0 \) 时,一定有 \(x=x^*\)
  • 对以上最优化问题进一步化简有:
    • 上图中用到了以下性质:
      • 对称正定矩阵的性质: \(A = A^T\)
      • \(x^*\) 为线性方程组的解: \(Ax^* = b\)
    • 上图中 \((Ax,x)\) 表示内积
  • 思考:对于参数数量为2的问题,实际上原始优化问题 \((x - x^*)^TA(x - x^*)\) 的等值线可以理解为是一个椭圆,原始问题的最优解在多个椭圆的圆心
    • 为什么是一个椭圆,因为正定矩阵可以被对角化为一个对角线上元素都是正数的对角矩阵 ,即正定二次型一定可以化简为系数全为正的标准型
    • 假设 \(A\) 已经是一个对角矩阵,对角线上的数字为 \(d_1, d_2\),那么原始二次型对应的 \(c\) 等值线为: \((x - x^*)^TA(x - x^*) = d_1x_1^2+d_2x_2^2 = c\)

最速下降法

  • 最速下降法推导

    • 上面的式子中,最后一步的推导是直接展开以后得到
      $$
      \begin{align}
      &=\frac{1}{2} (A(x+\alpha r, x+\alpha r)) - (b, (x+\alpha r)) \\
      &= \frac{1}{2} (x^TA^Tx + \alpha r^TA^Tx + \alpha x^TA^Tr + \alpha^2r^TA^Tr) - (b^Tx+\alpha b^T r) \\
      &= \frac{1}{2}( 2\alpha r^TA^Tx) + \frac{1}{2}\alpha^2r^TA^Tr - \alpha b^T r + \frac{1}{2}x^TA^Tx - b^Tx\\
      &= \alpha r^TA^Tx + \frac{1}{2}\alpha^2r^TA^Tr - \alpha (Ax + r)^T r + \frac{1}{2}x^TA^Tx - b^Tx\\
      &= \alpha r^TA^Tx + \frac{1}{2}\alpha^2r^TA^Tr - \alpha x^TA^Tr + \alpha r^Tr + \frac{1}{2}x^TA^Tx - b^Tx\\
      &= \alpha r^TA^Tx - \alpha x^TA^Tr + \frac{1}{2}\alpha^2r^TA^Tr + \alpha r^Tr + \frac{1}{2}x^TA^Tx - b^Tx\\
      &= 0 + \frac{1}{2}\alpha^2r^TA^Tr + \alpha r^Tr + \frac{1}{2}x^TA^Tx - b^Tx\\
      &= \frac{1}{2}\alpha^2r^TA^Tr + \alpha r^Tr + \frac{1}{2}x^TA^Tx - b^Tx\\
      \end{align}
      $$
    • 上面的推导中使用到了 \(b = Ax + r\),和 \(x^TA^Tr = x^TAr = (x, Ar) = (Ar, x) = r^TA^Tx \)
    • 其中 \( \frac{1}{2}x^TA^Tx - b^Tx\) 与 \(\alpha\) 无关
  • 最速下降法的流程及收敛性分析

    • 收敛速度与特征值有关,当特征值之间的差距过大时,收敛可能会比较慢
  • 最速下降法的收敛性图示分析

    • 如果运气好,也可能一步到位,如果运气不好则可能要很久才收敛

共轭梯度法

  • 共轭梯度法的引入
    • \(p_{k-1}\) 是上次迭代的方向, \(p_{k}\) 是本次迭代的方向,初始该值设置为 \(p_{-1} = 0\),或第一步按照 \(p_0 = r_0\) 迭代
    • 步长推导和最速下降法推导一致
  • 共轭梯度法的方向
    • 共轭的含义为:
    • 共轭梯度法名字的由来 :
      • 共轭来自于: \( \forall i, \quad (Ap_{i},p_{k}) = 0\),每一步迭代的方向与之前的所有步都是共轭相对于矩阵 \(A\) 共轭的
      • 梯度则来自于下降的方向 \(r\) 是原始目标函数 \(\frac{1}{2}(x - x^*)^TA(x - x^*) = \frac{1}{2}(Ax, x)- (b, x)\) 的梯度,由于 \(r\) 同时也是方程 \(Ax = b\) 的残差 \(r = b-Ax\),所以也会称 \(r\) 为残差
  • 共轭梯度法的性质
  • 共轭梯度法的流程
    % asset_img Conjugate-Gradient-Method-5.png %}
    • 注意:第0步使用 \(p_0 = r_0\)
  • 共轭梯度法收敛性

RL——强化学习与动态规划

  • 参考文献
    • 【强化学习】个人总结03——动态规划寻找最优策略
    • 手把手教你强化学习 (四)动态规划与策略迭代、值迭代
    • 第四章 动态规划(DP)、蒙特卡罗(MC)、时间差分(TD) - 臭皮匠的文章 - 知乎
    • David Silver强化学习之动态规划寻找最优策略理论与实战(三) - CristianoC的文章 - 知乎

动态规划方法

  • 动态规划(Dynamic Programming, DP) 是一种将复杂问题分解为若干子问题,并通过求解这些子问题来获得原问题解的方法。它适用于满足以下两个性质的问题:
    • 最优子结构(optimal substructure) :原问题可以分解为多个子问题,通过解决这些子问题并将其解组合起来,可以得到原问题的最优解
    • 重叠子问题(overlapping subproblems) :子问题在求解过程中会多次出现,且这些子问题的解可以被存储并重复利用
  • 马尔可夫决策过程 (MDP) 恰好满足动态规划的这两个条件:贝尔曼方程将问题分解为递归结构的子问题,而价值函数能够存储并复用其最优解。因此,我们可以使用动态规划来解决马尔可夫决策过程的核心问题:预测和控制
    • 预测(prediction) :给定一个马尔可夫决策过程 MDP 和一个策略 \(\pi\),或者给定一个马尔可夫奖励过程 MRP,求解基于该策略的价值函数 \(v_\pi\)。(评估给定策略的效果)
    • 控制(control) :给定一个马尔可夫决策过程 MDP,求解最优价值函数 \(v_\∗\) 和最优策略 \(\pi_\∗\)。(即寻找最佳策略)
  • 预测问题和控制问题的主要区别在于,预测问题是在策略已知的情况下求解其价值函数,而控制问题则是在没有给定策略的情况下寻找最优价值函数及其对应的策略。两者之间存在递进关系:在强化学习中,我们通常先解决预测问题,再进一步解决控制问题

同步动态规划(Synchronous Dynamic Programming)

  • 同步动态规划算法中,每一次迭代都更新所有状态的价值
  • 参考链接:策略迭代与值迭代的区别
策略迭代(policy iteration)
  • Step1:初始化所有状态的价值 (\(v(s)\)) 和策略 (\(\pi(s)\))
  • Step2:策略评估(policy evaluation):按照贝尔曼方程迭代,直到收敛(求解当前策略下的不动点)
  • Step3:策略迭代(policy improvement):寻找一个新的策略,在任意状态下都有 \(Q^\pi(s,\pi’(s)) \ge V^\pi(s)\),可以证明此时有 \(V^{\pi’}(s) \ge V^\pi(s)\)
  • 循环Step2和Step3直到收敛
值迭代(value iteration)
  • Step1:初始化所有状态的价值 (\(v(s)\))
  • Step2:迭代找到最优策略(常常隐含直接使用 argmax 作为最优策略决策),直到收敛
  • Step3:最优策略提取
  • 这种方法仅进行价值函数迭代,不考虑策略,最终迭代到最优价值函数后,即可反向求解得到最优的策略

异步动态规划(Asynchronous Dynamic Programming,非重点)

  • 异步动态规划算法中,在每一次迭代时,根据特定规则选择性地更新部分状态的价值(并不更新所有状态的价值)
    • 注:这种方法可以显著节省计算资源,并且只要所有状态能够持续被访问和更新,算法最终仍能收敛到最优解
    • 目标:解决经典DP需遍历全部状态的问题,通过异步更新提高效率
  • 以下是几种常见的异步动态规划方法:
    • 就地动态规划(In-place DP) :直接覆盖旧价值函数,而非保留新旧两份
    • 优先扫描(Prioritized Sweeping) :根据优先级对状态进行排序,优先更新优先级较高的状态的价值(优先更新贝尔曼误差较大的状态)
    • 实时动态规划(Real-time DP) :仅更新当前交互中访问的状态

动态规划的其他说明

  • 动态规划算法的缺点 :采用全宽度(full-width)的回溯机制来更新状态价值,算力需求大且容易导致维度灾难
    • 无论是同步还是异步动态规划,每次回溯更新某个状态的价值时,都需要追溯到该状态的所有可能后续状态,并结合已知的马尔可夫决策过程的状态转换矩阵和奖励来更新该状态的价值
    • 解决方案:可以使用采样回溯方法来近似估计价值,从而减少算力的消耗
  • 动态规划算法是model-based算法,因为需要回溯当前状态的所有后续状态(full-width回溯机制)

Model-free方法辨析

  • Model-free 不知道环境动力学(Dynamics),无法精确计算精确的目标值,所以通常使用 TD 和 MC 这两种方案来近似估计目标值
    • 时序差分(Temporal Difference, TD):Q-learning 和 SARSA 都使用这种方法估计目标值
    • 蒙特卡罗方法(Monte-Carlo,MC):REINFORCE方法就使用了MC方法估计目标值
    • n-step方法是 TD 和 MC 的结合
  • TD 其实同时是结合了 MC 和 DP 的思想,更详细的比较见附录
    • 需要模拟交互序列(和MC方法一样);但不需要积累很多交互数据求均值(不同于 MC)
    • 使用当前回报和下一时刻的价值预估来更新当前时刻的价值(和DP方法一样);不需要知道状态转移矩阵,也不需要full-width回溯(不同于DP方法)
  • Q-learning 和 SARSA 为什么不是DP方法?
    • Q-learning 并不基于模型计算期望(不需要依赖状态转移矩阵),是直接使用贪心策略
    • SARSA 依赖采样,并不是精确计算期望

附录:Planning、Decision、Prediction和Control的区别

  • 在自动化和智能系统中,Planning、Decision、Prediction 和 Control 是四个关键的概念:
    • Planning(规划) :制定未来行动步骤,生成一系列行动步骤或策略
    • Decision(决策) :在当前时刻选择最佳行动,即在已知状态下决策动作
    • Prediction(预测) :推断未来状态或事件,预估环境相关的变化等
    • Control(控制) :实时调节系统行为以实现目标,常常涉及到反馈机制,以应对环境变化
  • 实际例子举例:自动驾驶中,Prediction用于预测其他车辆行为,Decision用于选择最佳驾驶策略,Planning用于规划路径,Control用于执行驾驶操作

附录:MC、TD和DP 详细比较

  • 蒙特卡罗方法(MC) :通过完整回合的采样回报估计值函数,依赖实际经验,无需环境模型
  • 时序差分(TD) :结合MC和DP思想,结合当前奖励和后续状态的价值估计来更新当前状态
  • 动态规划(DP) :基于模型的全宽度回溯更新,利用贝尔曼方程迭代求解值函数,需已知环境动力学

动态规划(DP)

  • 核心思想 :利用贝尔曼方程全宽度回溯更新值函数,需已知状态转移 \( P \) 和奖励函数 \( R \)
  • 策略评估(Policy Evaluation) :
    $$
    V_{k+1}(s) = \sum_a \pi(a|s) \sum_{s’, r} P(s’, r|s, a) \left[ r + \gamma V_k(s’) \right]
    $$
    • 迭代至收敛得到精确值函数
  • 策略改进(Policy Improvement) :
    $$
    \pi’(s) = \arg\max_a \sum_{s’, r} P(s’, r|s, a) \left[ r + \gamma V^\pi(s’) \right]
    $$

蒙特卡罗方法(MC)

  • 核心思想 :用完整回合的回报均值估计值函数,仅适用于回合制任务
  • 值函数更新 :
    $$
    V(S_t) \leftarrow V(S_t) + \alpha \left[ G_t - V(S_t) \right]
    $$
    • 其中 \( G_t = \sum_{k=t}^T \gamma^{k-t} R_{k+1} \) 是实际回报,\( \alpha \) 为学习率,\( T \) 为回合终止时刻

时序差分(TD)

  • 核心思想 :用当前奖励与下一状态估计值(自举)更新值函数,可在线学习
  • TD(0) 更新 :
    $$
    V(S_t) \leftarrow V(S_t) + \alpha \left[ R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \right]
    $$
    • 其中 \( R_{t+1} + \gamma V(S_{t+1}) \) 称为 TD目标 ,\( \delta_t = R_{t+1} + \gamma V(S_{t+1}) - V(S_t) \) 为 TD误差

三者方差偏差比较

  • MC :高方差、无偏估计,需完整回合
  • TD :低方差、有偏估计,可在线学习
  • DP :精确但计算量大,需模型支持。

RL——强化学习中的探索与利用


整体说明

  • 在强化学习中,探索(Exploration)与利用(Exploitation)的平衡是核心挑战之一
  • 探索(Exploration) :探索旨在发现环境中未知的信息
  • 利用(Exploitation) :根据已有知识选择最优动作以最大化收益

基于随机性的策略

\(\epsilon\)-贪心(\(\epsilon\)-Greedy)

  • 核心思路是以概率 \(\epsilon\) 随机选择动作(探索),否则选择当前最优动作(利用)
  • \(\epsilon\)-Greedy简单易实现,但探索效率低(可能重复探索次优动作)
  • 升级版 :\(\epsilon\) 可随时间衰减(如 \(\epsilon = \frac{1}{\sqrt{t}}\) )

Boltzmann探索(Softmax)

  • 核心思路 :根据动作的Q值按概率分布选择动作(玻尔兹曼分布),使用温度参数 \(\tau\) 控制探索强度:
    $$
    P(a) = \frac{e^{Q(a)/\tau} }{\sum_{b} e^{Q(b)/\tau} }
    $$
    • 玻尔兹曼分布 ,英文名是Boltzman Distribution ,又称吉布斯分布或Softmax分布
    • \(\tau\) 是温度系数,\(\tau\)高时偏向探索,\(\tau\) 低时偏向利用

基于不确定性的策略

Upper Confidence Bound (UCB)

  • 基本思路 :为每个动作的Q值添加置信区间上界,选择上界最大的动作:
    $$
    A_t = \arg\max_a \left[ Q(a) + c \sqrt{\frac{\ln t}{N_t(a)} } \right]
    $$
    • \(N_t(a)\) 是动作 \(a\) 被选择的次数,\(c\) 是探索系数
    • 特点 :适用于多臂赌博机(Multi-Armed Bandit, MAB) ,但需维护动作计数(注:Bandit 本意为 “匪徒/强盗”,之前的老虎机又称为 “单臂强盗”)
  • MCTS 中的UCT(Upper Confidence Bound applied to Trees)和PUCT(Polynomial Upper Confidence Trees)都是 UCB 的变体
  • UCT(Upper Confidence Bound applied to Trees)算法:
    $$
    \textit{UCT}(s, a) = Q(s, a) + c \sqrt{\frac{\ln N(s)}{N(s, a)} }
    $$
    • \(Q(s, a)\):动作\(a\)的平均回报
    • \(N(s)\):状态\(s\)的访问次数,\(N(s, a)\):动作\(a\)的访问次数(注:如果分母不会为0,此时所有节点都是完整探索过的,不存在为0的情况)
    • \(c\):探索系数(通常设为\(\sqrt{2}\)),当\(c=\sqrt{2}\)时,UCT的累计遗憾(Regret)有对数上界
    • 探索时选择动作为: \(a^* = \arg\max_a \textit{UCT}(s, a)\)
  • PUCT(Predictor UCT)算法:
    $$
    \textit{PUCT}(s, a) = Q(s, a) + c_\textit{puct}\cdot P(s,a)\cdot \frac{\sqrt{N(s)}}{1+N(s, a)}
    $$
    • \(P(s,a)\):即 \(\pi(a|s)\),是先验策略网络(Policy Network)给出的先验概率(表示动作 \(a\) 的初始偏好)
    • \(c_\text{puct}\):探索系数(控制先验权重,AlphaZero中常设为1~2)
    • \(1+N(s,a)\):(不用为了避免除0操作而增加1吧,毕竟此时所有节点都是完整探索过的,不存在为0的情况)
    • 探索时选择动作为:探索时选择 \(a^* = \arg\max_a \textit{PUCT}(s, a)\)
    • 基本思想:采样次数 \(N(s, a)\) 少时,按照策略 \(\pi(a|s)\) 为主探索;采样次数 \(N(s, a)\) 多时,按照价值 \(Q(s, a)\) 为主探索

Thompson Sampling

  • 汤普森采样(Thompson Sampling, TS)的核心思想是通过概率分布建模不确定性,并基于后验分布采样
  • 汤普森采样也称为后验采样(Posterior Sampling) ,是一种基于贝叶斯思想的探索与利用(Exploration-Exploitation)策略
  • 广泛应用于多臂赌博机、推荐系统、在线广告投放和强化学习等领域
  • 以点击率预估中伯努利奖励为例:
    • 初始化 :
      • 假设每个动作 \( a \) 的奖励服从伯努利分布(Bernoulli Distribution) \( \text{Bern}(\theta_a) \),即两点分布或0-1分布 ,\(\theta_a\) 是动作 \(a\) 真实的奖励期望
      • 设先验分布为 Beta 分布 :\( \theta_a \sim \text{Beta}(\alpha_a, \beta_a) \)(初始 \( \alpha_a = \beta_a = 1 \))
        • 注:Beta 分布的概率密度函数为\(f_\text{Beta}(x;\alpha, \beta) = \frac{1}{B(\alpha,\beta)}x^{\alpha-1}(1-x)^{\beta-1}\),其中 \(B(\alpha,\beta) = \frac{\Gamma(\alpha)\Gamma(\beta)}{\Gamma(\alpha+\beta)}\) 是 Beta 函数 ,(\(\Gamma(\alpha)\)为 伽马函数)
    • 迭代过程 :
      • 采样 :对每个动作 \( a \),从其后验分布 \( \text{Beta}(\alpha_a, \beta_a) \) 中采样动作 \(a\) 的奖励值 \( \hat{\theta}_a \)(当采样次数足够多以后有\( \hat{\theta}_a = \theta_a\))
        • 注意:每个动作都有一个自己的 Beta分布,都有自己的后验数据 \(\alpha_a, \beta_a\)
      • 选择动作 :执行 \( a^* = \arg\max_a \hat{\theta}_a \)
      • 观测奖励 :获得二元反馈 \( r \in {0, 1} \)
      • 更新后验 :
        • 若 \( r = 1 \),则 \( \alpha_{a^*} \leftarrow \alpha_{a^*} + 1 \)
        • 若 \( r = 0 \),则 \( \beta_{a^*} \leftarrow \beta_{a^*} + 1 \)

基于内在激励的策略

好奇心驱动(Intrinsic Curiosity)

  • 基本思想 :通过预测环境动态模型(如状态转移)的误差作为内在奖励,鼓励探索新状态
  • ICM(Intrinsic Curiosity Module)是一种好奇心驱动策略,通过预测下一状态和动作的误差生成奖励

计数基方法(Count-Based)

  • 基本思想 :对访问过的状态或动作计数,给予未频繁访问的状态更高探索奖励:
    $$
    R_{intrinsic} = \frac{1}{\sqrt{N(s)} }
    $$

神经网络中的探索策略

对输出动作加噪

  • 动作空间加噪 :直接在输出动作上添加噪声(如高斯噪声),思路和离散动作中的 \(\epsilon\)-Greedy 思想相似

对输入观测加噪

  • 观测空间加噪 :直接在观测上添加噪声(如高斯噪声)

对参数加噪(Parameter Noise)

  • 参数空间加噪 :直接在策略网络的参数上添加噪声(如高斯噪声)

熵正则化(Entropy Regularization)

  • 在策略梯度目标函数中增加策略熵项,鼓励动作多样性:
    $$
    \nabla J(\theta) = \mathbb{E} \left[ \nabla \log \pi(a|s) Q(s,a) + \beta H(\pi(\cdot|s)) \right]
    $$
    • \(H\) 是熵,\(\beta\) 是权重系数

一些实践技巧

  • 离散动作使用\(\epsilon\)-Greedy;连续动作使用参数噪声或动作噪声
  • Thompson采样成本太高,一般选择 \(\epsilon\)-Greedy这种简单的即可

RL——Gym安装问题记录


Gym 安装问题记录

  • 一般来说使用 pip install gym 安装即可
  • 但从经验来看往往会出现一些使用上的异常:由于经过多版迭代,导致很多接口不兼容,此时需要查看版本是否和目标项目是否一致
  • 经验1:如果安装后使用 env.render() 无法显示可视化图像,可考虑安装 0.21.0 版本(亲测可用)
    1
    pip install gym==0.21.0

ML——CEM


Summary

  • CE 方法逐步更新采样分布 \(Q\),使其更接近目标分布 \(P^*\),从而最小化两者之间的交叉熵
  • 这一过程不仅有助于找到最优解,还能够在高维和复杂问题中有效地进行优化
  • 注:在工业实践中,CEM 方法很容易使用

交叉熵基础定义

  • Cross Entropy 方法中的 “Cross Entropy” 这个名字来源于信息论中的一个概念
    • 在信息论中,交叉熵(Cross Entropy)是用来衡量两个概率分布之间的差异的一个指标,通常用于评估一个概率模型对真实数据分布的拟合程度
  • 给定两个概率分布 \(P\) 和 \(Q\),其中 \(P\) 代表真实的概率分布,而 \(Q\) 代表模型预测的概率分布,那么 \(P\) 和 \(Q\) 之间的交叉熵定义为:
    $$ H(P, Q) = -\sum_x P(x) \log Q(x) $$
  • 这里的 \(H(P, Q)\) 就是 \(P\) 相对于 \(Q\) 的交叉熵。当 \(Q\) 完美地匹配 \(P\) 时,即 \(P=Q\),交叉熵达到最小值,此时等于 \(P\) 的熵 \(H(P)\)
    • 如果 \(Q\) 与 \(P\) 不同,那么交叉熵会比 \(P\) 的熵大,表示了额外的信息损失或误差

交叉熵损失函数

  • 在优化和机器学习领域,交叉熵经常被用作损失函数,特别是在分类任务中,比如使用神经网络进行图像分类
  • 在这种情况下, \(P\) 通常是样本的真实标签分布(例如,对于二分类问题,正类可以表示为 [1, 0],负类为 [0, 1]),而 \(Q\) 是模型预测的概率分布
  • 通过最小化交叉熵损失函数,可以训练模型更好地拟合训练数据

交叉熵方法名字的来源

  • Cross Entropy 方法本身是一种用于优化和采样的算法,它最初是从稀有事件模拟中发展出来的
    • 该方法通过迭代地从候选解集中采样,并根据这些样本计算出一个精英集的概率分布,然后利用这个分布来指导下一步的采样过程
  • 在这个过程中,算法实际上是在尝试最小化目标分布(最优解的分布)和当前采样分布之间的交叉熵,因此得名“Cross Entropy 方法”
    • 这种方法能够有效地解决一些复杂的优化问题,尤其是在高维空间中寻找最优解的问题

交叉熵方法的核心思想

  • 在 Cross Entropy (CE) 方法中,最小化目标分布 \(P^*\) (最优解的分布)和当前采样分布 \(Q\) 之间的交叉熵是一个核心思想
  • 这个过程可以通过以下步骤来理解:

定义目标

  • 首先定义目标是找到一个分布 \(Q\),使得 \(Q\) 尽可能接近目标分布 \(P^*\)
    • 这里 \(P^*\) 通常是一个难以直接求解的分布,因为它对应于所有可能解中的最优解

交叉熵作为度量

  • 使用交叉熵 \(H(P^*, Q)\) 作为度量 \(P^*\) 和 \(Q\) 之间差异的标准,交叉熵定义为:
    $$ H(P^*, Q) = -\sum_x P^*(x) \log Q(x) $$
  • 这里 \(x\) 表示解空间中的一个点, \(P^*(x)\) 是 \(x\) 属于最优解的概率,而 \(Q(x)\) 是 \(x\) 被当前采样分布选中的概率

精英集的选择

  • 在 CE 方法中,我们并不直接计算 \(P^*\),而是通过迭代过程逐步逼近 \(P^*\)
  • 每一步,我们从当前的分布 \(Q\) 中随机采样一组解,然后选择表现最好的一部分解(称为精英集)
  • 假设我们采样了 \(N\) 个解,并选择了其中表现最好的 \(N_e\) 个解作为精英集

更新分布

  • 接下来,基于精英集来更新分布 \(Q\)
  • 目标:希望新的 \(Q\) 更好地拟合精英集中的解
    • 这可以通过计算精英集的统计特性(如均值和协方差)来实现
  • 如果 \(Q\) 是一个高斯分布,我们可以计算精英集的均值 \(\mu_e\) 和协方差矩阵 \(\Sigma_e\),并用它们来更新 \(Q\) 的参数:
    $$ \mu_{\text{new}} = \frac{1}{N_e} \sum_{i=1}^{N_e} x_i \\
    \Sigma_{\text{new}} = \frac{1}{N_e} \sum_{i=1}^{N_e} (x_i - \mu_{\text{new}})(x_i - \mu_{\text{new}})^T $$

重复迭代

  • 上述过程构成了 CE 方法的一个迭代步骤。我们重复执行采样、选择精英集和更新分布的过程,直到 \(Q\) 收敛到一个接近 \(P^*\) 的分布,或者满足某个停止条件(如达到最大迭代次数或分布变化小于某个阈值)

最小化交叉熵的直观解释

  • 通过选择精英集并更新分布,CE 方法实际上是在逐步减少 \(P^*\) 和 \(Q\) 之间的交叉熵
  • 这是因为每次迭代后,新的分布 \(Q\) 更加集中在那些表现好的解上,从而更接近 \(P^*\)
  • 从数学上看,选择精英集并更新分布的过程可以看作是在最小化 \(P^*\) 和 \(Q\) 之间的 KL 散度(Kullback-Leibler divergence),而 KL 散度与交叉熵密切相关:
    $$ D_{\text{KL}}(P^* | Q) = H(P^*, Q) - H(P^*) $$
  • 由于 \(H(P^*)\) 是常数,最小化 \(D_{\text{KL}}(P^* | Q)\) 等价于最小化 \(H(P^*, Q)\)

ML——主动学习-半监督学习-直推学习

主动学习(Active Learning), 半监督学习(Semi-Supervised Learning)与直推学习(Transductive Learning)
半监督学习又称为归纳学习(Inductive Learning)


补充知识

“开放世界”假设

  • 学得的模型能适用于训练过程中从未观察到的数据
  • 也就是说:测试集未知

“封闭世界”假设

  • 学得的模型仅仅能适用于训练过程中观察到的未标记样本
  • 也就是说:测试集就是训练时观察到的未标记数据

相同点

  • 都是用于解决有少量标注数据和海量未标注数据的问题的算法
  • 都是迭代扩充标记数据集的算法:
    • 每次迭代时添加如一部分新的标记数据(由未标记数据标记产生的)

不同点

主动学习

  • 主动学习添加了专家知识(人工确认或者打标签),每次迭代时加入的新的标记数据都是由专家打出来的标签
  • 半监督学习和直推学习都是全自动的(无需人工干预),主动学习是半自动的

半监督学习与直推学习

  • 直推学习将当前的为标签数据看成是最终的测试数据
  • 半监督学习和主动学习的测试集都是未知数据
  • 半监督学习是基于”开放世界”假设的
  • 直推学习是基于”封闭世界”假设的

总结

总体概览

表格概览

学习算法 是否需要专家知识(人工) 是否具有泛化性
半监督学习 否 是(“开放世界”假设)
主动学习 是 是(“开放世界”假设)
直推学习 否 不具有,测试集是已知的未标记数据(“封闭世界假设”)

ML——样本不均衡问题处理

  • 参考链接:
    • 一文解决样本不均衡(全)

样本不均衡问题描述

  • 问题描述:机器学习中的样本不均衡问题,是指在分类任务中不同类别的训练样例数量存在显著差异的情况
  • 场景:包括金融欺诈检测、医疗诊断、网络入侵检测等领域

样本不均衡的影响

  • 模型偏向性 :模型倾向于预测label为多数类,因为这样做可以最大化准确率,即使对少数类的预测几乎总是错误的
  • 过拟合风险 :由于少数类样本数量少,模型容易过拟合这些样本,导致模型在新数据上泛化性差
  • 总结:样本不均衡带来的根本影响是模型会学习到训练集中样本比例的这种先验性信息,以致于实际预测时就会对多数类别有侧重(可能导致多数类精度更好,而少数类比较差)通过解决样本不均衡,可以减少模型学习样本比例的先验信息,以获得能学习到辨别好坏本质特征的模型

哪些情况下需要解决样本不均衡问题


评估指标

  • 不能使用:准确率(Accuracy)
  • 建议使用:F1分数、精确率(Precision)、召回率(Recall)和AUC等

解决样本不均衡的方法

数据层面的方法

  • 过采样(Over-sampling) :通过增加少数类样本的数量来缓解不均衡问题。常见的方法包括:
    • 随机过采样 :简单地复制少数类样本,容易导致过拟合
    • 数据增强(Data Augmentation) :通过变换现有样本生成新的样本,适用于图像(翻转,拉伸等)、文本等数据类型
    • SMOTE(Synthetic Minority Over-sampling Technique) :通过在少数类样本间插值生成新的合成样本,一定程度上可以避免过拟合,但生成的数据置信度也存在问题
    • ADASYN(Adaptive Synthetic Sampling) :通过生成少数类别样本改善不均衡问题,与传统的过采样技术(如SMOTE)相比,ADASYN更注重类间距离和局部密度,尤其是对于少数类中的困难样本或噪声敏感区域,它可以更加精细地调整采样策略,详情可参考:不平衡学习的自适应合成采样方法ADASYN(Matlab代码实现)
  • 欠采样(Under-sampling) :通过减少多数类样本的数量来达到平衡。常用的方法有:
    • 随机欠采样 :随机删除多数类样本,但可能丢失重要信息
    • Tomek Links :移除位于类别边界附近的样本对,有助于清理噪声
    • ENN(Edited Nearest Neighbors Rule) :移除与最近邻居类别不同的样本
    • NearMiss :选择与少数类样本最接近的多数类样本
  • 组合采样 :结合过采样和欠采样的方法

模型层面的方法

  • 成本敏感学习(Cost-sensitive Learning) :为不同类别的错误分配不同的固定权重,使模型更加关注少数类的预测
  • 集成学习(Ensemble Learning) :使用集成学习的方法降低过拟合问题(比如多个模型进行投票或加权平均)

损失函数层面

  • 损失函数优化 :比如使用Focal Loss等

异常检测

  • 异常检测(Anomaly Detection) :将少数类视为异常点(特别是少数类样本非常稀少的情况),使用异常检测算法进行识别,常见的异常检测算法通常包括统计方法、距离检测(K近邻方法)、聚类方法(K-Means)、分类模型(one-class SVM)、自编码器、孤立森林等
    • 其中K近邻方法可以用于回归或者分类场景,还可以直接用于异常检测(距离过大的点认为是异常)
    • K-Means方法作异常检测时,原理聚类中心的样本视为异常值
    • 自编码器方法:通过训练一个自编码器来重建数据,重建误差大的数据点被视为异常点
    • 孤立森林(Isolation Forest):通过随机挑选特征、随机挑选分割点构建多棵孤立树,在所有孤立树中的平均路径长度的数据点被视为异常点(孤立森林的核心思想是异常点通常更容易被孤立,即在随机分割数据空间时,异常点往往比正常点更快地被单独分隔出来)

实践建议

  • 评估指标的选择 :在不均衡数据集上,不能使用准确率(Accuracy),建议使用均衡指标(F1-Score,AUC等)
  • 模型选择 :选择对不均衡数据的适应性较好的模型,如决策树和随机森林等,可以多使用一些简单的模型,再进行Bagging来减少过拟合
  • 具体情况具体分析,很多时候不需要特别的进行处理,另外如果真的进行采样,会导致预估均值有偏差,在CTR等对预估绝对值有要求的场景中,还需要校准

RS——从CG到NDCG评估指标


整体说明

  • CG(Cumulative Gain,累计增益),DCG(Discounted Cumulative Gain,折损累计增益)和NDCG(Normalized Discounted Cumulative Gain,归一化折损累计增益)是信息检索和推荐系统中常用的评估指标,用于衡量排序结果的质量

CG(Cumulative Gain,累计增益)

  • 定义 :单纯对前\( k \)个结果的相关性分数求和,不考虑位置的影响
  • 公式 :
    $$
    CG@k = \sum_{i=1}^k rel_i
    $$
    • \( rel_i \):第\( i \)个结果的相关性分数(如:0不相关,1相关,2非常相关等)
    • \( rel_i \)的准确性尤为重要,通常使用:
      • 人工标注相关性
      • 线上用户真实行为数据(比如点击为1,长时间观看为2,购买/下单为3,跳过为0)
      • 注:特殊场景下也会使用模型预测值
  • 局限性 :未考虑排序顺序对用户体验的影响(例如,相关结果排在后面对用户价值更低)

DCG(Discounted Cumulative Gain,折损累计增益)

  • 定义 :在CG基础上引入位置折损 ,排名越靠后的结果对总增益的贡献越小
  • 公式(常用版本) :
    $$
    DCG@k = \sum_{i=1}^k \frac{rel_i}{\log_2(i+1)}
    $$
    • 折损因子 :\( \log_2(i+1) \) 会随着位置\( i \)增大而降低当前结果的贡献
  • 变体(更强调相关性) :
    $$
    DCG@k = \sum_{i=1}^k \frac{2^{rel_i} - 1}{\log_2(i+1)}
    $$
    • 适用于相关性分数差异较大的场景(如0/1/3/5分级)

NDCG(Normalized DCG,归一化折损累计增益)

  • 定义 :将DCG除以理想排序下的DCG(IDCG) ,得到归一化分数(0~1之间)
  • 公式 :
    $$
    NDCG@k = \frac{DCG@k}{IDCG@k}
    $$
    • \( IDCG@k \):将前\( k \)个结果按相关性从高到低排序后计算的DCG(即理论最大值)
  • 特点 :
    • 值越接近1,排序越接近理想状态
    • 解决了不同查询间DCG无法直接比较的问题(因为不同查询的IDCG可能不同)

使用场景与示例

  • 适用领域 :
    • 搜索引擎结果排序
    • 推荐系统(如电影、商品推荐)
    • 问答系统答案排序
  • 示例 :
    • 查询结果的相关性分数:[3, 2, 3, 0, 1](按当前排序)
    • 计算DCG@3:
      $$
      DCG@3 = \frac{3}{\log_2 2} + \frac{2}{\log_2 3} + \frac{3}{\log_2 4} \approx 3 + 1.26 + 1.5 = 5.76
      $$
    • 理想排序的相关性分数:[3, 3, 2] -> \( IDCG@3 \approx 6.43 \)
    • \( NDCG@3 = \frac{5.76}{6.43} \approx 0.90 \)

优缺点

  • 优点 :
    • 考虑相关性分级和位置因素,更贴近用户实际体验
    • NDCG提供标准化比较,适合不同查询间的评估
  • 缺点 :
    • 需要人工标注相关性分数(成本高)
    • 对相关性分数的定义敏感(如0/1/2还是0/1/3/5)

附录:推荐系统中的其他评估指标

HitRate@K

  • 通常包含 用户粒度HitRate@K 和 物品粒度HitRate@K 两种
    • 用户粒度HitRate@K,也称为二值命中率(Binary Hit Rate):
      • 对单个用户而言,只要推荐列表(TopK)中有至少一个相关物品则该样本(用户)算作为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 用户粒度HitRate@K是所有用户命中情况的平均值:
        $$ HitRate@K = \frac{兴趣出现在TopK物品的用户数量}{总用户数量} $$
    • 物品粒度HitRate@K,也称为命中次数占比(Hit Ratio)
      • 对被推荐的单个物品而言,如果是用户喜欢的则视为命中 (即Hit = 1),否则为不命中(即Hit=0)
      • 物品粒度HitRate@K是所有推荐物品命中情况的平均值
        $$ HitRate@K = \frac{总命中物品数量}{总推荐物品数量} = \frac{\sum_{i}命中用户i的物品数量}{\sum_{i}给用户i的推荐物品总数} $$

MRR

  • TLDR:MRR(Mean Reciprocal Rank)是对每个查询的相关文档在推荐列表中排名的倒数的平均值
  • 具体计算方法为:
    $$MRR=\frac{1}{|Q|}\sum_{i=1}^{|Q|}\frac{1}{rank_i}$$
    • \(|Q|\)是查询的总数
    • \(rank_i\)是第\(i\)个查询中第一个相关文档在推荐列表中的排名
    • 如果一个查询在推荐列表中没有相关文档,则该查询对MRR的贡献为\(0\)
  • MRR主要用于衡量推荐系统在返回相关结果时的排序能力,它特别关注第一个相关结果在推荐列表中的位置,能够反映出推荐系统将最相关的项目排在前面的能力
  • 举例:假设用户有3个查询,对应的推荐列表及相关文档的排名如下:
    • 查询1:推荐列表为$$D_3,D_1,D_2$$,其中\(D_1\)是相关文档,排名为\(2\),则该查询的\(\frac{1}{rank}=\frac{1}{2}\)
    • 查询2:推荐列表为$$D_2,D_4,D_1$$,相关文档\(D_2\)排名为\(1\),该查询的\(\frac{1}{rank}=1\)
    • 查询3:推荐列表为$$D_3,D_4,D_5$$,没有相关文档,该查询的\(\frac{1}{rank}=0\)
    • 那么\(MRR = \frac{(\frac{1}{2}+1+0)}{3}=\frac{1.5}{3}=0.5\)

AP & mAP

  • 参见:RS——推荐系统评估指标-mAP

RS——推荐系统评估指标-mAP


整体说明

  • 在推荐系统中,mAP(Mean Average Precision)是衡量推荐结果准确性的重要指标 ,主要用于评估排序型推荐任务(如搜索、推荐列表排序)的性能
  • 综合考虑了推荐结果的相关性(Relevance)和排序质量(Ranking Quality) ,尤其适用于多类别推荐场景或需要衡量整体推荐精度的场景

AP(Average Precision,平均精度)

  • 定义 :对于单个查询(或用户),AP是其所有相关推荐结果的 Precision(精确率)的平均值 ,且仅对相关结果计算
  • 计算逻辑 :
    • 假设推荐列表中有 \( N \) 个结果,按排序从左到右依次判断每个结果是否为“相关项”(需预先定义相关性标准,如用户点击、购买等)
    • 对于每个相关项,计算其当前位置的精确率(即截至该位置,相关项在已推荐结果中的比例),并将所有相关项的精确率求平均,得到AP
  • 公式示例 :若推荐列表中有5个结果,相关性标记为 \( [1, 0, 1, 1, 0] \)(1表示相关,0表示不相关),则:
    • 第1个相关项位置:1,精确率 \( P_1 = 1/1 = 1 \)
    • 第3个相关项位置:3,精确率 \( P_3 = 2/3 \)
    • 第4个相关项位置:4,精确率 \( P_4 = 3/4 \)
    • AP = \( (1 + 2/3 + 3/4) / 3 ≈ 0.9167 \)

mAP(Mean Average Precision,平均AP)

  • 定义 :将AP指标扩展到所有查询(或用户) ,计算所有AP值的平均值,用于衡量推荐系统的整体性能
  • 公式 :
    $$
    \text{mAP} = \frac{1}{M} \sum_{i=1}^{M} \text{AP}_i
    $$
    • 其中,\( M \) 为查询(或用户)总数,\( \text{AP}_i \) 为第 \( i \) 个查询的AP值

附录:完整的mAP计算示例

  • 假设存在2个用户(查询),推荐列表及相关性如下:
  • 用户1 :推荐列表 = [A(1), B(0), C(1), D(0), E(1)]
    • 相关项位置:1、3、5
    • 各相关项精确率:
    • \( P_1 = 1/1 = 1 \)
    • \( P_3 = 2/3 ≈ 0.6667 \)
    • \( P_5 = 3/5 = 0.6 \)
    • \( \text{AP}_1 = (1 + 0.6667 + 0.6) / 3 ≈ 0.7556 \)
  • 用户2 :推荐列表 = [X(0), Y(1), Z(1)]
    • 相关项位置:2、3
    • 各相关项精确率:
      • \( P_2 = 1/2 = 0.5 \)
      • \( P_3 = 2/3 ≈ 0.6667 \)
      • \( \text{AP}_2 = (0.5 + 0.6667) / 2 ≈ 0.5833 \)
  • mAP计算 :
    $$
    \text{mAP} = \frac{0.7556 + 0.5833}{2} ≈ 0.6695
    $$
1…262728…62
Joe Zhou

Joe Zhou

Stay Hungry. Stay Foolish.

618 posts
52 tags
GitHub E-Mail
© 2026 Joe Zhou
Powered by Hexo
|
Theme — NexT.Gemini v5.1.4