Softmax Regression

Softmax Regression

简介

Softmax 回归模型属于有监督学习,是逻辑回归模型在多分类问题上的推广,其类标签 yy 可以取两个以上的值。

由于我们要解决的是多分类问题,类标签 yy 可以取 kk 个不同的值,因此对于训练集 {(x(1),y(1)),(x(2),y(2)),…,(x(m),y(m))}\left\{(x^{(1)}, y^{(1)}), (x^{(2)}, y^{(2)}), \dots, (x^{(m)}, y^{(m)})\right\},我们有 y(i)∈{1,2,…,k}y^{(i)} \in \left\{1, 2, \dots, k\right\}。

对于给定的测试输入 xx,我们希望用假设函数针对每一个类别 jj 都估算出一个概率值 p(y=j∣x)p(y = j \mid x),表示 xx 数据第 jj 类的概率。因此,我们的假设函数将要输出一个 kk 维的向量(向量元素的和为 1)来表示这 kk 个估计的概率值。

假设函数 hθ(x)h_\theta(x) 形式如下:

hθ(x(i))=[p(y(i)=1∣x(i);θp(y(i)=2∣x(i);θ⋮p(y(i)=k∣x(i);θ)]=1∑j=1keθjTx(i)[eθ1Tx(i)eθ2Tx(i)⋮eθkTx(i)]h_\theta\left(x^{(i)}\right) = \begin{bmatrix} p(y^{(i)}=1 \mid x^{(i)};\theta \\ p(y^{(i)}=2 \mid x^{(i)};\theta \\ \vdots \\ p(y^{(i)}=k \mid x^{(i)};\theta) \end{bmatrix} = \dfrac{1}{\sum_{j=1}^k e^{\theta_j^\mathrm Tx^{(i)}}} \begin{bmatrix} e^{\theta_1^\mathrm Tx^{(i)}} \\ e^{\theta_2^\mathrm Tx^{(i)}} \\ \vdots \\ e^{\theta_k^\mathrm Tx^{(i)}} \end{bmatrix}

其中 θ1,θ2,⋯ ,θk∈Rn+1\theta_1, \theta_2, \cdots, \theta_k \in \mathbb{R}^{n+1} 是模型的参数,1∑j=1keθjTx(i)\dfrac{1}{\sum_{j=1}^k e^{\theta_j^\mathrm Tx^{(i)}}} 是为了将所有的概率分布进行归一化,使所有概率之和为 1。

为了方便起见,我们令

θ=[θ1Tθ2T⋮θkT]k×(n+1)\boldsymbol{\theta} = \begin{bmatrix} \theta_1^\mathrm T \\ \theta_2^\mathrm T \\ \vdots \\ \theta_k^\mathrm T \end{bmatrix}_{k \times (n + 1)}

则 Softmax 的代价函数为

J(θ)=−1m(∑i=1m∑j=1k[y(i)=j]log⁡eθjTx(i)∑l=1keθlTx(i))J(\boldsymbol{\theta}) = -\dfrac 1m \left(\sum_{i=1}^m\sum_{j=1}^k\left[y^{(i)} = j\right]\log \dfrac{e^{\theta_j^\mathrm Tx^{(i)}}}{\sum_{l=1}^k e^{\theta_l^\mathrm Tx^{(i)}}}\right)

其中 [x][x] 表示若表达式 xx 为真则取值为 1,否则为 0。

上式事实上是逻辑回归代价函数的推广,逻辑回归代价函数可以改写为

J(θ)=−1m[∑i=1my(i)log⁡hθ(x(i))+(1−y(i))log⁡(1−hθ(x(i)))]=−1m(∑i=1m∑j=01[y(i)=j]log⁡p(y(i)=j∣x(i);θ))\begin{aligned} J(\theta) &= -\dfrac 1m\left[\sum_{i=1}^m y^{(i)}\log h_\theta(x^{(i)}) + (1 - y^{(i)}) \log(1 - h_\theta(x^{(i)}))\right] \\ &= -\dfrac 1m \left(\sum_{i=1}^m\sum_{j=0}^1 \left[y^{(i)} = j\right] \log p(y^{(i)} = j \mid x^{(i)}; \theta)\right) \end{aligned}

可以看到,Softmax 代价函数和逻辑回归的代价函数在形式上非常类似,只是 Softmax 代价函数中对类标记的 kk 个可能值进行了累加。

注意,在 Softmax 回归中,把 xx 分类为类别 jj 的概率为

p(y(i)=j∣x(i);θ)=eθjTx(i)∑l=1keθlTx(i)p\left(y^{(i)}=j \mid x^{(i)} ; \theta\right)=\frac{e^{\theta_{j}^{\mathrm T} x^{(i)}}}{\sum_{l=1}^{k} e^{\theta_{l}^{\mathrm T} x^{(i)}}}

对于 J(θ)J(\boldsymbol\theta) 的最小化问题,目前还没有闭式解法,我们只能使用迭代的优化算法。经过求导,我们得到梯度公式如下:

∇θjJ(θ)=−1m∑j=1m[x(i)([y(i)=j]−p(y(i)=j∣x(i);θ))]\nabla_{\theta_{j}} J(\boldsymbol\theta)=-\frac{1}{m} \sum_{j=1}^{m}\left[x^{(i)}\left(\left[y^{(i)}=j\right]-p\left(y^{(i)}=j \mid x^{(i)} ; \theta\right)\right)\right]

每次梯度下降迭代时都需要进行如下的更新:

θj:=θj−α∇θjJ(θ)(j=1,⋯ ,k)\theta_j := \theta_j - \alpha \nabla_{\theta_j}J(\boldsymbol\theta)\quad (j = 1, \cdots, k)

当实现 Softmax 回归算法时,我们通常会使用上述代价函数的一个改进版本。具体来说,就是和权重衰减(weight decay)一起使用。我们接下来介绍使用它的动机和细节。

权重衰减

所谓权重衰减,事实上就是正则化,我们通过在代价函数中加入一个权重衰减项来修改代价函数,这个衰减项会惩罚过大的参数值:

J(θ)=−1m(∑i=1m∑j=1k[y(i)=j]log⁡eθjTx(i)∑l=1keθlTx(i))+λ2∑i=1k∑j=0nθij2J(\boldsymbol{\theta}) = -\dfrac 1m \left(\sum_{i=1}^m\sum_{j=1}^k\left[y^{(i)} = j\right]\log \dfrac{e^{\theta_j^\mathrm Tx^{(i)}}}{\sum_{l=1}^k e^{\theta_l^\mathrm Tx^{(i)}}}\right) + \textcolor{red}{\dfrac \lambda 2\sum_{i=1}^k\sum_{j=0}^n\theta_{ij}^2}

新的代价函数的梯度公式为

∇θjJ(θ)=−1m∑j=1m[x(i)([y(i)=j]−p(y(i)=j∣x(i);θ))]+λθj\nabla_{\theta_{j}} J(\boldsymbol\theta)=-\frac{1}{m} \sum_{j=1}^{m}\left[x^{(i)}\left(\left[y^{(i)}=j\right]-p\left(y^{(i)}=j \mid x^{(i)} ; \theta\right)\right)\right] + \textcolor{red}{\lambda \theta_j}

Softmax 回归和逻辑回归的关系

当类别数 k=2k = 2 时,Softmax 回归退化为逻辑回归,这说明 Softmax 回归是逻辑回归的一般形式。

具体地,当 k=2k = 2 时,Softmax 回归的假设函数为

hθ(x)=1eθ1Tx+eθ2Tx[eθ1Txeθ2Tx]h_\theta(x)=\dfrac{1}{e^{\theta_1^\mathrm Tx}+e^{\theta_2^\mathrm Tx}} \begin{bmatrix} e^{\theta_1^\mathrm Tx}\\ e^{\theta_2^\mathrm Tx} \end{bmatrix}

从两个参数向量中都减去向量 θ1\theta_1,得到

hθ(x)=1e0⃗Tx+e(θ2−θ1)Tx[e0⃗Txe(θ2−θ1)Tx]=[11+e(θ2−θ1)Txe(θ2−θ1)Tx1+e(θ2−θ1)Tx]=[11+e(θ2−θ1)Tx1−1e(θ2−θ1)Tx]\begin{aligned} h_\theta(x)&=\dfrac{1}{e^{\vec 0^\mathrm Tx}+e^{(\theta_2 - \theta_1)^\mathrm Tx}} \begin{bmatrix} e^{\vec 0^\mathrm Tx}\\ e^{(\theta_2 - \theta_1)^\mathrm Tx} \end{bmatrix} \\ &= \begin{bmatrix} \dfrac{1}{1 + e^{(\theta_2 - \theta_1)^\mathrm Tx}} \\ \dfrac{e^{(\theta_2 - \theta_1)^\mathrm Tx}}{1 + e^{(\theta_2 - \theta_1)^\mathrm Tx}} \end{bmatrix} \\ &= \begin{bmatrix} \dfrac{1}{1 + e^{(\theta_2 - \theta_1)^\mathrm Tx}} \\ 1 - \dfrac{1}{e^{(\theta_2 - \theta_1)^\mathrm Tx}} \end{bmatrix} \end{aligned}

令 θ′=θ2−θ1\theta' = \theta_2 - \theta_1,可以发现预测函数中其中一个类别的概率为 11+e(θ′)Tx\dfrac{1}{1 +e^{(\theta')^\mathrm T x}},另一个类别的概率为 1−11+e(θ′)Tx1 - \dfrac{1}{1 +e^{(\theta')^\mathrm T x}},这与逻辑回归是一致的。

如果分类的类别是互斥的,适于选择 softmax 回归分类器。
如果类别之间不是互斥的,而是相互掺杂,则 k 个 logistic 回归分类器更加合适。