多类分类任务的实现方式:1对其他
∙
\bullet
∙ 一对其他(One-vs-Rest, OVR)。对每个类别c,训练一个Logistic回归分类器
f
w
c
(
x
)
f_{w}^c(\mathbf x)
fwc(x),预测
y
=
c
y=c
y=c的概率。
f
w
c
(
x
)
=
P
(
y
=
c
∣
x
,
w
)
,
c
=
1
,
2
,
3
f_{w}^c(\mathbf x) = P(y=c|\mathbf x, \mathbf w), c=1,2,3
fwc(x)=P(y=c∣x,w),c=1,2,3
∙
\bullet
∙ 每类的模型都有自己的正则参数和权重参数。
∙
\bullet
∙ 对新的输入x,选择使得
f
w
c
(
x
)
f_{w}^c(\mathbf x)
fwc(x)最大的类别作为预测(最大后验估计,MAP):
y
^
=
a
r
g
m
a
x
c
f
w
c
(
w
)
\hat y = argmax_{c} f_{w}^c(\mathbf w)
y^=argmaxcfwc(w)
多分类任务的实现方式:多项分布
∙
\bullet
∙ 在概率分布中,贝努利(Bernoulli)分布的输出只有两种取值。
∙
\bullet
∙ Multinoulli分布,或称为范畴分布(Categorical distribution),输出有K种取值。
∙
\bullet
∙ 类似Bernoulli分布描述两分类的概率分布,可用Multinoulli分布描述多类分类的概率分布,其参数为向量
θ
=
(
θ
i
,
.
.
.
,
θ
c
)
\theta = (\theta_{i},...,\theta_{c})
θ=(θi,...,θc),其中
∑
c
=
1
C
θ
c
=
1
\sum_{c=1}^{C}\theta_{c} = 1
∑c=1Cθc=1,其中每一个分量
θ
c
\theta_{c}
θc 表示第c个状态的概率。我们用符号
C
a
t
(
y
;
θ
)
Cat(y;\mathbf \theta)
Cat(y;θ)表示
∙
\bullet
∙ 注意:贝努利分布和二项分布是两个不同的概念。
∙
\bullet
∙ 将类别y用独热(One Hot)编码(编码为c维向量,当y=c时,第c维为1,其他元素均为0),记为向量
y
\mathbf y
y。
∙
\bullet
∙ Multilnoulli分布的概率函数为:
C
a
t
(
y
;
θ
)
=
∏
c
=
1
C
θ
c
y
c
Cat(\mathbf y;\mathbf \theta) =\prod_{c=1}^{C}\theta_{c}^{y_c}
Cat(y;θ)=c=1∏Cθcyc其中
y
c
y_{c}
yc表示向量y的第c个元素。
∙
\bullet
∙ 或者用标量形式记为:
C
a
t
(
y
;
θ
)
=
∏
c
=
1
C
θ
c
I
(
y
c
)
Cat(\mathbf y;\mathbf \theta) =\prod_{c=1}^{C}\theta_{c}^{I(y_c)}
Cat(y;θ)=c=1∏CθcI(yc)其中
I
(
.
)
I(.)
I(.)为示性函数,当括号中条件满足时,函数值为1,否则为0。
Softmax分类器
∙
\bullet
∙ 类似两类分类模型推导,假设输出
y
=
c
y=c
y=c的概率可以由
x
\mathbf x
x的线性组合,再经过sigmoid函数变换得到,则模型为:
p
(
y
=
c
∣
x
,
w
)
=
e
x
p
(
w
T
x
)
∑
c
′
=
1
C
e
x
p
(
w
c
′
T
x
)
p(y=c|\mathbf x,\mathbf w) = \frac{exp(\mathbf w^T\mathbf x)}{\sum_{c'=1}^{C}exp(\mathbf w_{c'}^T\mathbf x)}
p(y=c∣x,w)=∑c′=1Cexp(wc′Tx)exp(wTx)
∙
\bullet
∙ 上述等式右边为Softmax函数。Softmax函数为Sigmoid函数的推广,讲
C
C
C维向量的每个元素转换为[0,1]的数,且变换后的元素之和为1:
σ
(
z
c
)
=
e
z
c
∑
c
′
=
1
C
e
z
c
′
\sigma(z_{c}) = \frac{e^{z_{c}}}{\sum_{c'=1}^{C}e^{z_{c'}}}
σ(zc)=∑c′=1Cezc′ezc
∙
\bullet
∙ 因此得到的分类器被称为Softmax。但是觉得跟之前的OVR差不多,这里也是C个分类器,经过Softmax转换后,概率最大的那个,仍然能胜出。经过仔细检查,后边有提到OVR的分类器是分别训练,而Softmax中各个分类的参数是整体训练的。
∙
\bullet
∙ 将类别y用独热编码编为向量
y
\mathbf y
y:
y
c
=
I
(
y
=
c
)
y_{c} = I(y=c)
yc=I(y=c)
∙
\bullet
∙ 向量
μ
\mu
μ表示multinoulli分布的参数:
μ
c
=
p
(
y
=
c
∣
x
,
w
)
=
e
x
p
(
w
c
T
x
)
∑
c
′
=
1
C
(
w
c
′
T
x
)
\mu_{c} = p(y=c| \mathbf x, \mathbf w) = \frac{exp(\mathbf w_{c}^T \mathbf x)}{\sum_{c'=1}^{C}(\mathbf w_{c'}^T \mathbf x)}
μc=p(y=c∣x,w)=∑c′=1C(wc′Tx)exp(wcTx)
∙
\bullet
∙ 令
μ
i
c
=
e
x
p
(
w
c
T
x
i
)
∑
c
′
=
1
C
(
w
c
′
T
x
i
)
\mu_{ic} = \frac{exp(\mathbf w_{c}^T \mathbf x_{i})}{\sum_{c'=1}^{C}(\mathbf w_{c'}^T \mathbf x_{i})}
μic=∑c′=1C(wc′Txi)exp(wcTxi),
y
i
c
y_{ic}
yic为第i个样本的分类,则Softmax分类模型的log似然函数为:
ζ
(
M
)
=
∑
i
=
1
N
l
o
g
(
∏
c
=
1
C
μ
i
c
y
i
c
)
\zeta(\mathbf M) = \sum_{i=1}^{N}log(\prod_{c=1}^{C}\mu_{ic}^{y_{ic}})
ζ(M)=i=1∑Nlog(c=1∏Cμicyic)
=
∑
i
=
1
N
∑
c
=
1
C
y
i
c
l
o
g
(
μ
i
c
)
=\sum_{i=1}^{N}\sum_{c=1}^{C}y_{ic}log(\mu_{ic})
=i=1∑Nc=1∑Cyiclog(μic)注意:这里的似然函数省略了 乘积取log = 取log再相加 的那一步
∙
\bullet
∙ 定义Softmax损失为:
L
(
y
,
μ
)
=
−
∑
c
=
1
C
y
c
l
o
g
(
μ
c
)
L(\mathbf y, \mathbf\mu) = -\sum_{c=1}^{C}y_{c}log(\mu_{c})
L(y,μ)=−∑c=1Cyclog(μc)
∙
\bullet
∙ 则极大似然估计等价于最小训练集上的Softmax损失/负log似然损失:
J
(
w
)
=
−
∑
i
=
1
N
∑
c
=
1
C
y
i
c
l
o
g
(
μ
i
c
)
J(\mathbf w) = -\sum_{i=1}^{N}\sum_{c=1}^{C}y_{ic}log(\mu_{ic})
J(w)=−i=1∑Nc=1∑Cyiclog(μic)
=
∑
i
=
1
N
(
∑
c
=
1
C
y
i
c
w
c
T
x
−
l
o
g
(
∑
c
′
=
1
C
e
x
p
(
w
c
′
T
x
)
)
)
=\sum_{i=1}^{N}(\sum_{c=1}^{C}y_{ic}\mathbf w_{c}^T\mathbf x - log(\sum_{c'=1}^{C}exp(\mathbf w_{c'}^T\mathbf x)))
=i=1∑N(c=1∑CyicwcTx−log(c′=1∑Cexp(wc′Tx)))
上式最后一步推导,觉得好像由问题,log之前是不是还应该有
y
i
c
y_{ic}
yic及
∑
i
=
1
C
\sum_{i=1}^{C}
∑i=1C?
∙
\bullet
∙ 正则项:Softmaxt分类模型的正则项与两分类模型相同
∙
\bullet
∙ 目标函数的优化方法:同两分类模型。
∙
\bullet
∙ Scikit-Learn中对Softmax模型的实现。
class sklearn.linear_model.LogisticRegression(penalty='l2',...,solver='liblinear', multi_class='ovr',...)
参数multi_class决定了多类分类的实现方式,可选:
a)‘ovr’:即1对其他(one-vs-rest,OvR),将多类分类任务转化为多个二类分类任务。为了完成第c类的分类决策,将所有第c类的样本作为正例,除了第c类样本以外的所有样本都作为负例,每个类别的二分类器单独训练。之前说的是C类有C个分类器,每个分类器求出为对应分类的概率,概率最大的那一个分类,则为预测分类。不太清楚前边绿色的那句话,在这样的算法里起到什么作用。
b)‘multinomial’:Softmax回归分类,对多项分布概率整体进行训练。
注意:multi_class选择会影响优化算法solver参数的选择
OvR: 可用所有的solver
Multinomial:只能选择newton-cg、lbfgs和sag/saga(liblinear不支持)
可是前边说的优化方法与二分类相同啊,这种看起来矛盾的地方,是否有什么特别的说法呢?
Softmax个人简要理解:依然使用负log似然损失,既将各个样本的概率表达式相乘再取负数。但概率表达式的推导相对复杂,它在最外层使用多项分布(
C
a
t
(
y
;
θ
)
=
∏
c
=
1
C
θ
c
y
c
Cat(\mathbf y;\mathbf \theta) =\prod_{c=1}^{C}\theta_{c}^{y_c}
Cat(y;θ)=∏c=1Cθcyc,上文中概率
θ
\theta
θ有时也用函数
μ
\mu
μ来表示)来表示样本的概率,该多项分布是各个分类概率0或1次方的乘积,只有真实属于的那个分类才是1次方,也是真正起作用的那一项,而各个分类的概率则使用sigmoid的推广函数softmax函数(
e
z
c
∑
c
′
=
1
C
e
z
c
′
\frac{e^{z_{c}}}{\sum_{c'=1}^{C}e^{z_{c'}}}
∑c′=1Cezc′ezc)进行计算。