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