zl程序教程

您现在的位置是:首页 >  其他

当前栏目

技术揭秘 —— softmax 是 max 的一个解析推广

技术 一个 解析 揭秘 max 推广 softmax
2023-09-27 14:20:17 时间

1. 尴尬的 max 函数

函数 max 很尴尬,无法优雅地用一个公式表达出来:
m a x ( x 1 , x 2 , . . . , x n ) = x 1 , x 2 , . . . , x n 中 最 大 者 (1) \tag1 max(x_1,x_2,...,x_n)= x_1,x_2,...,x_n中最大者 max(x1,x2,...,xn)=x1,x2,...,xn(1)
当然,可以递归定义为:
m a x ( x 1 ) = x 1 m a x ( x 1 , x 2 , . . . , x n ) = m a x ( m a x ( x 1 , x 2 , . . . , x n − 1 ) , x n ) (2) \tag2 max(x_1)=x_1\\ max(x_1,x_2,...,x_n)= max(max(x_1,x_2,...,x_{n-1}),x_n) max(x1)=x1max(x1,x2,...,xn)=max(max(x1,x2,...,xn1),xn)(2)
然而,这没卵用。在基于梯度的学习训练中,我们需要一个光滑的函数,当然一个光滑的解析函数更好。max 函数的最大问题在于它既不光滑,也不单调。

函数
y = m a x ( x 1 , x 2 ) (3) \tag3 y=max(x_1,x_2) y=max(x1,x2)(3)

x 1 < x 2 x_1<x_2 x1<x2 时,无论 x 1 x_1 x1 如何变化,函数结果都不会变化,此时,训练算法无法计算梯度下降的方向。于是,softmax 函数应运而生。

2. softmax 函数

关于 softmax 的意图何定义,我已经在大作 "从 one-hot 到 softmax,再到交叉熵,技术一脉相承"说过了,不再赘述。这里只给出定义:
x k = e x i ∑ i = 1 n e x i (4) \tag4 x_k = \frac{e^{x_i}}{\sum_{i=1}^ne^{x_i}} xk=i=1nexiexi(4)

3. 进一步探讨 softmax

为什么(4)式采用 e 做底数?事实上,可以用任何正实数代替 e,
x k = α x i ∑ i = 1 n α x i , ( α > 0 ) (5) \tag5 x_k = \frac{\alpha^{x_i}}{\sum_{i=1}^n\alpha ^{x_i}}, (\alpha>0) xk=i=1nαxiαxi,(α>0)(5)

如果 x i x_i xi 互不相等,令 α → ∞ \alpha \to \infty α,我们会得到一个极端结果,
lim ⁡ α → + ∞ α x i ∑ i = 1 n α x i = 1 , ( x i = m a x ( x 1 , . . . , x n ) ) lim ⁡ α → + ∞ α x i ∑ i = 1 n α x i = 0 , ( x i < m a x ( x 1 , . . . , x n ) ) (6) \tag6 \lim_{\alpha \to +\infty}\frac{\alpha^{x_i}}{\sum_{i=1}^n\alpha ^{x_i}} = 1, (x_i=max(x_1,...,x_n))\\ \lim_{\alpha \to +\infty}\frac{\alpha^{x_i}}{\sum_{i=1}^n\alpha ^{x_i}} = 0, (x_i<max(x_1,...,x_n)) α+limi=1nαxiαxi=1,(xi=max(x1,...,xn))α+limi=1nαxiαxi=0,(xi<max(x1,...,xn))(6)
softmax 函数实际上是一个最大值成员的甄别器,最大值成员对应的输出的结果无限接近1,其他成员的输出结果无限接近0。

4. max 真相很惊人

我定义一个新的函数,smoothmax,令
s m o o t h m a x ( x 1 , . . . , x n ) = ∑ i = 1 n x i α x i ∑ i = 1 n α x i (7) \tag7 smoothmax(x_1,...,x_n)=\frac{\sum_{i=1}^nx_i\alpha^{x_i}}{\sum_{i=1}^n\alpha^{x_i}} smoothmax(x1,...,xn)=i=1nαxii=1nxiαxi(7)

事实上,有个很惊人的结论,
lim ⁡ α → + ∞ s m o o t h m a x ( x 1 , x 2 , . . . , x n ) = m a x ( x 1 , x 2 , . . . , x n ) (8) \tag8 \lim_{\alpha \to +\infty}smoothmax(x_1,x_2,...,x_n)=max(x_1,x_2,...,x_n) α+limsmoothmax(x1,x2,...,xn)=max(x1,x2,...,xn)(8)

也就是说,max 是一个解析函数簇的极限值。也就是说, softmax也好,smoothmax 也好,与 max 在骨子里是一样的,都表现出对最强者的尊重。

换句话讲,对于向量 x \bm x x
s m o o t h m a x ( x , e ) = s o f t m a x ( x ) ⋅ x (8) \tag8 smoothmax(\bm x, e)=softmax(\bm x) \cdot \bm x smoothmax(x,e)=softmax(x)x(8)
lim ⁡ α → + ∞ s m o o t h m a x ( x , α ) = m a x ( x ) (9) \tag9 \lim_{\alpha \to +\infty}smoothmax(\bm x, \alpha) = max(\bm x) α+limsmoothmax(x,α)=max(x)(9)