当前位置: 代码迷 >> 综合 >> 技术揭秘 —— softmax 是 max 的一个解析推广
  详细解决方案

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

热度:41   发布时间:2023-12-12 16:08:57.0

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?)=x1?max(x1?,x2?,...,xn?)=max(max(x1?,x2?,...,xn?1?),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=1n?exi?exi??(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)) α+lim?i=1n?αxi?αxi??=1,(xi?=max(x1?,...,xn?))α+lim?i=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?αxi?i=1n?xi?α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) α+lim?smoothmax(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) α+lim?smoothmax(x,α)=max(x)(9)

  相关解决方案