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的递推式等价,原因如下:
- 当$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的递推式后,二者完全一致。 - 当$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
相关产品推荐
相关产品推荐

