将模型的输出转换为概率分布,使得模型能够输出每个类别的概率值。
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)