要学习softmax回归,就不得不提到前面学习过的逻辑回归。为什么呢?直接给出结论:因为类别数 k = 2 时,SoftMax 回归退化为逻辑回归!原因在后面的推导过程中给出。
一、什么是SoftMax回归
在机器学习尤其是深度学习中,softmax(PS:该函数被称作柔性最大值传输函数)是个非常常用而且比较重要的函数,尤其在多分类的场景中使用广泛。他把一些输入映射为0−1之间的实数,并且归一化保证和为1,因此多分类的概率之和也刚好为1。
为什么叫做SoftMax?顾名思义,SoftMax由两个单词组成,其中一个是Max。对于Max我们都很熟悉,比如有两个变量a,b。如果a>b,则max为a,反之为b。用伪码简单描述一下就是 ifa>breturna;elseb。 另外一个单词为Soft,因为Max存在的问题,如果将Max看成一个分类问题,就是非黑即白,最后的输出是一个确定的变量。更多的时候,我们希望输出的是取到某个分类的概率,或者说,我们希望分值大的那一项被经常取到,而分值较小的那一项也有一定的概率偶尔被取到,所以我们就应用到了Soft的概念,即最后的输出是每个分类被取到的概率。
逻辑回归的分类器是以伯努利分布为模型建模的,它可以用来分两种类别;而SoftMax回归的分类器以多项式分布为模型建模的,它可以分多种互斥的类别。
二、SoftMax回归
先给一张在讲SoftMax回归时很经典的图,这个图比较清晰地告诉我们softmax是怎么计算的,很直观明了。
接下来,就要介绍SoftMax回归模型了。
该模型是逻辑回归模型在多分类问题上的推广,在多分类问题中,类标签y可以取两个以上的值。 SoftMax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。SoftMax回归是有监督的,当然也有与深度学习/无监督学习方法的结合。
在SoftMax回归中,由于解决的是多分类问题,类标y可以取k个不同的值,因此,对于训练集{(x(1),y(1)),(x(2),y(2)),...,(x(m),y(m))},有y(i)∈{1,2,...,k},(注意此处的类别下标从 1 开始,而不是0),例如,在 MNIST 数字识别任务中,我们有 k=10 个不同的类别。
对于给定的测试输入x,我们想用假设函数针对每一个类别j估算出概率值 p(y=j∣x)。也就是说,我们想估计 x 的每一种分类结果出现的概率,
令p(y=j∣x)=Φi ——属于某i类别的概率,
那么必然有i=1∑kΦi=1
p(y=k∣x)=1−i=1∑k−1Φi
引入T(y):k−1维向量,k列
T(1)=⎝⎜⎜⎜⎜⎜⎛100⋮0⎠⎟⎟⎟⎟⎟⎞T(2)=⎝⎜⎜⎜⎜⎜⎛010⋮0⎠⎟⎟⎟⎟⎟⎞T(3)=⎝⎜⎜⎜⎜⎜⎛001⋮0⎠⎟⎟⎟⎟⎟⎞...T(k−1)=⎝⎜⎜⎜⎜⎜⎛000⋮1⎠⎟⎟⎟⎟⎟⎞T(k)=⎝⎜⎜⎜⎜⎜⎛000⋮0⎠⎟⎟⎟⎟⎟⎞
我们定义一个运算μ(y=i)=1,表示y=i为真,μ(y=i)=0,表示y=i为假。(PS:示性函数)
因此有:
T(y=i)i=μ(y=i)
则联合分布的概率密度函数如下:
p(y=k∣x)
=Φ1μ(y=1)Φ2μ(y=2)...Φkμ(y=k)
=Φ1μ(y=1)Φ2μ(y=2)...Φk1−∑i=1k−1μ(y=i)
=Φ1T(y)1Φ2T(y)2...Φk1−∑i=1k−1T(y)i
=exp(T(y)1lnΦ1+T(y)2lnΦ2+...+(1−i=1∑k−1T(y)i)lnΦk)
=exp(T(y)1lnΦkΦ1+T(y)2lnΦkΦ2+...+T(y)k−1lnΦkΦk−1+lnΦk)
=b(y)exp(ηTT(y)−a(η))
到了这一步,看着眼熟么?对!就是指数分布族!
对应的,
η=⎣⎢⎢⎢⎢⎡lnΦkΦ1lnΦkΦ2⋮lnΦkΦk−1⎦⎥⎥⎥⎥⎤
a(η)=−lnΦk
b(y)=1
因为ηi=lnΦkΦi⇒Φi=Φkeηi
以及Φk∑i=1keηi=∑i=1kΦi=1
所以Φi=∑j=1kΦjeηi
重点来了:Φi就是我们想用假设函数针对每一个类别i估算出概率值p(y=i∣x)=∑j=1kΦjeηi,也就是说,我们想估计x的每一种分类结果出现的概率。
因此呢,假设函数将要输出一个k维的向量(向量元素的和为1)来表示这 k个估计的概率值。那么假设函数hθ(x)形式如下:
hθ(x)=⎣⎢⎢⎢⎡Φ1Φ2⋮Φk⎦⎥⎥⎥⎤=∑kj=1eθjTx1⎣⎢⎢⎢⎢⎡eθ1Txeθ2Tx⋮eθkTx⎦⎥⎥⎥⎥⎤
其中θ1,θ2,...,θk∈ℜn+1是模型的参数。∑kj=1eθjTx1这一项对概率分布进行归一化,使得所有概率之和为1,θ用一个k∗n−1维向量来表示:
θ=⎣⎢⎢⎢⎡θ1θ2⋮θk⎦⎥⎥⎥⎤
接下来要介绍SoftMax损失函数了。
首先,考虑一个样本(x,y),有P(y=i∣x;θ)=∑j=1keθjTxeθiTx,令aj=θjTx
那么损失函数被定义为:
L(x,y^)=−j=1∑kl{y=j}lnyj^
这种形式的损失函数被称作交叉熵损失函数!
其中y^是预测结果的概率值,l{y=j}是示性函数,表示y是第j个类别的真实值,只能取0or1.
那什么是交叉熵又要开一篇文章去介绍,给三篇文章我认为写的很不错,也比较容易理解。
理解熵与交叉熵
简单的交叉熵损失函数,你真的懂了吗?
一文搞懂交叉熵在机器学习中的使用,透彻理解交叉熵背后的直觉
接下来,要对损失函数求导了,对θj求偏导,运用求导链式法则即可:
∂θj∂L(x,y^)=−i=1∑k∂yi^∂L(x,y^)∂aj∂yi^∂θj∂aj=−i=1∑kyi^l{y=i}∂aj∂∑l=1kealeai∂θj∂θjTx=−i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅l{i=j}⋅(∑l=1keal)−eai⋅eajx=x⎝⎜⎛i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅eaj−i=1∑kyi^l{y=i}(∑l=1keal)2eai⋅l{i=j}⋅(∑l=1keal)⎠⎟⎞=x⋅(i=1∑kyi^l{y=i}⋅yi^yj^−i=1∑kyi^l{y=i}yi^⋅l{i=j})=x⋅(yj^−i=1∑kl{y=i}⋅l{i=j})=x⋅(yj^−l{y=j})
以上是对单个样本的损失函数求偏导(PS:其实就是单个样本的梯度),但实际上,我们可能有m个样本,因此,需要累加在一起。如下所示:
▽θjJ(θ)=i=1∑mxi⋅(yj^−l{yi=j})
利用梯度下降法可以求最优解,即:
θj:=θj−α▽θjJ(θ)
最后谈谈权重衰减(正则化)。
给J(θ)加个L2权重衰减项2λ∑i=1k∑j=0nθij2来修改代价函数,这个衰减项会惩罚过大的参数值,有了这个权重衰减项以后(λ>0),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。
三、Softmax 回归 vs. k 个二元分类器
如果你在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用softmax分类器呢,还是使用逻辑回归算法建立k个独立的二元分类器呢?
这一选择取决于你的类别之间是否互斥,例如,如果你有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么你可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数 k=4 的softmax回归。(如果在你的数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数 k 设为5。) 如果你的四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声 。这种情况下,使用4个二分类的逻辑回归分类器更为合适。这样,对于每个新的音乐作品 ,我们的算法可以分别判断它是否属于各个类别。
现在我们来看一个计算视觉领域的例子,你的任务是将图像分到三个不同类别中。
1 假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。你会使用sofmax回归还是 3个逻辑回归分类器呢?
2 现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,你又会选择 softmax 回归还是多个逻辑回归分类器呢?
在第一个例子中,三个类别是互斥的,因此更适于选择softmax回归分类器 。而在第二个例子中,建立三个独立的逻辑回归分类器更加合适。
未完待续。。。