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=jx)p(y = j \mid x),表示 xx 数据第 jj 类的概率。因此,我们的假设函数将要输出一个 kk 维的向量(向量元素的和为 1)来表示这 kk 个估计的概率值。

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

hθ(x(i))=[p(y(i)=1x(i);θp(y(i)=2x(i);θp(y(i)=kx(i);θ)]=1j=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,,θkRn+1\theta_1, \theta_2, \cdots, \theta_k \in \mathbb{R}^{n+1} 是模型的参数,1j=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=1mj=1k[y(i)=j]logeθ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)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]=1m(i=1mj=01[y(i)=j]logp(y(i)=jx(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)=jx(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(θ)=1mj=1m[x(i)([y(i)=j]p(y(i)=jx(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=1mj=1k[y(i)=j]logeθjTx(i)l=1keθlTx(i))+λ2i=1kj=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(θ)=1mj=1m[x(i)([y(i)=j]p(y(i)=jx(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)=1e0Tx+e(θ2θ1)Tx[e0Txe(θ2θ1)Tx]=[11+e(θ2θ1)Txe(θ2θ1)Tx1+e(θ2θ1)Tx]=[11+e(θ2θ1)Tx11e(θ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}},另一个类别的概率为 111+e(θ)Tx1 - \dfrac{1}{1 +e^{(\theta')^\mathrm T x}},这与逻辑回归是一致的。

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