Logistic回归和Softmax回归属于机器学习和深度学习中比较经典和基础的两个算法,许多优秀的模型中都使用到了这两个算法。所以这周打算整理和介绍一下Logistic回归和Softmax回归。
线性回归
既然这两个算法中都有“回归”二字,因此我们有必要先复习一下回归(regression)问题。回归问题的形象表述如下,假设我们有一批带标记的样本数据
{
(
x
(
1
)
,
y
(
1
)
)
,
.
.
.
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})\}
{(x(1),y(1)),...,(x(m),y(m))},其中
x
(
i
)
∈
R
m
+
1
x^{(i)}\in R^{m+1}
x(i)∈Rm+1是
m
+
1
m+1
m+1维特征向量(
x
0
(
i
)
=
1
x_0^{(i)}=1
x0(i)=1表示偏置项);
y
(
i
)
∈
R
y^{(i)}\in R
y(i)∈R是特征向量
x
(
i
)
x^{(i)}
x(i)对应的目标值。我们期望找到一个函数:
y
=
h
(
x
)
y=h(x)
y=h(x)使得
y
(
i
)
≈
h
(
x
(
i
)
)
y^{(i)}\approx h(x^{(i)})
y(i)≈h(x(i))对每个样本数据都成立,这就是回归问题的目标。当然
h
(
x
)
h(x)
h(x)可以选择很多种类型,从方便计算的角度,我们通常选择线性函数类
h
θ
(
x
)
=
∑
j
θ
j
x
j
=
θ
T
x
h_\theta(x)=\sum_j\theta_jx_j=\theta^Tx
hθ(x)=j∑θjxj=θTx
表示我们的目标函数,
θ
\theta
θ表示函数
h
θ
(
x
)
h_\theta(x)
hθ(x)依赖参数
θ
\theta
θ,从而得到了线性回归(Linear Regression)。为了找到最优参数
θ
\theta
θ,循着我们的目标,我们定义目标值
y
(
i
)
y^{(i)}
y(i)与预测值
h
θ
(
x
(
i
)
)
h_\theta(x^{(i)})
hθ(x(i))之间的误差为损失函数,并使之最小化。通常我们采用梯度下降法,在参数上迭代寻找最优参数。
线性回归虽然简单,但是它是许多复杂算法的基础,甚至可以认为线性回归是机器学习任务的本质,比如神经网络也是对线性值的处理组合等。
Logistic回归
Logistic回归的样本数据集同样可以表示为
{
(
x
(
1
)
,
y
(
1
)
)
,
.
.
.
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})\}
{(x(1),y(1)),...,(x(m),y(m))},其中
x
(
i
)
∈
R
m
+
1
x^{(i)}\in R^{m+1}
x(i)∈Rm+1是
m
+
1
m+1
m+1维特征向量(
x
0
(
i
)
=
1
x_0^{(i)}=1
x0(i)=1表示偏置项);但是
y
(
i
)
∈
{
0
,
1
}
y^{(i)}\in \{0,1\}
y(i)∈{0,1}只取二值。因此Logistic回归是针对二分类问题的算法。因此我们需要对目标函数
y
=
h
θ
(
x
)
y=h_\theta(x)
y=hθ(x)稍作修改,将预测值改为,预测属于“1”类或“0”类的概率。
p
(
y
=
1
∣
x
)
=
h
θ
(
x
)
=
1
1
+
e
x
p
(
−
θ
T
x
)
=
σ
(
θ
T
x
)
p
(
y
=
0
∣
x
)
=
1
−
p
(
y
=
1
∣
x
)
=
1
−
h
θ
(
x
)
p(y=1|x)=h_\theta(x)=\frac{1}{1+exp(-\theta^Tx)}=\sigma(\theta^Tx)\\ p(y=0|x)=1-p(y=1|x)=1-h_\theta(x)
p(y=1∣x)=hθ(x)=1+exp(−θTx)1=σ(θTx)p(y=0∣x)=1−p(y=1∣x)=1−hθ(x)
可以看到Logistic回归只是在线性回归的结果值外面套了一层Sigmoid函数,将
θ
T
x
\theta^Tx
θTx的值压缩到[0,1]区间,将其解释为概率(并非真正的随机性概率)。因此我们希望选择的参数
θ
\theta
θ,当样本
x
x
x属于类“1”时,
p
(
y
=
1
∣
x
)
=
h
θ
(
x
)
p(y=1|x)=h_\theta(x)
p(y=1∣x)=hθ(x)尽可能大;当样本
x
x
x属于类“0”时,
p
(
y
=
0
∣
x
)
=
1
−
h
θ
(
x
)
p(y=0|x)=1-h_\theta(x)
p(y=0∣x)=1−hθ(x)尽可能大。
观察上面的两个概率函数,我们可以将其更加简洁的表示为一个函数:
p
(
y
∣
x
;
θ
)
=
(
h
θ
(
x
)
)
y
⋅
(
1
−
h
θ
(
x
)
)
1
−
y
p(y|x;\theta)=(h_\theta(x))^y\centerdot(1-h_\theta(x))^{1-y}
p(y∣x;θ)=(hθ(x))y⋅(1−hθ(x))1−y
所以当我们有我们有
m
m
m个相互独立的训练样本时,我们期望
m
m
m个样本的概率预测值的连乘积尽可能大,我们称这个函数为似然函数
L
(
θ
)
L(\theta)
L(θ)
L
(
θ
)
=
Π
i
=
1
m
p
(
y
(
i
)
∣
x
(
i
)
;
θ
)
=
Π
i
=
1
m
(
h
θ
(
x
(
i
)
)
)
y
(
i
)
⋅
(
1
−
h
θ
(
x
(
i
)
)
)
1
−
y
(
i
)
L(\theta)=\Pi_{i=1}^mp(y^{(i)}|x^{(i)};\theta)=\Pi_{i=1}^m(h_\theta(x^{(i)}))^{y^{(i)}}\centerdot(1-h_\theta(x^{(i)}))^{1-y^{(i)}}
L(θ)=Πi=1mp(y(i)∣x(i);θ)=Πi=1m(hθ(x(i)))y(i)⋅(1−hθ(x(i)))1−y(i)
似然函数的并不易求解,通常我们在其外面套一个单调递减的函数
−
l
o
g
(
x
)
-log(x)
−log(x),当
−
l
o
g
(
L
(
θ
)
)
-log(L(\theta))
−log(L(θ))取得极小值时,
L
(
θ
)
L(\theta)
L(θ)同时就取得了极大值。我们称这个此时的目标函数为负对数似然函数
J
(
θ
)
J(\theta)
J(θ)
J
(
θ
)
=
−
l
o
g
(
L
(
θ
)
)
=
−
∑
i
=
1
m
{
y
(
i
)
l
o
g
(
h
θ
(
x
(
i
)
)
)
+
(
1
−
y
(
i
)
)
l
o
g
(
1
−
h
θ
(
x
(
i
)
)
)
}
J(\theta)=-log(L(\theta))=-\sum_{i=1}^m\{y^{(i)}log(h_\theta(x^{(i)}))+(1-y^{(i)})log(1-h_\theta(x^{(i)}))\}
J(θ)=−log(L(θ))=−i=1∑m{y(i)log(hθ(x(i)))+(1−y(i))log(1−hθ(x(i)))}
同样我们可以利用梯度下降算法来迭代寻找最佳参数 θ \theta θ。
Softmax回归
Softmax也是用来解决分类问题的,不过Softmax是用来解决多分类问题的(分类类别多于二类)。所以Softmax回归的样本数据集同样可以表示为
{
(
x
(
1
)
,
y
(
1
)
)
,
.
.
.
,
(
x
(
m
)
,
y
(
m
)
)
}
\{(x^{(1)},y^{(1)}),...,(x^{(m)},y^{(m)})\}
{(x(1),y(1)),...,(x(m),y(m))},其中
x
(
i
)
∈
R
m
x^{(i)}\in R^m
x(i)∈Rm是
m
m
m维特征向量;但是
y
(
i
)
∈
{
1
,
2
,
.
.
.
,
K
}
y^{(i)}\in \{1,2,...,K\}
y(i)∈{1,2,...,K}有
k
k
k种类别取值可能。
因此当给定一个
x
(
i
)
x^{(i)}
x(i)时,我们想计算出
y
(
i
)
y^{(i)}
y(i)属于每一个类别
j
j
j的概率
p
(
y
(
i
)
=
j
∣
x
;
θ
)
p(y^{(i)}=j|x;\theta)
p(y(i)=j∣x;θ),因此我们需要
k
k
k个线性回归函数并将其值压缩到区间[0,1],所以此时的
h
θ
(
x
)
h_\theta(x)
hθ(x)输出是一个
k
k
k维向量(向量所有元素之和为1)。具体的,我们可以将
h
θ
(
x
)
h_\theta(x)
hθ(x)表示如下:
h
θ
(
x
)
=
[
p
(
y
=
1
∣
x
;
θ
)
p
(
y
=
2
∣
x
;
θ
)
⋮
p
(
y
=
K
∣
x
;
θ
)
]
=
1
∑
j
=
1
K
e
x
p
(
θ
j
T
(
x
)
)
[
e
x
p
(
θ
1
T
(
x
)
)
e
x
p
(
θ
2
T
(
x
)
)
⋮
e
x
p
(
θ
K
T
(
x
)
)
]
h_\theta(x)= \left[ \begin{matrix} p(y=1|x;\theta)\\ p(y=2|x;\theta)\\ \vdots\\ p(y=K|x;\theta) \end{matrix} \right] =\frac{1}{\sum_{j=1}^Kexp(\theta_j^T(x))} \left[ \begin{matrix} exp(\theta_1^T(x))\\ exp(\theta_2^T(x))\\ \vdots\\ exp(\theta_K^T(x)) \end{matrix} \right]
hθ(x)=⎣⎢⎢⎢⎡p(y=1∣x;θ)p(y=2∣x;θ)⋮p(y=K∣x;θ)⎦⎥⎥⎥⎤=∑j=1Kexp(θjT(x))1⎣⎢⎢⎢⎡exp(θ1T(x))exp(θ2T(x))⋮exp(θKT(x))⎦⎥⎥⎥⎤
其中,
θ
j
∈
R
n
+
1
(
j
=
1
,
2
,
.
.
.
,
K
)
\theta_j\in R^{n+1}(j=1,2,...,K)
θj∈Rn+1(j=1,2,...,K)表示每一个线性回归函数的参数。
1
∑
j
=
1
K
e
x
p
(
θ
j
T
(
x
)
)
\frac{1}{\sum_{j=1}^Kexp(\theta_j^T(x))}
∑j=1Kexp(θjT(x))1用来对概率分布进行归一化,使得概率之和等于1。
为了将
h
θ
(
x
)
h_\theta(x)
hθ(x)的形式与上面的线性回归和Logistic回归统一,我们可以将
θ
\theta
θ写成矩阵的形式:
θ
=
[
∣
∣
∣
∣
θ
1
θ
2
⋯
θ
K
∣
∣
∣
∣
]
⇒
θ
T
=
[
——
θ
1
T
——
——
θ
2
T
——
——
⋯
——
——
θ
K
T
——
]
⇓
h
θ
(
x
)
=
s
o
f
t
m
a
x
(
θ
T
x
)
\theta= \left[ \begin{matrix} \big| & \big| & \big| & \big|\\ \theta_1 & \theta_2 & \cdots & \theta_K\\ \big| & \big| & \big| & \big| \end{matrix} \right] \Rightarrow \theta^T= \left[ \begin{matrix} \verb|——| & \theta_1^T & \verb|——|\\ \verb|——| & \theta_2^T & \verb|——|\\ \verb|——| & \cdots & \verb|——|\\ \verb|——| & \theta_K^T & \verb|——| \end{matrix} \right]\\ \Downarrow\\ h_\theta(x)=softmax(\theta^Tx)
θ=⎣⎡∣∣θ1∣∣∣∣θ2∣∣∣∣⋯∣∣∣∣θK∣∣⎦⎤⇒θT=⎣⎢⎢⎡————————θ1Tθ2T⋯θKT————————⎦⎥⎥⎤⇓hθ(x)=softmax(θTx)
下面需要定义softmax回归的代价函数,为了方便表述,函数记号
1
{
⋅
}
1\{\cdot\}
1{⋅}表示示性函数,其取值规则如下:
{
1
{
表
达
式
值
为
真
}
=
1
1
{
表
达
式
值
为
假
}
=
0
\begin{cases} 1\{表达式值为真\}=1\\ 1\{表达式值为假\}=0 \end{cases}
{1{表达式值为真}=11{表达式值为假}=0
同样的我们希望概率似然函数的值尽可能大
max
θ
J
(
θ
)
=
Π
i
=
1
m
Π
k
=
1
K
(
s
o
f
t
m
a
x
(
θ
k
T
x
(
i
)
)
)
1
{
y
(
i
)
=
k
}
\max_\theta \quad J(\theta)=\Pi_{i=1}^m\Pi_{k=1}^K(softmax(\theta_k^Tx^{(i)}))^{1\{y^{(i)}=k\}}
θmaxJ(θ)=Πi=1mΠk=1K(softmax(θkTx(i)))1{y(i)=k}
在外面套上
−
l
o
g
(
x
)
-log(x)
−log(x)函数,经过化简得
min
θ
J
(
θ
)
=
−
∑
i
=
1
m
∑
k
=
1
K
1
{
y
(
i
)
=
k
}
l
o
g
(
s
o
f
t
m
a
x
(
θ
k
T
x
(
i
)
)
)
\min_\theta \quad J(\theta)=-\sum_{i=1}^m\sum_{k=1}^K1\{y^{(i)}=k\}log(softmax(\theta_k^Tx^{(i)}))
θminJ(θ)=−i=1∑mk=1∑K1{y(i)=k}log(softmax(θkTx(i)))
采用梯度下降法,迭代求解
J
(
θ
)
J(\theta)
J(θ)的极小值。
∂
J
(
θ
)
∂
θ
l
t
=
−
∂
∂
θ
l
t
{
∑
i
=
1
m
∑
k
=
1
K
1
{
y
(
i
)
=
k
}
l
o
g
e
x
p
(
θ
l
T
x
(
i
)
)
∑
j
=
1
K
e
x
p
(
θ
j
T
x
(
i
)
)
}
=
−
∑
i
=
1
m
∑
k
=
1
K
∂
∂
θ
l
t
(
1
{
y
(
i
)
=
k
}
l
o
g
e
x
p
(
θ
l
T
x
(
i
)
)
∑
j
=
1
K
e
x
p
(
θ
j
T
x
(
i
)
)
)
=
−
∑
i
=
1
m
∑
k
=
1
K
∂
∂
θ
l
t
(
1
{
y
(
i
)
=
k
}
(
θ
l
T
x
(
i
)
−
l
o
g
(
∑
j
=
1
K
e
x
p
(
θ
j
T
x
(
i
)
)
)
)
=
−
∑
i
=
1
m
∑
k
=
1
K
∂
∂
θ
l
t
(
1
{
y
(
i
)
=
k
}
(
θ
l
T
x
(
i
)
)
)
−
∂
∂
θ
l
t
(
1
{
y
(
i
)
=
k
}
l
o
g
(
∑
j
=
1
K
e
x
p
(
θ
j
T
x
(
i
)
)
)
)
=
−
∑
i
=
1
m
(
(
1
{
y
(
i
)
=
l
}
⋅
x
t
(
i
)
)
−
(
p
(
y
(
i
)
=
l
∣
x
(
i
)
;
θ
)
⋅
x
t
(
i
)
)
)
=
−
∑
i
=
1
m
x
t
(
i
)
⋅
(
1
{
y
(
i
)
=
l
}
−
p
(
y
(
i
)
=
l
∣
x
(
i
)
;
θ
)
)
\begin{aligned} \frac{\partial J(\theta)}{\partial \theta_{lt}} =& -\frac{\partial}{\partial\theta_{lt}} \{ \sum_{i=1}^m\sum_{k=1}^K1\{y^{(i)}=k\}log\frac{exp(\theta_l^Tx^{(i)})}{\sum_{j=1}^Kexp(\theta_j^Tx^{(i)})} \}\\ =& -\sum_{i=1}^m\sum_{k=1}^K\frac{\partial }{\partial \theta_{lt}}\bigg(1\{y^{(i)}=k\}log\frac{exp(\theta_l^Tx^{(i)})}{\sum_{j=1}^Kexp(\theta_j^Tx^{(i)})}\bigg)\\ =& -\sum_{i=1}^m\sum_{k=1}^K\frac{\partial}{\partial \theta_{lt}}\bigg(1\{y^{(i)}=k\}\big(\theta_l^Tx^{(i)}-log(\sum_{j=1}^Kexp(\theta_j^Tx^{(i)})\big)\bigg)\\ =& -\sum_{i=1}^m\sum_{k=1}^K\frac{\partial}{\partial \theta_{lt}}\big(1\{y^{(i)}=k\}(\theta_l^Tx^{(i)})\big) -\frac{\partial}{\partial \theta_{lt}}\bigg(1\{y^{(i)}=k\}log\big(\sum_{j=1}^Kexp(\theta_j^Tx^{(i)})\big)\bigg)\\ =& -\sum_{i=1}^m\bigg(\big(1\{y^{(i)}=l\}\cdot x_t^{(i)}\big)-\big(p(y^{(i)}=l|x^{(i)};\theta)\cdot x_t^{(i)}\big)\bigg)\\ =& -\sum_{i=1}^m x_t^{(i)}\cdot \big(1\{y^{(i)}=l\}-p(y^{(i)}=l|x^{(i)};\theta)\big) \end{aligned}
∂θlt∂J(θ)======−∂θlt∂{i=1∑mk=1∑K1{y(i)=k}log∑j=1Kexp(θjTx(i))exp(θlTx(i))}−i=1∑mk=1∑K∂θlt∂(1{y(i)=k}log∑j=1Kexp(θjTx(i))exp(θlTx(i)))−i=1∑mk=1∑K∂θlt∂(1{y(i)=k}(θlTx(i)−log(j=1∑Kexp(θjTx(i))))−i=1∑mk=1∑K∂θlt∂(1{y(i)=k}(θlTx(i)))−∂θlt∂(1{y(i)=k}log(j=1∑Kexp(θjTx(i))))−i=1∑m((1{y(i)=l}⋅xt(i))−(p(y(i)=l∣x(i);θ)⋅xt(i)))−i=1∑mxt(i)⋅(1{y(i)=l}−p(y(i)=l∣x(i);θ))
将所有上式写成向量的形式有
∇
θ
j
J
(
θ
)
=
−
∑
i
=
1
m
x
(
i
)
⋅
(
1
{
y
(
i
)
=
l
}
−
p
(
y
(
i
)
=
l
∣
x
(
i
)
;
θ
)
)
\nabla_{\theta_j}J(\theta)=-\sum_{i=1}^mx^{(i)}\cdot \big(1\{y^{(i)}=l\}-p(y^{(i)}=l|x^{(i)};\theta)\big)
∇θjJ(θ)=−i=1∑mx(i)⋅(1{y(i)=l}−p(y(i)=l∣x(i);θ))
Softmax回归之所以要取指数,第一是为了契合max,使大的更大,这样就能从错误中快速学习;同时指数函数也方便求导。
经过上面的推导,我们可以发现,当类别数
k
=
2
k=2
k=2时,Softmax回归退化为Logistic回归。所以Logistic回归是Softmax回归的一种特殊情况。
既然Softmax回归是一种多分类算法,那实际应用中,我们是选择Softmax分类器,还是构造
k
k
k个独立的Logistic二分类器呢?通常情况下,这取决于分类类别是否互斥,如果互斥,我们一般采用Softmax回归;如果分类类别不是互斥的,一般采用
k
k
k个Logistic回归分类器更为合适。这样,对于每个类别,我们的算法可以分别判断它是否属于各个类别。