激活函数篇 04 —— softmax函数
将模型的输出转换为概率分布,使得模型能够输出每个类别的概率值。
Softmax
(
a
i
)
=
e
a
i
∑
j
=
1
n
e
a
j
\text{Softmax}(a_i)=\frac{e^{a_i}}{\sum_{j=1}^n e^{a_j}}
Softmax(ai)=∑j=1neajeai
其中,
a
i
a_i
ai 是输入向量中的第
i
i
i 个元素,
n
n
n 是输入向量的长度。
将输入向量中的每个元素转换为一个概率值,使得所有输出的概率值之和为 1。这样,Softmax 函数可以将模型的输出解释为一个概率分布,从而方便地进行多分类任务。
在零点不可微,负输入的梯度为零,会产生永不激活的死亡神经元。复杂度可能会有点高,因为要做求和。输入值太大的话可能梯度会变小导致梯度消失。
假设有一个输入向量
a
=
[
2
,
1
,
0.1
]
a=[2,1,0.1]
a=[2,1,0.1],通过 Softmax 计算每个元素的概率值:
Softmax
(
2
)
=
e
2
e
2
+
e
1
+
e
0.1
≈
7.389
11.212
≈
0.659
\text{Softmax}(2)=\frac{e^2}{e^2+e^1+e^{0.1}} \approx \frac{7.389}{11.212} \approx 0.659
Softmax(2)=e2+e1+e0.1e2≈11.2127.389≈0.659
Softmax
(
1
)
=
e
1
e
2
+
e
1
+
e
0.1
≈
2.718
11.212
≈
0.242
\text{Softmax}(1)=\frac{e^1}{e^2+e^1+e^{0.1}} \approx \frac{2.718}{11.212} \approx 0.242
Softmax(1)=e2+e1+e0.1e1≈11.2122.718≈0.242
Softmax
(
0.1
)
=
e
0.1
e
2
+
e
1
+
e
0.1
≈
1.105
11.212
≈
0.099
\text{Softmax}(0.1)=\frac{e^{0.1}}{e^2+e^1+e^{0.1}} \approx \frac{1.105}{11.212} \approx 0.099
Softmax(0.1)=e2+e1+e0.1e0.1≈11.2121.105≈0.099
输出概率分布为 [ 0.659 , 0.242 , 0.099 ] [0.659,0.242,0.099] [0.659,0.242,0.099],这些概率值之和为 1。
应用场景
1. 多分类任务: 例如图像分类、文本分类等。它将模型的输出转换为每个类别的概率值,从而方便地进行分类预测。
2. 语言模型: 用于语言模型的输出层,将模型的输出转换为每个单词的概率值,从而预测下一个单词。
3. 推荐系统: 用于计算用户对不同物品的偏好概率,从而进行个性化推荐。
torch实现
import torch
import torch.nn.functional as F
z = torch.tensor([2, 1, 0.1])
pb = F.softmax(z, dim=0)
print(pb)
tensorflow实现
import tensorflow as tf
z = tf.constant([2, 1, 0.1])
pb= tf.nn.softmax(z)
print(pb)