Softmax函数
softmax回归这个名字虽然有回归二字,其实是用于分类问题的。softmax函数能够将未规范化的预测变换为非负数并且总和为1,同时让模型保持可导的性质。
- 我们首先对每个未规范化的预测求幂,这样可以确保输出非负
- 为了确保最终输出的概率值总和为1,我们再让每个求幂后的结果除以它们的总和。
尽管softmax是一个非线性函数,但softmax回归的输出仍然由输入特征的仿射变换决定。 因此,softmax回归是一个线性模型
交叉熵损失函数
表达式
二分类
- : 样本i的label, 1 or 0
- : 样本i的为1的概率
多分类
- : 样本i是否为类别c
- : 样本i为类别c的概率
- : 类别总数
Softmax的手工实现
import torch
def softmax(X):
X_exp = torch.exp(X)
partition = X_exp.sum(dim=1, keepdim=True)
return X_exp / partition
def cross_entropy(y_hat, y):
return - torch.log(y_hat[range(len(y_hat)), y])