一、概述
Logistic Regression是一个二分类的解决方法
𝑦 = 𝜎 (𝑥𝑤 + b)
𝜎:sigmoid or logistic
通过训练可以得到参数w和b,然后得到的值在经过一个sigmoid函数得到一个范围在[0,1]的值,即我们得到的是f:x->p(y|x;𝜃)
如果是小于0.5,就可以被认为是分类0;大于0.5就可以被认为是分类1。
二、回归问题与分类问题的对比
回归问题:
目标:pred = y
即希望模型预测的值与真实值是相等的
方法:minisize dist(pred,y)
通常使用二范数
∥
\parallel
∥pred-y
∥
2
\parallel_2
∥2的平方
分类问题:
目标:使分类的准确率最大
方法:使模型预测出来的概率分布与真实的概率分布之间的差异达到最小,通常可以通过minimize divergence
(
p
θ
(
y
∣
x
)
,
p
r
(
y
∣
x
)
)
(p_θ(y|x),p_r(y|x))
(pθ(y∣x),pr(y∣x))的方法。
这里需要注意到的一个问题是,我们不能通过使准确率最大从而进行调参,因为这样会出现两个问题:
1、gradient为0。当我们进行调参时,预测的概率向正确的方向发生变化,但是分类结果并没有变化,此时准确率是不变的,因此会出现梯度为0的情况。
2、gradient不连续。假如因为调参时概率由原来的0.499变成0.501,使准确率发生了很大的变化,而参数改动很小,会出现梯度爆炸或者不连续的现象。
三、为什么叫逻辑回归而不是逻辑分类
首先,使用的是sigmoid函数,这是一个logistic函数。
其次,在进行调参的过程中,有时候使用MSE进行调参,这与回归使用的方法很相似。但是现在更多的是使用交叉熵函数Cross Entropy时预测的概率分布与真实的概率分布更接近,其实本质还是可以看作是一个分类问题。
四、多分类问题
-
得到x条件下不同y值的概率
𝑓:𝑥→𝑝(𝑦|𝑥)
[𝑝(𝑦=0|𝑥),𝑝(𝑦=1|𝑥),…,𝑝(𝑦=9|𝑥)]
𝑝(𝑦|x)∈[0,1] -
总概率为1
∑ i = 0 9 \sum_{i=0}^9 ∑i=09 𝑝(𝑦=𝑖|𝑥)=1
为了使概率和为1,因此使用Softmax函数:
该函数会放大数值比较大的值与数值小的值的差异,因此叫max。
五、信息熵
在香浓提出的信息熵中是这样定义的:
Entropy = -
∑
P
(
i
)
l
o
g
P
(
i
)
\sum P(i)logP(i)
∑P(i)logP(i)
主要意思是概率发生越小的事情,它的信息量是越大的。
该值越大,表示数据越稳定;该值越小,表示数据的差异越大。
六、交叉熵
分类问题的loss一般有三种:
- MSE
- Cross Entropy Loss
- Hinge Loss(用于SVM)
其中sigmoid+MSE的方法,可能会出现梯度离散的问题,而且在同样的情况下,数据收敛的速度没有cross entropy快。
对于交叉熵损失函数:
在预测概率比较小的情况下,梯度很大,数据收敛的很快,越接近目标值的时候,收敛速度减慢。
但是在实际应用中,MSE的梯度计算比较简单,因此可能会有更好的效果。
交叉熵函数是这样定义的:
H
(
p
,
q
)
=
−
∑
p
(
x
)
l
o
g
2
q
(
x
)
H(p,q) = - \sum p(x)log_2 q(x)
H(p,q)=−∑p(x)log2q(x)
H
(
p
,
q
)
=
H
(
p
)
+
D
K
L
(
p
∣
q
)
H(p,q) = H(p) + D_{KL}(p|q)
H(p,q)=H(p)+DKL(p∣q)
其中,p是真实的概率分布,q是模型预测的概率分布。
我们的最终目标是使P=Q,这时:
H
(
p
,
q
)
=
H
(
p
)
H(p,q) = H(p)
H(p,q)=H(p)
对于one-hot编码,H§=0。
所以使H(p,q)最小可以达到我们的目的。
一般数据的分布是固定的,所以我们的目标一般就是最小化 D K L ( p ∣ q ) D_{KL}(p|q) DKL(p∣q)。
七、实例分析
import torch.nn.functional as F
F.cross_entropy(logit,target)
这里要注意传给cross_entropy的logit是没有经过softmax处理的数据,然后cross_entropy函数会自动先对logit进行softmax,再log,最后再计算nll_loss.
就相当于:
soft_out = F.softmax(logit)
log_soft_out = torch.log(soft_out)
loss = F.nll_loss(log_soft_out, target)