本文其实是我在知乎上无意中翻到的一条提问:softmax到底有哪些作用?,其中苏剑林大佬关于第四个问题的回复,给我产生了一些思考。为什么一个分布在多次Softmax之后,每个值会趋于相同?例如[1,100]在大约10次Softmax操作后会变成[0.5,0.5];[1,2,3,4]大约5次Softmax操作后会变成[0.25,0.25,0.25,0.25]
苏剑林大佬的原话是:“这其实是一个没什么实用价值的结果,因为对Softmax的结果再次进行Softmax没有什么物理意义”。不过我还是本着好奇的心态看完了他对于这个问题的证明,感兴趣的同学直接看原回答即可。实际上由于篇幅限制,苏剑林大佬的证明过程省略了不少步骤,因此这里我给出完整的证明流程
设第 i i i次迭代后的向量为 ( p 1 ( i ) , p 2 ( i ) , . . . , p n ( i ) ) (p_1^{(i)},p_2^{(i)},...,p_n^{(i)}) (p1(i),p2(i),...,pn(i)),我们先证明 n ≥ 3 n\ge 3 n≥3的情形。不妨设其中最大值、最小值为 p max ( i ) , p min ( i ) p_{\text{max}}^{(i)},p_{\text{min}}^{(i)} pmax(i),pmin(i),则 Softmax ( p 1 ( i ) , p 2 ( i ) , . . . , p n ( i ) ) \text{Softmax}(p_1^{(i)},p_2^{(i)},...,p_n^{(i)}) Softmax(p1(i),p2(i),...,pn(i))的最大值为
p max ( i + 1 ) = e p max ( i ) ∑ j = 1 n e p j ( i ) ≤ e p max ( i ) n e p min ( i ) = e p max ( i ) − p min ( i ) n p_{\text{max}}^{(i+1)}=\frac{e^{p_{\text{max}}^{(i)}}}{\sum_{j=1}^ne^{p_j^{(i)}}}\leq \frac{e^{p_{\text{max}}^{(i)}}}{ne^{p_{\text{min}}^{(i)}}}=\frac{e^{p_{\text{max}}^{(i)}-p_{\text{min}}^{(i)}}}{n} pmax(i+1)=∑j=1nepj(i)epmax(i)≤nepmin(i)epmax(i)=nepmax(i)−pmin(i)
同理,最小值为
p min ( i + 1 ) = e p min ( i ) ∑ j = 1 n e p j ( i ) ≥ e p min ( i ) n e p max ( i ) = e p min ( i ) − p max ( i ) n p_{\text{min}}^{(i+1)}=\frac{e^{p_{\text{min}}^{(i)}}}{\sum_{j=1}^ne^{p_j^{(i)}}}\ge \frac{e^{p_{\text{min}}^{(i)}}}{ne^{p_{\text{max}}^{(i)}}}=\frac{e^{p_{\text{min}}^{(i)}-p_{\text{max}}^{(i)}}}{n} pmin(i+1)=∑j=1nepj(i)epmin(i)≥nepmax(i)epmin(i)=nepmin(i)−pmax(i)
则
p max ( i + 1 ) − p min ( i + 1 ) ≤ e p max ( i ) − p min ( i ) − e p min ( i ) − p max ( i ) n p_{\text{max}}^{(i+1)} - p_{\text{min}}^{(i+1)} \leq \frac{e^{p_{\text{max}}^{(i)}-p_{\text{min}}^{(i)}} - e^{p_{\text{min}}^{(i)}-p_{\text{max}}^{(i)}}}{n} pmax(i+1)−pmin(i+1)≤nepmax(i)−pmin(i)−epmin(i)−pmax(i)
设 a i = p max ( i ) − p min ( i ) a_{i}=p^{(i)}_{\text{max}} -p^{(i)}_{\text{min}} ai=pmax(i)−pmin(i),则 0 ≤ a i + 1 ≤ e a i − e − a i n 0\leq a_{i+1}\leq \frac{e^{a_i}-e^{-a_i}}{n} 0≤ai+1≤neai−e−ai,所以现在问题转化为证明 lim i → ∞ a i + 1 = 0 \lim\limits_{i\to \infty}a_{i+1}=0 i→∞limai+1=0成立
由 a i + 1 a_{i+1} ai+1的定义,即 p max ( i + 1 ) − p min ( i + 1 ) p_{\text{max}}^{(i+1)}-p_{\text{min}}^{(i+1)} pmax(i+1)−pmin(i+1)(概率的差),所以 0 ≤ a i + 1 0\leq a_{i+1} 0≤ai+1很容易想到。接下来如果我们能够证明 e a i − e − a i n \frac{e^{a_i}-e^{-a_i}}{n} neai−e−ai收敛到0,那么通过夹逼定理就可以证得 lim i → ∞ a i + 1 = 0 \lim\limits_{i\to \infty}a_{i+1}=0 i→∞limai+1=0
因为 f ( x ) = e x − e − x n f(x) = \frac{e^x - e^{-x}}{n} f(x)=nex−e−x是单调递增的,它只有一个不动点,只要初始值不大于0,那么迭代 x i + 1 = f ( x i ) x_{i+1}=f(x_i) xi+1=f(xi)必然收敛到0。所以 { a i } i = 1 ∞ \{a_i\}_{i=1}^\infty {ai}i=1∞也必然收敛到0
当 n = 2 n=2 n=2时,上述放缩太宽了,也就是从1出发,迭代 x i + 1 = f ( x i ) x_{i+1}=f(x_i) xi+1=f(xi)不收敛。我们可以直接考虑
p min ( i + 1 ) ≥ e p min ( i ) − p max ( i ) 2 = e p min ( i ) − ( 1 − p min ( i ) ) 2 = e 2 p min ( i ) − 1 2 p_{\text{min}}^{(i+1)}\ge \frac{e^{p_{\text{min}}^{(i)}-p_{\text{max}}^{(i)}}}{2}=\frac{e^{p_{\text{min}}^{(i)}-(1-p_{\text{min}}^{(i)})}}{2}=\frac{e^{2p_{\text{min}}^{(i)}-1}}{2} pmin(i+1)≥2epmin(i)−pmax(i)=2epmin(i)−(1−pmin(i))=2e2pmin(i)−1
基于类似的过程, g ( x ) = e 2 x − 1 2 g(x)=\frac{e^{2x-1}}{2} g(x)=2e2x−1单调递增并且只有一个不动点 x = 1 2 x=\frac{1}{2} x=21,所以从0出发, p min ( i ) p_{\text{min}}^{(i)} pmin(i)会收敛到 1 2 \frac{1}{2} 21
Reference
- softmax到底有哪些作用?