You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Online Softmax两种递归计算方法等价性的数学原理解析

两种Online Softmax递归方法的等价性分析

首先明确核心变量定义:

  • $m_k = \max(z_1, z_2, ..., z_k)$:前k个输入元素的最大值
  • $d_k = \sum_{i=1}^k \exp(z_i - m_k)$:前k个元素经最大值归一化后的指数和

方法1的递推逻辑(标准Online Softmax实现)

方法1的递推式直接从$d_k$的定义推导而来:
$$
d_k = \frac{\sum_{i=1}^{k-1} \exp(z_i) + \exp(z_k)}{\exp(m_k)}
$$
结合$d_{k-1} = \frac{\sum_{i=1}^{k-1} \exp(z_i)}{\exp(m_{k-1})}$,代入后得到:
$$
d_k = d_{k-1} \cdot \exp(m_{k-1} - m_k) + \exp(z_k - m_k)
$$
这个递推式对所有输入序列都成立,是Online Softmax的标准实现。

方法2的递推式仅在特定条件下等价

方法2将递推式中的$m_{k-1}$替换为$z_{k-1}$,得到:
$$
d_k = d_{k-1} \cdot \exp(z_{k-1} - m_k) + \exp(z_k - m_k)
$$
该式仅当**前k-1个元素的最大值等于第k-1个元素(即$m_{k-1}=z_{k-1}$)**时,才会与方法1的递推式等价,原因如下:

  1. 当$z_k \geq m_{k-1}$时,$m_k = z_k$,此时方法2的递推式变为:
    $$
    d_k = d_{k-1} \cdot \exp(z_{k-1} - z_k) + 1
    $$
    由于$m_{k-1}=z_{k-1}$,代入方法1的递推式后,二者完全一致。
  2. 当$z_k < m_{k-1}$时,$m_k = m_{k-1}$,此时方法2的递推式变为:
    $$
    d_k = d_{k-1} \cdot \exp(z_{k-1} - m_{k-1}) + \exp(z_k - m_{k-1})
    $$
    由于$m_{k-1}=z_{k-1}$,$\exp(z_{k-1}-m_{k-1})=1$,递推式退化为方法1的形式:
    $$
    d_k = d_{k-1} + \exp(z_k - m_{k-1})
    $$

你测试结果等价的原因

当输入序列满足每个位置的元素都是前i个元素的最大值(即序列非递减)时,每一步都满足$m_{k-1}=z_{k-1}$,两种方法的输出会完全一致。这也是你测试中结果等价的核心原因。

但对于不满足该条件的序列(如非递增序列、存在局部最大值的序列),两种方法的输出会出现差异。

内容的提问来源于stack exchange,提问作者korangar leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 07:03:12