激活函数大汇总(十七)(Softmax2d附代码和详细公式)
更多激活函数见激活函数大汇总列表
一、引言
欢迎来到我们深入探索神经网络核心组成部分——激活函数的系列博客。在人工智能的世界里,激活函数扮演着不可或缺的角色,它们决定着神经元的输出,并且影响着网络的学习能力与表现力。鉴于激活函数的重要性和多样性,我们将通过几篇文章的形式,本篇详细介绍两种激活函数,旨在帮助读者深入了解各种激活函数的特点、应用场景及其对模型性能的影响。
在接下来的文章中,我们将逐一探讨各种激活函数,从经典到最新的研究成果。
限于笔者水平,对于本博客存在的纰漏和错误,欢迎大家留言指正,我将不断更新。
二、Softmax2d
softmax是一个数学函数,它将K个真实的数的向量作为输入,并将其转换为概率分布,参见图,即在应用softmax之前,向量分量可以是负的或大于0,但是在应用softmax之后,每个分量将在区间[0,1]中,这些分量的和等于1,所以我们可以把这些值解释为概率。
Softmax2d是一个在特定上下文中使用的术语,通常指的是在二维数据上应用的Softmax函数。这种形式的Softmax特别适用于处理图像或二维空间数据,其中需要对每个像素点或二维数据点进行多分类。它通常用于卷积神经网络(CNN)中的语义分割任务,其中模型需要为图像中的每个像素点分配一个类别标签。
1. 数学定义
假设有一个二维数据张量 X X X,其大小为 C × H × W C \times H \times W C×H×W,其中 C C C是类别数, H H H和 W W W分别是数据的高度和宽度。Softmax2d函数对每个位置 ( h , w ) (h, w) (h,w)上的 C C C个类别分数进行Softmax计算,公式定义为:
Softmax
2
d
(
X
)
c
,
h
,
w
=
e
X
c
,
h
,
w
∑
k
=
1
C
e
X
k
,
h
,
w
\operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}=\frac{e^{X_{c, h, w}}}{\sum_{k=1}^C e^{X_{k, h, w}}}
Softmax2 d(X)c,h,w=∑k=1CeXk,h,weXc,h,w
对于给定位置
(
h
,
w
)
(h, w)
(h,w),这个公式计算属于每个类别
C
C
C的概率,确保了这些概率在每个位置的总和为1。
2. 函数特性
- 归一化输出:Softmax2d确保了每个位置 ( h , w ) (h, w) (h,w)上所有类别的概率之和为1,有助于将模型输出解释为概率分布。
- 区分度:通过指数运算,Softmax2d增强了模型对不同类别分数差异的敏感性,有助于区分各个类别。
- 适用于多分类:特别适用于像素级多分类问题,如语义分割,每个像素点需要被分类到特定类别。
3. 导数
Softmax2d函数关于输入 X c , h , w X_{c, h, w} Xc,h,w的导数与标准Softmax类似,具有以下形式:
∂
Softmax
2
d
(
X
)
c
,
h
,
w
∂
X
i
,
h
,
w
=
Softmax
2
d
(
X
)
c
,
h
,
w
(
δ
c
i
−
Softmax
2
d
(
X
)
i
,
h
,
w
)
\frac{\partial \operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}}{\partial X_{i, h, w}}=\operatorname{Softmax} 2 \mathrm{~d}(X)_{c, h, w}\left(\delta_{c i}-\operatorname{Softmax} 2 \mathrm{~d}(X)_{i, h, w}\right)
∂Xi,h,w∂Softmax2 d(X)c,h,w=Softmax2 d(X)c,h,w(δci−Softmax2 d(X)i,h,w)
其中,
δ
c
i
\delta_{c i}
δci是Kronecker delta函数,当
c
=
i
c=i
c=i时值为1,否则为0。这表明导数取决于特定位置的Softmax输出和类别间的交互。
4. 使用场景与局限性
使用场景:
- 语义分割:在需要对图像的每个像素进行分类的应用中,如语义分割任务,Softmax2d是一种常见的选择。
- 图像处理的多分类问题:在图像处理的其他多分类问题中,如像素级标签预测,Softmax2d也很有用。
局限性:
- 计算资源:对于大型图像,Softmax2d的计算可能会消耗大量资源,尤其是当类别数很多时。
- 类别不平衡问题:在存在显著类别不平衡的数据集上,Softmax2d可能偏向于主导类别,需要采取额外措施来缓解这个问题。
5.代码实现
下面是softmax2d
函数的实现及其详细解读:
import numpy as np
def softmax2d(x):
"""
计算二维数据上的Softmax激活函数。
参数:
x -- 输入值,形状应为(C, H, W),其中C是类别数,H和W是二维数据的高度和宽度。
返回:
二维数据上的Softmax激活结果,形状同输入。
"""
# 防止数值溢出,从每个位置的分数中减去该位置的最大分数
e_x = np.exp(x - np.max(x, axis=0, keepdims=True))
# 按类别求和,以进行归一化,并保持维度一致以便于广播
sum_e_x = np.sum(e_x, axis=0, keepdims=True)
# 计算Softmax
softmax = e_x / sum_e_x
return softmax
解读
-
数值稳定性:通过从输入
x
中减去每个位置(对应于高度和宽度)的最大分数,该步骤有助于防止在指数计算时发生数值溢出。这是一种常见的技巧,用于增加数值计算的稳定性,而不影响Softmax函数的输出结果。 -
指数计算和归一化:
np.exp(x - np.max(x, axis=0, keepdims=True))
计算调整后的指数值。通过在axis=0
(类别维度)上对这些指数值求和,并保持维度(keepdims=True
)以便于广播,我们可以得到归一化的分母。 -
Softmax计算:最后,通过将每个指数值除以归一化的分母,计算得到每个位置上每个类别的Softmax概率。
示例和输出
给定形状为(3, 4, 4)
的输入x
(模拟3个类别在4x4的图像上的分数),函数输出了对应的Softmax2d激活结果。输出验证了Softmax概率在每个位置(对于所有类别)的总和为1,这符合Softmax函数的性质。
三、参考文献
虽然Softmax2d本身可能不经常作为单独的研究焦点,但你可以在以下类型的文献中找到关于Softmax函数及其在图像处理任务中应用的深入讨论:
- Long, J., Shelhamer, E., & Darrell, T. (2015). “Fully convolutional networks for semantic segmentation.” In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 3431-3440). 这篇论文介绍了全卷积网络(FCN)在语义分割任务中的应用,其中Softmax函数用于为每个像素点分配类别标签,是理解Softmax2d在图像分割中应用的良好起点。
- Chen, L.-C., Papandreou, G., Kokkinos, I., Murphy, K., & Yuille, A. L. (2018). “DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs.” IEEE Transactions on Pattern Analysis and Machine Intelligence, 40(4), 834-848. DeepLab模型采用了Softmax函数进行像素级分类,该研究展示了如何在深度学习模型中有效地使用Softmax来处理复杂的图像分割任务。
- He, K., Zhang, X., Ren, S., & Sun, J. (2016). “Deep Residual Learning for Image Recognition.” In Proceedings of the IEEE conference on computer vision and pattern recognition (pp. 770-778). 虽然这篇论文主要聚焦于残差网络(ResNet)和图像识别,但它为理解深度学习模型中Softmax函数的作用提供了坚实的基础,包括在多分类问题中的应用。