Sparsemax
介绍一篇修改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]$