前面有介绍逻辑回归模型是如何从二分类推广到多分类,参见 二分类 到 多分类 之 逻辑回归多分类推广。这次谈一谈单目标分类到多目标分类。
首先,解释一下二者的区别。单目标分类是指每个样本只能属于一个类别,比如训练猫狗分类器时,一张图片中只能包含猫或者狗; 多目标则一个样本中可以同时包含多个类别,如一张图片中可以同时包含一只猫和狗。注意,二分类和多分类都属于单目标分类的范畴。
1. 基本思路
首先,还是回顾一下逻辑回归模型的基本思路:
- 对于单个样本 x x x,根据多项式函数 f ( x ) = ω i T x f(x)=\omega_i^T x f(x)=ωiTx,得到其属于类别 i i i 的得分 s i s_i si;
- 通过非线性函数将样本属于各个类别的得分 s = ( s 0 , … , s n ) s=(s_0, …,s_n) s=(s0,…,sn) 映射为概率值 p = ( p 0 , … , p n ) p=(p_0, …,p_n) p=(p0,…,pn),其中,n为总类别数;
- 最后计算交叉熵作为 loss,反向梯度传播求解参数 ω \omega ω。
其中,第二步的非线性函数:
- 对于二分类逻辑回归模型,为 logistic 函数,
- 对于多分类逻辑回归模型,则为 sigmoid 函数,如下图所示。
详细介绍参见 二分类 到 多分类 之 逻辑回归多分类推广
2. 概率值转换
在前面的文章里我们有提到,对于多分类,如果需要将 p p p 当做概率值,则需要保证:样本属于各个类别的概率和为1。但这是基于一个假设,即各个类别之间是互斥的。也就是说一张图片要么属于猫,要么属于狗,不能即是猫又是狗。
但是对于多目标分类,类别之间是不完全互斥的。一张图片中既可以有猫也可以有狗,那分类器就要能够同时识别到这两个类别。这种时候,样本属于各个类别的概率就是相互独立的。我们更倾向于将这个问题定位为多个二分类问题。即对于每个类别而言,都是一个二分类问题。
以博主童年的回忆举个例子,我们要训练一个猫狗老鼠的分类器。对于下面这张图片,里面同时包含猫和老鼠两个类别。那我们可以将这个分解为三个子问题:
1)图中是否有猫
2)图中是否有狗
3)图中是否有老鼠
这三个问题每一个都是二分类问题。就可以采用二分类的思想通过 logistic 函数将每个类别得分
s
i
s_i
si 转换为相应的概率值
p
i
p_i
pi。即:
p
猫
=
1
1
+
e
s
猫
p
狗
=
1
1
+
e
s
狗
p
老
鼠
=
1
1
+
e
s
老
鼠
p_猫 = \dfrac{1}{1+e^{s_猫}} \\ p_狗 = \dfrac{1}{1+e^{s_狗}} \\ p_{老鼠} = \dfrac{1}{1+e^{s_{老鼠}}}
p猫=1+es猫1p狗=1+es狗1p老鼠=1+es老鼠1
注意:此时得到的概率值 p = ( p 猫 , p 狗 , p 老 鼠 ) p=(p_猫, p_狗,p_{老鼠}) p=(p猫,p狗,p老鼠),加和不为1。因为每个类别的概率值都是单独通过logistic 函数计算得到的。
3. loss定义
在前面的文章里我们有提到,分类模型中 loss 一般都是使用的交叉熵函数。其对于二分类和多分类问题都适用,参见Loss进化史。
对于多分类,由于样本属于各个类别的概率是相互独立的,所以定义 loss 时仍旧沿用的二分类问题处理的方式:通过交叉熵分别计算样本属于每个类别的loss,再加和。即
L 猫 = − [ y 猫 ⋅ l o g ( p 猫 ) + ( 1 − y 猫 ) ⋅ l o g ( 1 − p 猫 ) ] L 狗 = − [ y 狗 ⋅ l o g ( p 狗 ) + ( 1 − y 狗 ) ⋅ l o g ( 1 − p 狗 ) ] L 老 鼠 = − [ y 老 鼠 ⋅ l o g ( p 老 鼠 ) + ( 1 − y 老 鼠 ) ⋅ l o g ( 1 − p 老 鼠 ) ] L_猫 = -[y_猫 \cdot log(p_猫) + (1-y_猫) \cdot log(1-p_猫)] \\ L_狗 = -[y_狗 \cdot log(p_狗) + (1-y_狗) \cdot log(1-p_狗)] \\ L_{老鼠} = -[y_{老鼠} \cdot log(p_{老鼠}) + (1-y_{老鼠}) \cdot log(1-p_{老鼠})] \\ L猫=−[y猫⋅log(p猫)+(1−y猫)⋅log(1−p猫)]L狗=−[y狗⋅log(p狗)+(1−y狗)⋅log(1−p狗)]L老鼠=−[y老鼠⋅log(p老鼠)+(1−y老鼠)⋅log(1−p老鼠)]
最终,该样本的loss为 L = L 猫 + L 狗 + L 老 鼠 L = L_猫 + L_狗 + L_{老鼠} L=L猫+L狗+L老鼠
4. 总结
总之,当标签类别之间是互斥时,适合选择softmax回归分类器;当标签类别之间不完全互斥时,适合选择建立多个独立的logistic回归分类器。
最后附上这三种问题的汇总对比图: