一、逻辑回归的介绍
前面介绍过线性回归,我们知道线性回归输入和输出之间满足线性关系,但是很多问题不是简单的线性关系,因此需要引入非线性函数来增强模型的拟合能力,逻辑回归(logistics regression)相当于在此基础上加入了非线性函数
σ
(
⋅
)
\sigma(·)
σ(⋅),也就是常说的sigmoid函数,其公式为:
σ
(
z
)
=
1
1
+
e
x
p
(
−
z
)
\sigma(z)=\frac{1}{1+exp(-z)}
σ(z)=1+exp(−z)1
z
=
w
T
⋅
x
+
b
z=w^T·x+b
z=wT⋅x+b
σ
(
z
)
\sigma(z)
σ(z)的函数图像如下图,它将输入压缩到0和1之间,当
z
>
0
z>0
z>0时,输出
σ
(
z
)
>
0.5
\sigma(z)>0.5
σ(z)>0.5;当
z
<
0
z<0
z<0时,输出
σ
(
z
)
<
0.5
\sigma(z)<0.5
σ(z)<0.5。我们还可以发现当
z
→
0
z \to 0
z→0时,梯度较大,函数变化较快;当
z
z
z趋于无穷时,梯度趋于0,函数变化较慢。也可以根据其导数来观察性质,
σ
′
(
z
)
=
σ
(
z
)
(
1
−
σ
(
z
)
)
\sigma '(z)=\sigma (z)(1-\sigma (z))
σ′(z)=σ(z)(1−σ(z)),当
σ
(
z
)
\sigma (z)
σ(z)趋于0和1时,即
z
z
z趋于无穷时,梯度较小,当
σ
(
z
)
=
0.5
\sigma (z)=0.5
σ(z)=0.5,即
z
=
0
z=0
z=0时,梯度最大。
我们知道线性回归给定输入特征后可以预测输出值,逻辑回归返回的是一个0到1之间的数,这其实是一个概率值,常用来做二分类。
假设有两类样本
C
1
C1
C1和
C
2
C2
C2,现在给定一个样本
x
x
x,我们可以定义样本属于类别
C
1
C1
C1的概率为:
P
(
C
1
∣
x
)
=
σ
(
z
)
=
σ
(
w
T
⋅
x
+
b
)
P(C1|x)=\sigma (z)=\sigma (w^T·x+b)
P(C1∣x)=σ(z)=σ(wT⋅x+b)
那么样本属于
C
2
C2
C2的概率显然为:
P
(
C
2
∣
x
)
=
1
−
P
(
C
1
∣
x
)
P(C2|x)=1-P(C1|x)
P(C2∣x)=1−P(C1∣x)。我们只需要根据
z
=
w
T
⋅
x
+
b
z=w^T·x+b
z=wT⋅x+b的正负就能判断类别,当
z
>
0
z>0
z>0时,
P
(
C
1
∣
x
)
>
0.5
P(C1|x)>0.5
P(C1∣x)>0.5,可以判定
x
x
x属于
C
1
C1
C1,否则属于
C
2
C2
C2。
令
y
=
1
y=1
y=1表示
C
1
C1
C1的标签,
y
=
0
y=0
y=0表示
C
2
C2
C2的标签,
y
^
\hat y
y^表示预测值,
y
^
=
P
(
C
1
∣
x
)
\hat y=P(C1|x)
y^=P(C1∣x),这里0和1表示哪个类别的标签都可以,预先定义好就行,标签为1的样本通常称为正样本,标签为0的称为负样本。
给定
n
n
n个样本
(
x
(
1
)
,
y
(
1
)
)
,
(
x
(
2
)
,
y
(
2
)
)
,
⋅
⋅
⋅
,
(
x
(
n
)
,
y
(
n
)
)
(x^{(1)},y^{(1)}),(x^{(2)},y^{(2)}),···,(x^{(n)},y^{(n)})
(x(1),y(1)),(x(2),y(2)),⋅⋅⋅,(x(n),y(n))(上标表示样本编号),下面我们需要定义一个目标函数来衡量
y
y
y和
y
^
\hat y
y^之间的差异,线性回归使用的是最小均方误差损失,这里我们使用交叉熵损失,其公式为:
L
=
∑
i
=
1
n
C
(
y
^
(
i
)
,
y
(
i
)
)
=
∑
i
=
1
n
−
[
y
(
i
)
l
n
(
y
^
(
i
)
)
+
(
1
−
y
(
i
)
)
l
n
(
1
−
y
^
(
i
)
)
]
L=\sum_{i=1}^{n}C(\hat y^{(i)},y^{(i)})=\sum_{i=1}^{n}-[y^{(i)} ln(\hat y^{(i)})+(1-y^{(i)})ln(1-\hat y^{(i)})]
L=i=1∑nC(y^(i),y(i))=i=1∑n−[y(i)ln(y^(i))+(1−y(i))ln(1−y^(i))]
其中
C
(
y
^
(
i
)
,
y
(
i
)
)
=
{
−
l
n
(
y
^
(
i
)
)
,
i
f
y
(
i
)
=
1
−
l
n
(
1
−
y
^
(
i
)
)
,
i
f
y
(
i
)
=
0
C(\hat y^{(i)},y^{(i)})=\left\{ \begin{aligned} -ln(\hat y^{(i)}) &,&if \ y^{(i)}=1\\ -ln(1-\hat y^{(i)}) & ,& if \ y^{(i)}=0 \\ \end{aligned} \right.
C(y^(i),y(i))={−ln(y^(i))−ln(1−y^(i)),,if y(i)=1if y(i)=0
这里为什么要这样定义呢?在线性回归中我们希望预测值和真实值越接近越好,而真实值有无穷多个可能的取值,所以我们希望预测值和真实值的均方误差越小越好;而在二分类问题中,真实值只能取0或1,我们希望正样本输出接近1,负样本输出接近0,即正样本的似然概率越大越好。
举一个例子,假设样本及其对应的标签如下表所示:
x ( 1 ) x^{(1)} x(1) | C 1 C1 C1 |
---|---|
x ( 2 ) x^{(2)} x(2) | C 2 C2 C2 |
x ( 3 ) x^{(3)} x(3) | C 1 C1 C1 |
x ( 4 ) x^{(4)} x(4) | C 1 C1 C1 |
x ( 5 ) x^{(5)} x(5) | C 2 C2 C2 |
我们知道正样本预测值为
y
^
(
i
)
=
σ
(
z
(
i
)
)
=
σ
(
w
T
⋅
x
(
i
)
+
b
)
\hat y^{(i)}=\sigma (z^{(i)})=\sigma (w^T·x^{(i)}+b)
y^(i)=σ(z(i))=σ(wT⋅x(i)+b),负样本为
1
−
y
^
(
i
)
1-\hat y^{(i)}
1−y^(i),那么我们可以求出似然概率为:
L
(
w
)
=
y
^
(
1
)
⋅
(
1
−
y
^
(
2
)
)
⋅
y
^
(
3
)
⋅
y
^
(
4
)
⋅
(
1
−
y
^
(
5
)
)
L(w)=\hat y^{(1)}·(1-\hat y^{(2)})·\hat y^{(3)}·\hat y^{(4)}·(1-\hat y^{(5)})
L(w)=y^(1)⋅(1−y^(2))⋅y^(3)⋅y^(4)⋅(1−y^(5))
我们希望
L
(
w
,
b
)
L(w,b)
L(w,b)越大越好,这样就能使得正样本输出越来越接近1,负样本输出越来越接近0,对结果取
l
n
ln
ln可以得到:
L
(
w
)
=
l
n
(
y
^
(
1
)
)
+
l
n
(
1
−
y
^
(
2
)
)
+
l
n
(
y
^
(
3
)
)
+
l
n
(
y
^
(
4
)
)
+
l
n
(
1
−
y
^
(
5
)
)
L(w)=ln(\hat y^{(1)})+ln(1-\hat y^{(2)})+ln(\hat y^{(3)})+ln(\hat y^{(4)})+ln(1-\hat y^{(5)})
L(w)=ln(y^(1))+ln(1−y^(2))+ln(y^(3))+ln(y^(4))+ln(1−y^(5))
结果再取负号,然后扩展到
n
n
n个样本就得到了上面定义的交叉熵损失函数,我们希望其值越小越好。
因此目标函数为:
L
(
w
)
=
∑
i
=
1
n
−
[
y
(
i
)
l
n
(
y
^
(
i
)
)
+
(
1
−
y
(
i
)
)
l
n
(
1
−
y
^
(
i
)
)
]
L(w)=\sum_{i=1}^{n}-[y^{(i)} ln(\hat y^{(i)})+(1-y^{(i)})ln(1-\hat y^{(i)})]
L(w)=i=1∑n−[y(i)ln(y^(i))+(1−y(i))ln(1−y^(i))]
我们要做的就是找到一组参数
w
w
w使得目标函数的值最小,即
w
∗
=
a
r
g
m
i
n
w
L
(
w
)
w^*=arg \mathop{min}\limits_{w}L(w)
w∗=argwminL(w),然后用梯度下降法迭代求解。
那逻辑回归可以使用均方误差函数吗?假设使用均方误差函数:
y
^
=
σ
(
w
T
⋅
x
+
b
)
\hat y=\sigma (w^T·x+b)
y^=σ(wT⋅x+b)
L
(
w
)
=
1
2
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
2
L(w)=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\hat y^{(i)})^2
L(w)=21i=1∑n(y(i)−y^(i))2
我们可以求出梯度为:
d
L
(
w
)
d
w
=
d
L
(
w
)
d
y
^
(
i
)
⋅
d
y
^
(
i
)
d
z
⋅
d
z
d
w
=
−
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
⋅
y
^
(
i
)
(
1
−
y
^
(
i
)
)
⋅
x
(
i
)
\begin{aligned} \frac{dL(w)}{d w}&=\frac{dL(w)}{d \hat y^{(i)}}·\frac{d \hat y^{(i)}}{dz}·\frac{dz}{dw} \\ &=-\sum \limits_{i=1}^{n}( y^{(i)}-\hat y^{(i)}) ·\hat y^{(i)}(1- \hat y^{(i)})·x^{(i)} \\ \end{aligned}
dwdL(w)=dy^(i)dL(w)⋅dzdy^(i)⋅dwdz=−i=1∑n(y(i)−y^(i))⋅y^(i)(1−y^(i))⋅x(i)
当
y
(
i
)
=
1
y^{(i)}=1
y(i)=1时,如果
y
^
(
i
)
=
1
\hat y^{(i)}=1
y^(i)=1(即标签是1,预测值是1,预测值接近目标值),
d
L
(
w
)
d
w
=
0
\frac{dL(w)}{d w}=0
dwdL(w)=0,这是合理的,因为我们希望预测正确的时候梯度为0;
如果
y
^
(
i
)
=
0
\hat y^{(i)}=0
y^(i)=0(即标签是0,预测值是1,预测值远离目标值),
d
L
(
w
)
d
w
=
0
\frac{dL(w)}{d w}=0
dwdL(w)=0,这是不合理的,因为预测值不正确,但是梯度却为0;
同理,当
y
(
i
)
=
0
y^{(i)}=0
y(i)=0时,如果
y
^
(
i
)
=
1
\hat y^{(i)}=1
y^(i)=1,
d
L
(
w
)
d
w
=
0
\frac{dL(w)}{d w}=0
dwdL(w)=0;如果
y
^
(
i
)
=
0
\hat y^{(i)}=0
y^(i)=0,
d
L
(
w
)
d
w
=
0
\frac{dL(w)}{d w}=0
dwdL(w)=0。
交叉熵损失和均方误差损失的图像如下所示,黑色表示交叉熵损失的图像,红色表示均方误差损失,可以看出交叉熵损失变化更剧烈。
二、逻辑回归与线性回归对比
1.定义
线性回归的公式为:
y
^
=
w
T
⋅
x
+
b
\hat y=w^T·x+b
y^=wT⋅x+b,它可能的输出任何值。
逻辑回归的公式为:
y
^
=
σ
(
w
T
⋅
x
+
b
)
\hat y=\sigma (w^T·x+b)
y^=σ(wT⋅x+b),它可能的输出值在0和1之间。
2.损失函数
线性回归使用均方误差损失,公式为:
L
(
w
)
=
1
2
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
2
L(w)=\frac{1}{2}\sum_{i=1}^{n}(y^{(i)}-\hat y^{(i)})^2
L(w)=21i=1∑n(y(i)−y^(i))2
逻辑回归使用交叉熵损失,公式为:
L
(
w
)
=
∑
i
=
1
n
−
[
y
(
i
)
l
n
(
y
^
(
i
)
)
+
(
1
−
y
(
i
)
)
l
n
(
1
−
y
^
(
i
)
)
]
L(w)=\sum_{i=1}^{n}-[y^{(i)} ln(\hat y^{(i)})+(1-y^{(i)})ln(1-\hat y^{(i)})]
L(w)=i=1∑n−[y(i)ln(y^(i))+(1−y(i))ln(1−y^(i))]
3.参数更新
对于线性回归,我们可以求出损失函数的梯度为:
d
L
(
w
)
d
w
=
d
L
(
w
)
d
y
^
(
i
)
⋅
d
y
^
(
i
)
d
w
=
−
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
⋅
x
(
i
)
\begin{aligned} \frac{dL(w)}{d w}&=\frac{dL(w)}{d \hat y^{(i)}}·\frac{d \hat y^{(i)}}{dw} \\ &=-\sum \limits_{i=1}^{n}( y^{(i)}-\hat y^{(i)}) ·x^{(i)} \\ \end{aligned}
dwdL(w)=dy^(i)dL(w)⋅dwdy^(i)=−i=1∑n(y(i)−y^(i))⋅x(i)
w
=
w
−
η
d
L
(
W
)
d
w
w=w-\eta \frac{dL(W)}{dw}
w=w−ηdwdL(W)
对于逻辑回归,我们把公式表示为:
y
^
=
σ
(
z
)
\hat y=\sigma (z)
y^=σ(z),
z
=
w
T
⋅
x
+
b
z=w^T·x+b
z=wT⋅x+b
根据链式法则:
d
L
(
w
)
d
w
=
d
L
(
w
)
d
y
^
(
i
)
⋅
d
y
^
(
i
)
d
w
=
d
L
(
w
)
d
y
^
(
i
)
⋅
d
y
^
(
i
)
d
z
⋅
d
z
d
w
\frac{dL(w)}{dw}=\frac{dL(w)}{d \hat y^{(i)}}·\frac{d \hat y^{(i)}}{dw}=\frac{dL(w)}{d \hat y^{(i)}}·\frac{d \hat y^{(i)}}{dz}·\frac{dz}{dw}
dwdL(w)=dy^(i)dL(w)⋅dwdy^(i)=dy^(i)dL(w)⋅dzdy^(i)⋅dwdz
其中:
d
L
(
w
)
d
y
^
(
i
)
=
∑
i
=
1
n
−
[
y
(
i
)
y
^
(
i
)
−
1
−
y
(
i
)
1
−
y
^
(
i
)
]
\frac{dL(w)}{d \hat y^{(i)}}=\sum \limits_{i=1}^{n}-[\frac{y^{(i)}}{\hat y^{(i)}}-\frac{1-y^{(i)}}{1-\hat y^{(i)}}]
dy^(i)dL(w)=i=1∑n−[y^(i)y(i)−1−y^(i)1−y(i)]
d
y
^
(
i
)
d
z
=
y
^
(
i
)
(
1
−
y
^
(
i
)
)
\frac{d \hat y^{(i)}}{dz}= \hat y^{(i)}(1- \hat y^{(i)})
dzdy^(i)=y^(i)(1−y^(i))
d
z
d
w
=
x
(
i
)
\frac{dz}{dw}=x^{(i)}
dwdz=x(i)
将上面的式子整合起来得到:
d
L
(
w
)
d
w
=
∑
i
=
1
n
−
[
y
(
i
)
y
^
(
i
)
−
1
−
y
(
i
)
1
−
y
^
(
i
)
]
⋅
y
^
(
i
)
(
1
−
y
^
(
i
)
)
⋅
x
(
i
)
=
−
∑
i
=
1
n
[
y
(
i
)
(
1
−
y
^
(
i
)
)
−
y
^
(
i
)
(
1
−
y
(
i
)
)
]
⋅
x
(
i
)
=
−
∑
i
=
1
n
(
y
(
i
)
−
y
^
(
i
)
)
⋅
x
(
i
)
\begin{aligned} \frac{dL(w)}{d w}&=\sum \limits_{i=1}^{n}-[\frac{y^{(i)}}{\hat y^{(i)}}-\frac{1-y^{(i)}}{1-\hat y^{(i)}}] ·\hat y^{(i)}(1- \hat y^{(i)})·x^{(i)} \\ &=-\sum \limits_{i=1}^{n}[y^{(i)}(1-\hat y^{(i)})-\hat y^{(i)}(1-y^{(i)})]·x^{(i)} \\ &=-\sum \limits_{i=1}^{n}(y^{(i)}-\hat y^{(i)})·x^{(i)} \\ \end{aligned}
dwdL(w)=i=1∑n−[y^(i)y(i)−1−y^(i)1−y(i)]⋅y^(i)(1−y^(i))⋅x(i)=−i=1∑n[y(i)(1−y^(i))−y^(i)(1−y(i))]⋅x(i)=−i=1∑n(y(i)−y^(i))⋅x(i)
w
=
w
−
η
d
L
(
W
)
d
w
w=w-\eta \frac{dL(W)}{dw}
w=w−ηdwdL(W)
我们可以发现线性回归和逻辑回归的梯度在形式上是相同的。
本文根据李宏毅老师2020机器学习资料整理。
地址:http://speech.ee.ntu.edu.tw/~tlkagk/courses_ML20.html