最近看深度学习图像分类的相关知识的时候,发现对于Softmax损失函数的相关概念没有搞明白,因此讲设计到的相关知识一些梳理,供大家参考。
本文以CIFAR-10数据集图片分类任务为例展开,定义第 i 个输入样本
xi ,输出 yi ,图片共有10类( k=0,1,...,c,c=9 )
Logistic Regression
Logistic Regression作为经典的二分类问题(样本label为0或1)的分类器,本质是通过Sigmoid函数将输入向量
x
映射到样本属于正负样本的概率值:
那么样本 x 属于观测值的概率值即为:
显然我们希望上式最大,即函数输出尽可能接近于真实label,那么假设有 m 样本,并假设独立同分布(这在机器学习的一般问题中是成立的,因为样本已经给定,他们互不影响),那么
Logistic Regression核心的思想是 最大似然估计显然希望上式最大,即等价于 lnL(θ) 最大,即等价于 −lnL(θ) 最小,这就得到了Andrew Ng课程中的损失函数形式:
Softmax (Loss)
上面介绍的是二分类的问题,可以用Logistic Regression解决,对于多分类问题,例如CIFAR-10图像分类问题,就需要多输出的Softmax函数形式。
以CIFAR-10数据集为例,最终网络输出层
y
一定是10个节点,分布代表10个类别,由于输出层一般是前一层通过全连接得到,那么
上式中 yi 代表第 i 个样本的真实类别
对于m个样本的总体Loss可以写成:
关于Logistic Regression和Softmax Loss的优化问题这里就不展开了,具体可以参考 UFLDL教程。
注:多个二分类的Logistic Regression也可以达到多分类,我们判断选择Softmax还是Logistic Regression的标准是样本的label是否存在重叠,例如判断人的种族两种方法都可以,因为一个人只可能属于一种种族;但是判断图片风格(风景照、户外照、室内照、人物照)则只能用Logistic Regression,因为一张照片可能属于多类。
Cross-entropy
为了更好得理解Softmax Loss,可以从交叉熵角度直观思考。首先,交叉熵是用来表述真实样本概率分布
p
和预测样本概率分布
也可以写成:
其中 H(p) 是 p=(0,0,…,1,0…,0) 的熵(显然值为0), DK,L(p∥q) 为 相对熵/KL散度,我们的目标是最小化 DK,L(p∥q) 。
Softmax Loss和其他机器学习任务中用到的都是 DK,L(p∥q) 相对熵的概念,而不是交叉熵
以CIFAR-10图像分类任务为例,假设第i个样本图片属于第j类,即
pi=(0,0,…,1,0…,0)
,而经过Softmax得到的
q
的形式为
w我们将
DK,L(p∥q)
继续化简:
然后把上式的 p(x) 和 q(x) 替换成 efyi 和 efi 就得到Softmax Loss的表达式啦。