Softmax回归重庆大学杨钰源1.引言该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签可以取两个以上的值。Softmax回归模型对于诸如MNIST手写数字分类等问题是很有用的,该问题的目的是辨识10个不同的单个数字。Softmax回归是有监督的,后面也会介绍它与深度学习/无监督学习方法的结合。在logistic回归中,训练集由个已标记的样本构成:,其中输入特征。假定特征向量的维度为,其中对应截距项。由于logistic回归是针对二分类问题的,因此类标记。假设函数(hypothesisfunction)如下:训练模型参数能够使代价函数最小化。代价函数如下:在softmax回归中,解决的是多分类问题(相对于logistic回归解决的二分类问题),类标可以取个不同的值(而不是2个)。因此,对于训练集,我们有。例如,在MNIST数字识别任务中,有个不同的类别。对于给定的测试输入,用假设函数针对每一个类别j估算出概率值。也就是估计的每一种分类结果出现的概率。因此,假设函数将要输出一个维的向量(向量元素的和为1)来表示这个估计的概率值。具体地说,假设函数形式如下:其中是模型的参数。这一项对概率分布进行归一化,使得所有概率之和为1。为了方便起见,同样使用符号来表示全部的模型参数。在实现Softmax回归时,将用一个的矩阵来表示会很方便,该矩阵是将按行罗列起来得到的,如下所示:2.Softmax代价函数现在来介绍softmax回归算法的代价函数。在下面的公式中,是示性函数,其取值规则为:值为真的表达式,值为假的表达式。Softmax代价函数为:logistic回归代价函数可以改为:可以看到,Softmax代价函数与logistic代价函数在形式上非常类似,只是在Softmax损失函数中对类标记的个可能值进行了累加。在Softmax回归中将分类为类别的概率为:.对于的最小化问题,目前还没有闭式解法。因此,使用迭代的优化算法(例如梯度下降法,或L-BFGS)。经过求导,得到梯度公式如下:回顾一下符号的含义。本身是一个向量,它的第个元素是对的第个分量的偏导数。有了上面的偏导数公式以后,就可以将它代入到梯度下降法等算法中,来最小化。例如,在梯度下降法的标准实现中,每一次迭代需要进行如下更新:()。当实现softmax回归算法时,通常会使用上述代价函数的一个改进版本。具体来说,就是和权重衰减(weightdecay)一起使用。接下来介绍使用它的动机和细节。3.Softmax回归模型参数化的特点Softmax回归有一个不寻常的特点:它有一个“冗余”的参数集。为了便于阐述这一特点,假设从参数向量中减去了向量,这时,每一个都变成了()。此时假设函数变成了以下的式子:从中减去完全不影响假设函数的预测结果,这表明前面的softmax回归模型中存在冗余的参数。更正式一点来说,Softmax模型被过度参数化了。对于任意一个用于拟合数据的假设函数,可以求出多组参数值,这些参数得到的是完全相同的假设函数。进一步而言,如果参数是代价函数的极小值点,那么同样也是它的极小值点,其中可以为任意向量。因此使最小化的解不是唯一的。由于仍然是一个凸函数,因此梯度下降时不会遇到局部最优解的问题。但是Hessian矩阵是奇异的/不可逆的,这会直接导致采用牛顿法优化就遇到数值计算的问题。当时,总是可以将替换为(即替换为全零向量),并且这种变换不会影响假设函数。因此可以去掉参数向量(或者其他中的任意一个)而不影响假设函数的表达能力。实际上,与其优化全部的个参数(其中),不如令,只优化剩余的个参数,这样算法依然能够正常工作。在实际应用中,为了使算法实现更简单清楚,往往保留所有参数,而不任意地将某一参数设置为0。但此时需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决softmax回归的参数冗余所带来的数值问题。4.权重衰减通过添加一个权重衰减项来修改代价函数,这个衰减项会惩罚过大的参数值,现在代价函数变为:有了这个权重衰减项以后(),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。此时的Hessian矩阵变为可逆矩阵,并且因为是凸函数,梯度下降法和L-BFGS等算法可以保证收敛到全局最优解。为了使用优化算法,需要求得这个新函数的导数,如下:通过最小化,就能实现一个可用的softmax回归模型。5.Softmax回归与Logistic回归的关系当类别数时,softmax回归退化为logistic回归。这表明softmax回归是logistic回归的一般形式。具体地说,当时,softmax回归的假设函数为:利用softmax回归参数冗余的特点,令,并且从两个参数向量中都减去向量,得到:因此,用来表示,就会发现softmax回归器预测其中一个类别的概率为,另一个类别概率的为,这与logistic回归是一致的。6.Softmax回归vs.k个二元分类器如果在开发一个音乐分类的应用,需要对k种类型的音乐进行识别,那么是选择使用softmax分类器呢,还是使用logistic回归算法建立k个独立的二元分类器呢?这一选择取决于类别之间是否互斥,例如,如果有四个类别的音乐,分别为:古典音乐、乡村音乐、摇滚乐和爵士乐,那么可以假设每个训练样本只会被打上一个标签(即:一首歌只能属于这四种音乐类型的其中一种),此时你应该使用类别数k=4的softmax回归。(如果在数据集中,有的歌曲不属于以上四类的其中任何一类,那么你可以添加一个“其他类”,并将类别数k设为5。)如果四个类别如下:人声音乐、舞曲、影视原声、流行歌曲,那么这些类别之间并不是互斥的。例如:一首歌曲可以来源于影视原声,同时也包含人声。这种情况下,使用4个二分类的logistic回归分类器更为合适。这样,对于每个新的音乐作品,该算法可以分别判断它是否属于各个类别。现在看一个计算视觉领域的例子,任务是将图像分到三个不同类别中。(i)假设这三个类别分别是:室内场景、户外城区场景、户外荒野场景。会使用sofmax回归还是3个logistic回归分类器呢?(ii)现在假设这三个类别分别是室内场景、黑白图片、包含人物的图片,又会选择softmax回归还是多个logistic回归分类器呢?在第一个例子中,三个类别是互斥的,因此更适于选择softmax回归分类器。而在第二个例子中,建立三个独立的logistic回归分类器更加合适。bsxfun:C=bsxfun(fun,A,B)表达的是两个数组A和B间元素的二值操作,fun是函数句柄或者m文件,或者是内嵌的函数。在实际使用过程中fun有很多选择比如说加,减等,前面需要使用符号’@’.一般情况下A和B需要尺寸大小相同,如果不相同的话,则只能有一个维度不同,同时A和B中在该维度处必须有一个的维度为1。比如说bsxfun(@minus,A,mean(A)),其中A和mean(A)的大小是不同的,这里的意思需要先将mean(A)扩充到和A大小相同,然后用A的每个元素减去扩充后的mean(A)对应元素的值。rand:生成均匀分布的伪随机数。分布在(0~1)之间主要语法:rand(m,n)生成m行n列的均匀分布的伪随机数rand(m,n,'double')生成指定精度的均匀分布的伪随机数,参数还可以是'single'rand(RandStream,m,n)利用指定的RandStream(我理解为随机种子)生成伪随机数randn:生成标准正态分布的伪随机数(均值为0,方差为1)。主要语法:和上面一样randi:生成均匀分布的伪随机整数主要语法:randi(iMax)在闭区间(0,iMax)生成均匀分布的伪随机整数randi(iMax,m,n)在闭区间(0,iMax)生成mXn型随机矩阵r=randi([iMin,iMax],m,n)在闭区间(iMin,iMax)生成mXn型随机矩阵exist:测试参数是否存在,比如说exist('opt_normalize','var')表示检测变量opt_normalize是否存在,其中的’var’表示变量的意思。colormap:设置当前常见的颜色值表。floor:floor(A):取不大于A的最大整数。ceil:ceil(A):取不小于A的最小整数。imagesc:imagesc和image类似,可以用于显示图像。比如imagesc(array,'EraseMode','none',[-11]),这里的意思是将array中的数据线性映射到[-1,1]之间,然后使用当前设置的颜色表进行显示。此时的[-1,1]充满了整个颜色表。背景擦除模式设置为node,表示不擦除背景。repmat:该函数是扩展一个矩阵并把原来矩阵中的数据复制进去。比如说B=repmat(A,m,n),就是创建一个矩阵B,B中复制了共m*n个A矩阵,因此B矩阵的大小为[size(A,1)*msize(A,2)*m]。