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,...,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=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))
α→+∞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=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)

本文探讨了max函数的尴尬之处及其在机器学习中的局限性,介绍了softmax函数的诞生背景和数学定义,揭示了softmax与max函数之间的深层联系。通过引入smoothmax函数,展示了max函数实际上是smoothmax函数簇在特定条件下的极限值。
699

被折叠的 条评论
为什么被折叠?



