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

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中最大者
当然,可以递归定义为:
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 函数的最大问题在于它既不光滑,也不单调。

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

x 1 < x 2 x_1<x_2 时,无论 x 1 x_1 如何变化,函数结果都不会变化,此时,训练算法无法计算梯度下降的方向。于是,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}}

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)

如果 x i x_i 互不相等,令 α \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))
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}}

事实上,有个很惊人的结论,
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)

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

换句话讲,对于向量 x \bm 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
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)

发布了182 篇原创文章 · 获赞 91 · 访问量 38万+

猜你喜欢

转载自blog.csdn.net/quicmous/article/details/105702084
max