Softmax回归
Softmax计算公式
给定一个向量\(\mathbf{z}\),其元素为\(z_1,z_2,\cdots,z_n\),Softmax函数定义为: \[ \mathrm{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n}e^{z_j}} \] 其中,\(e\)是自然常数,\(z_i\)是向量\(\mathbf{z}\)的第\(i\)个元素,求和是在所有元素上进行
对于向量\(\mathbf{z}\),对元素应用Softmax后,每个元素都可以看成一个概率。
Softmax原理
\(\mathbf{z}\)是一个样本全连接层的输出值向量,有\(n\)个元素:\(z_1, z_2, \cdots, z_n\),如果我们想要将这\(n\)个值转成概率,需要满足概率的非负性和归一性。
非负性:因为\(z_i\)的值是随机的,想要其是非负的,可以使用指数函数\(a^{z_i}\)(\(a>0\)且\(a\neq1\)),这里使用了以\(e\)为底的指数函数\(e^{z_i}\)
归一性:这\(n\)个元素就对应着\(n\)个分类中每个分类的可能性概率,处理后这\(n\)个元素相加应该为一,如果只使用指数函数\(e^{z_i}\),那么相加的结果为 \[ \displaystyle\sum_{i=1}^{n}e^{z_i} \] 为了满足归一性,需要对每个元素除以它们相加的和: \[ z_1\longrightarrow\frac{e^{z_i}}{\sum_{i=1}^ne^{z_i}} \] 对应函数: \[ \mathrm{Softmax}(z_i) = \frac{e^{z_i}}{\sum_{j=1}^{n}e^{z_j}} \] 因此,将向量\(\mathbf{z}\)经过Softmax处理后可以得到一个由概率组成的向量,其中的每一个值就代表了属于该类的概率
Softmax的训练
在多分类问题中,Softmax函数通常与交叉熵损失函数一起使用。
交叉熵损失衡量的是两个概率分布之间的差异,其中一个分布是模型的预测(即Softmax输出),另一个分布是真实标签的one-hot编码。
交叉熵函数: \[ H(Q, P) = -\displaystyle\sum_{i}p_i\log q_i \] \(P\)为真实的概率分布,\(Q\)为模型预测的概率分布
在此多分类问题中,真实的概率要么为0要么为1,在不为该类时真实概率为零,在为该类时真实概率为1,每个样本只能属于一个分类,因此真实概率其实是一个one-hot向量,当该样本为第\(i\)类时,真实概率向量的第\(i\)个值为1,其余值均为0
因此,对于一个样本的交叉熵损失函数为(当这个样本的真实类别为\(j\)时): \[ l = -\displaystyle\sum_{i}p_i\log q_i = -\log q_j \] 即 \[ l(\mathbf{\hat y}, \mathbf{y}) = -\displaystyle_i y_i\log \hat y_i = -\log \hat y_y \] 对于多个样本,我们一般将每个样本的损失相加后求平均值。
具体实现方法详见softmax回归手动实现、损失函数部分
Softmax函数的局限性
- 忽略类间关系:Softmax假设每个类别是独立的,忽略了类别之间可能存在的关系。即,虽然是多分类,但是一个样本仅能属于一个类别
- 对异常值敏感:由于指数函数的性质,Softmax对大的异常值非常敏感,这可能导致模型对某些类别的预测过于自信。
Softmax的应用
Softmax函数是深度学习和机器学习中常用的一个函数,特别是在多分类问题中。它可以将一个向量转换成概率分布,使得每个元素的范围都在0到1之间,并且所有元素之和为1。这样,每个元素就可以被解释为属于某个类别的概率。
Softmax通常用于多分类问题,在全连接层最后接入softmax函数,将全连接层的输出变为概率。适用于多分类问题中的一个样本仅能属于一个类别的问题。