关于Logistic Regression、Softmax Loss和Cross-entropy的随笔

最近看深度学习图像分类的相关知识的时候,发现对于Softmax损失函数的相关概念没有搞明白,因此讲设计到的相关知识一些梳理,供大家参考。

本文以CIFAR-10数据集图片分类任务为例展开,定义第 i 个输入样本xi ,输出 yi ,图片共有10类( k=0,1,...,c,c=9


Logistic Regression

Logistic Regression作为经典的二分类问题(样本label为0或1)的分类器,本质是通过Sigmoid函数将输入向量 x 映射到样本属于正负样本的概率值:

P(y=1|x)=f(x)=11+ex

P(y=0|x)=1f(x)

那么样本 x 属于观测值的概率值即为:
p(y|x)=f(x)y+(1f(x))1y

显然我们希望上式最大,即函数输出尽可能接近于真实label,那么假设有 m 样本,并假设独立同分布(这在机器学习的一般问题中是成立的,因为样本已经给定,他们互不影响),那么m 个样本的联合分布(可以理解为 m 个样本都分类正确的概率)即为:
L(θ)=i=1mp(yi|xi)

Logistic Regression核心的思想是 最大似然估计显然希望上式最大,即等价于 lnL(θ) 最大,即等价于 lnL(θ) 最小,这就得到了Andrew Ng课程中的损失函数形式:

Softmax (Loss)

上面介绍的是二分类的问题,可以用Logistic Regression解决,对于多分类问题,例如CIFAR-10图像分类问题,就需要多输出的Softmax函数形式。
以CIFAR-10数据集为例,最终网络输出层 y 一定是10个节点,分布代表10个类别,由于输出层一般是前一层通过全连接得到,那么yR1×10 ,Softmax作用就是将连续值 y 通过归一化转换为概率值:

P(yi|x)=kefyiefi

上式中 yi 代表第 i 个样本的真实类别P(yi|x) 就代表了网络对于输入样本属于每一类别赋予的概率值,最大值所属的类别即是该输入样本的类别。第i个样本的损失函数可以定义为:

Li=log(efyikefk)

对于m个样本的总体Loss可以写成:
Li=1m[i=1nk=c1(y=k)log(efyikefk)]

关于Logistic Regression和Softmax Loss的优化问题这里就不展开了,具体可以参考 UFLDL教程。

注:多个二分类的Logistic Regression也可以达到多分类,我们判断选择Softmax还是Logistic Regression的标准是样本的label是否存在重叠,例如判断人的种族两种方法都可以,因为一个人只可能属于一种种族;但是判断图片风格(风景照、户外照、室内照、人物照)则只能用Logistic Regression,因为一张照片可能属于多类。

Cross-entropy

为了更好得理解Softmax Loss,可以从交叉熵角度直观思考。首先,交叉熵是用来表述真实样本概率分布 p 和预测样本概率分布q=P(y|x) 的差异度:

H(p,q)=p(x)logq(x)

也可以写成:
H(p,q)=H(p)+DK,L(pq)

其中 H(p) p=(0,0,,1,0,0) 的熵(显然值为0), DK,L(pq) 相对熵/KL散度,我们的目标是最小化 DK,L(pq)

Softmax Loss和其他机器学习任务中用到的都是 DK,L(pq) 相对熵的概念,而不是交叉熵

以CIFAR-10图像分类任务为例,假设第i个样本图片属于第j类,即 pi=(0,0,,1,0,0) ,而经过Softmax得到的 q 的形式为qi=efyi/kefk,K=0,1,,9 , 显然q中的都为[0,1]的值,最理想的情形就是 p=q ,说明模型不仅分类正确,而且置信度100%,那么Loss应该0,否则q和p差的越大那么Loss应该越大。
w我们将 DK,L(pq) 继续化简:

DK,L(pq)=H(p,q)H(p)=p(x)logq(x)+p(x)logp(x)=p(x)logp(x)/q(x)

然后把上式的 p(x) q(x) 替换成 efyi efi 就得到Softmax Loss的表达式啦。

你可能感兴趣的:(机器学习,机器学习)