介绍一篇修改softmax的文章,题目是:

[ICML 2016] From Softmax to Sparsemax: A Sparse Model of Attention and Multi-Label Classification

它允许softmax非平滑输出,某些位置的prob直接为0

method

原来的softmax公式是通过下面的计算得到概率分布

现在,作者考虑直接将隐状态向一个 $K-1$ 维的单纯形投影,求得的 $p$ 即是softmax的结果

为什么是K-1维

因为有 $1^Tp=1$ 的限制,导致自由度减1

和 $x+y+z=1$ 表示的是一个平面而不是三维空间是一个道理

如何求解

将原问题转化为一个优化问题:

考虑求解其拉格朗日对偶问题:

这里系数 $\frac{1}{2}$ 是为了方便求导后消去系数

考虑KKT条件:

对于 $p_i^{\ast} > 0$,由于式(5),此时必有 $\lambda_i^{\ast}=0$,所以由式(1),得:

由式(2),得:

其中,$S(z) = \{j \in K \, | \,\, p_j^*>0\}$

由此,我们知道了如何从 $z$ 得到 $p$,即:

求出 $\mu$ 的关键,是求出多大 $|S(z)|$ 才能正好满足:

  • $z_j^* - \mu > 0, \quad \forall j \in S(z)$

  • $z_j^* - \mu \leq 0, \quad \forall j \notin S(z)$

注意 $\mu$ 不随着 $|S(z)|$ 的增加而单调,所以不能二分求解,朴素地用 $O(K)$ 的复杂度遍历寻找 $\mu$

但是 $\Delta \mu$ 是单调的,所以理应有更快速的搜索方法

如果只是在 lm_head 位置对词表大小 vocab_size 做 softmax,那可能确实速度不要紧

但是如果是对attention做softmax就完蛋了,因为它要排序,排序的复杂度是 $O(N \log N)$。这样对于长度为 $N$ 的 attention,复杂度直接到 $O(KN\log N)$ 了,爆了

所以如果不做修改,不可能用到attention里

具体例子

假设我们有一个隐状态 $[1.5,2,0.5]^T$,计算过程如下:

对所有元素大小排序 $2>1.5>0.5$

遍历 $|S(z)|$,从 $|S(z)|=1$ 开始,求出 $\mu = \frac{2-1}{1} = 1$

验证是否满足条件:

不满足,继续搜,$|S(z)|=2$,$\mu = \frac{2+1.5-1}{2} = 1.25$

验证是否满足条件:

满足了,所以 $\text{sparsemax}(z) = [0.25, 0.75, 0]$