二分类推广至多分类有众多方法:如OVR、OVO等算法。这些算法思想都比较直观,容易理解,但性能上相比二分类差了不少。那经典的二分类算法是怎么兼顾性能问题推广到多分类的呢?这里以逻辑回归算法为例,介绍其二分类推广形式。
1. 基本思路
首先,回顾一下二分类逻辑回归模型的基本思路,详情参见【Loss进化史】:
- 根据线性映射函数 f ( x ) = ω T x f(x)=\omega^T x f(x)=ωTx,得到样本属于正类的得分 score;
- 通过 sigmoid 函数将得分映射为概率值 probability ;
- 最后计算交叉熵作为 loss,反向梯度传播求解最优参数 ω \omega ω。
既然已经知道了二分类的套路,那就把每一步都推广成向量形式,不就可以用于多分类了嘛(机智如我😃)。
先看第一步,一组 ω \omega ω 就可以得到一个得分,那两组不就可以得到两个得分了。反过来,几分类问题就设置几组 ω \omega ω 不就行了。 如下图,实线框代表二分类,加入虚线框后,即为三分类。
第二步,将得分映射为概率值。sigmoid 函数只能将单个 score 转为probability,如果分别用 sigmoid 将每个 score 单独转换的话,虽然转换后的每个值都在区间 [0,1] 之间,但不能保证和为1,那就不能被当做概率值,伤脑筋😔
第三步,loss定义。交叉熵函数貌似有多分类形式,那好办了。
由于第一步只涉及到参数维度的调整,没什么好展开的,下面着重展开后面两步。
2. 概率值转换
对于二分类,逻辑回归模型的概率转换表达式为:
y = h θ ( x ) = 1 1 + e ( − ω T x ) y = h_\theta(x)=\dfrac{1}{1+e^{(-\omega^Tx)}} y=hθ(x)=1+e(−ωTx)1
这里, y ∈ [ 0 , 1 ] y\in[0,1] y∈[0,1],为概率值。
假设样本的实际标签为 {0,1},则可根据如下公式判别样本的预测标签:
对于多分类,前面有提到,得到每个类别的得分并不困难,难的是如何把这些得分转换为概率值,使得所有类别的概率之和为1。对于二分类问题,可以通过sigmoid函数将属于某一类的得分 s s s 转换为概率值 p p p ,属于另一类的概率则理所应当的为 1 − p 1-p 1−p。可对于多分类,这一点不成立。
我们可以尝试将上述分段函数的权重 ω \omega ω 替换一下,令 ω = ω 1 − ω 2 \omega = \omega_1-\omega_2 ω=ω1−ω2,带入上式:
可以看到,这些函数的分子都是一样的,则属于第一类的概率正比于 e ω 1 T x e^{\omega_1^Tx} eω1Tx , 属于第二类的概率正比于 e ω 2 T x e^{\omega_2^Tx} eω2Tx ,那如何让所有的概率值为0,且保持这个正比关系呢?
聪明的前人想到了如下概率转换公式:
P ( y = k ) = e ω k T x e ω 1 T x + e ω 2 T x + . . . + e ω n T x = e ω k T x ∑ i n ( e ω i T x ) P(y=k) = \dfrac{e^{\omega_k^Tx}}{e^{\omega_1^Tx} + e^{\omega_2^Tx} + ...+e^{\omega_n^Tx}} = \dfrac{e^{\omega_k^Tx}}{\sum^n_i(e^{\omega_i^Tx})} P(y=k)=eω1Tx+eω2Tx+...+eωnTxeωkTx=∑in(eωiTx)eωkTx
哎,注意看哈。转换后,各个类别对应的值总和为1,且每个类别的概率值正比于其得分,这就是我们想要的概率值了。
3. loss定义
逻辑回归的 loss 为交叉熵函数,交叉熵函数能够衡量两个分布的相似性,其二分类和多分类的表达形式如下(具体参见 Loss进化史):
二分类:
L = 1 m ∑ i m L i = 1 m ∑ i m − [ y i ⋅ l o g ( p i ) + ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] L = \dfrac{1}{m}\sum^m_iL_i=\dfrac{1}{m}\sum^m_i-[y_i \cdot log(p_i) +(1-y_i) \cdot log(1-p_i) ] L=m1∑imLi=m1∑im−[yi⋅log(pi)+(1−yi)⋅log(1−pi)]
多分类:
L = 1 m ∑ i m L i = 1 m ∑ i m ∑ j n − y i j ⋅ l o g ( p i j ) L = \dfrac{1}{m}\sum^m_iL_i=\dfrac{1}{m}\sum^m_i\sum^n_j-y_{ij} \cdot log(p_{ij}) L=m1∑imLi=m1∑im∑jn−yij⋅log(pij)
最终步骤对比图,如下所示:
4. 反向传播
如上图所示,逻辑回归的求导过程可分为三个子过程,即三项偏导的乘积:
∂ L i ∂ ω i = ∂ L i ∂ p i ⋅ ∂ p i ∂ s i ⋅ ∂ s i ∂ ω i \dfrac{\partial L_i}{\partial \omega_i} = \dfrac{\partial L_i}{\partial p_i} \cdot \dfrac{\partial p_i}{\partial s_i} \cdot \dfrac{\partial s_i}{\partial \omega_i} ∂ωi∂Li=∂pi∂Li⋅∂si∂pi⋅∂ωi∂si
4.1 二分类
4.1.1 第一项: ∂ L i ∂ p i \dfrac{\partial L_i}{\partial p_i} ∂pi∂Li
由 L i = − [ y i ⋅ l o g ( p i ) + ( 1 − y i ) ⋅ l o g ( 1 − p i ) ] L_i = -[y_i \cdot log(p_i) +(1-y_i) \cdot log(1-p_i) ] Li=−[yi⋅log(pi)+(1−yi)⋅log(1−pi)],其中 p i p_i pi 表示样本 i i i 为正例的概率, y i y_i