【机器学习】Softmax Regression简介

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/tracer9/article/details/50412836

本文我们来介绍Softmax Regression。

本文目录如下:

1. Motivation

Softmax Regression主要应用于多标签分类,它的主要作用是将多个标量映射为一个概率分布。

N featuresK labels 

2. Introduction

为了更好地阐述Softmax,让我们首先来回顾一下Logistic regression。在Logistic regression中,我们要解决的实际上是一个二分类问题:

y(i){0,1}

现在,假设我们有m个带标签的训练数据:

(x(1),y(1)),...,(x(m),y(m))

其中,x(i)Rny(i){0,1}。那么我们有如下结论,首先是我们的假设:

hθ(x)=11+exp(θTx)

可以将输入数据映射为一个0-1分布,得到概率的估计公式:

P(y=0|x;θ)=11+exp(θTx)

P(y=1|x;θ)=exp(θTx)1+exp(θTx)

接下来,就来到我们熟悉的步骤了:设定cost function,梯度下降法求参数。为了明确起见,我们把cost function也罗列如下:

J(θ)=[i=1my(i)loghθ(x(i))+(1y(i))log(1hθ(x(i)))]

θ=argmaxθJ(θ)

其中参数θRn

现在明白了吧?在logistic regression中,由于我们面对的是一个二分类问题,所以我们可以将输入映射为这样的概率分布,通过最大似然准则,求解参数。

现在我们希望在多标签分类问题中,也能够应用类似的框架求解问题。Softmax Regression应运而生!

3. Equation

3.1. Restatement

问题重述如下,给定一组训练数据集{(x(1),y(1)),...,(x(m),y(m))}。此时,输入数据仍为x(i)Rn。而输出标签从0,1两类,变成了K类:y(i){0,...,K}

3.2. Probability Estimation

我们要做首先就是估计这K类中每一类的输出概率。因此,我们要输出的是一个K维的向量,向量中的每一个值即为该类的输出概率。下面我们直接给出结果:

hθ(x)=P(y=1|x;θ)P(y=K|x;θ)=1Kj=1exp(θ(j)Tx)exp(θ(1)Tx)exp(θ(K)Tx)

这里面,我们将之前的θRn扩展到了K维,即我们有:θ(1),...,θ(K)Rn。为了简洁起见(同时也是为了我们之后的矩阵化编程方便起见,我们这里仍使用θ表示所有的参数。我们使用一个n-by-K的矩阵表示所有的参数,如下所示:

θ=|θ(1)||θ(2)||θ(K)|

此时参数矩阵:θRn×K

这个时候,我们已经有了hypothesis function,接下来就可以进一步地向前推进了,下面让我们来关注cost function吧。

3.3. Cost Function

在给出cost function之前,首先介绍一下指示函数(indicator function)。所谓的指示函数其实和我们学习C语言中的if语句有点像。1{true statement}=1 , 1{false statement}=0。有了这个帮手,我们就可以简介地描述cost function啦。

J(θ)=[i=1mK=1K1{y(i)=k}logP(y=K|x;θ)]=i=1mK=1K1{y(i)=k}logexp(θ(k)Tx)Kj=1exp(θ(j)Tx)

很遗憾,与Linear Regression不同,我们并不能使用解析解来求得参数。此处,我们使用批梯度下降法(Batch Gradient Descent,BGD)方法来进行求解:

θ(i):=θ(i)θ(i)J(θ)

在这里,每一个θ(i)都是一个n维的向量。

对于θ(i)J(θ)的计算是比较的复杂的,这里我们不加证明地直接给出,如果希望了解推导过程的同学可以查看附录(Appendix)部分。

θ(k)J(θ)=i=1m[x(i)(1{y(i)=k}P(y(i)=k|x;θ))]

此时,所有我们需要的内容皆已具备,只要有足够多的分类数据,我们就可以使用梯度下降法训练自己的多标签分类数据啦!

我们将算法重述如下:


Algorithm1. Softmax Regression

输入:训练数据{(x(1),y(1)),...,(x(m),y(m))}。其中,x(i)Rny(i){0,...,K}

输出:估计标签值y^(i)

(1) 初始化参数θ(i),对i{1,2,...,K}θ(k)=0n×1

(2) 对i=1,...,#training

j=1,...,K

设若y(j)=kk{1,...,K},更新θ(k):

θ(k):=θ(k)θ(k)J(θ)

其中,θ(k)J(θ)的计算方法如下:

θ(k)J(θ)=i=1m[x(i)(1{y(i)=k}P(y(i)=k|x;θ))]

(3) 如果不是所有的θ(k)都收敛,重复步骤2。

4. Reference

[1] 李航. 统计学习方法[J]. 2012.

[2] Andrew Ng, et al. Softmax Regression. UFLDL Tutorial. http://ufldl.stanford.edu/tutorial/


5. Appendix

5.1. Cost function求梯度

问题描述如下,给定cost function:

J(θ)=i=1mK=1K1{y(i)=k}logexp(θ(k)Tx)Kj=1exp(θ(j)Tx)

试求解:θ(a)J(θ),这里解释一下,由于我们在原有的cost function中已经使用了ijk的下标,此处我们使用a作为求梯度时的自变量,即θ(a)。当我们已经求梯度完毕后,再将这个临时变量a替换成为k。二者只是一个标号的不同。

首先分析一下,在cost function中可能涉及到θ(a)就是右边log函数中的分子,分母。只有当k=a的时候,分子才会对求梯度产生影响,而无论k取何值时,分母都一定会对求导产生影响。注意到最外层的i=1m这一项实际上对求导并不产生任何影响,真正产生影响的是:

L(θ)=K=1K1{y(i)=k}logexp(θ(k)Tx)Kj=1exp(θ(j)Tx)

因此我们有:

L(θ)=1{y(i)=k}logexp(θ(k)Tx)Kj=1exp(θ(j)Tx)1{y(i)=a}logexp(θ(a)Tx)Kj=1exp(θ(j)Tx)k=1,...,a1,a+1,...,Kk=a

对于上述两式,我们使用L1(θ)L2(θ)来指代。

首先我们对于L1(θ)进行求导:

θ(a)L1(θ)=====1{y(i)=k}θ(a)logexp(θ(k)Tx(i))Kj=1exp(θ(j)Tx(i))1{y(i)=k}Kj=1exp(θ(j)Tx(i))exp(θ(k)Tx(i))θ(a)exp(θ(k)Tx(i))Kj=1exp(θ(j)Tx(i))1{y(i)=k}Kj=1exp(θ(j)Tx(i))exp(θ(k)Tx(i))exp(θ(k)Tx(i))(Kj=1exp(θ(j)Tx(i)))2xexp(θ(a)Tx(i))1{y(i)=k}exp(θ(a)Tx(i))(Kj=1exp(θ(j)Tx(i)))x(i)1{y(i)=k}x(i)(P(y(i)=k|x;θ))

看上去有点儿复杂?是吧。其实就是我们在高中时候学过的很简单的“链式求导”,斌斌在这里强烈建议您拿出一张草稿纸,自己手动推导一下,你会很快发现,看上去有些可怖的公式推导,居然如此简单!

下面我们再来推导θ(a)L2(θ),这个推导可能会比上面的推导更复杂一下,因为我们要同时顾及到分子分母,一起来看吧:

θ(a)L2(θ)=====1{y(i)=k}θ(a)logexp(θ(a)Tx(i))Kj=1exp(θ(j)Tx(i))1{y(i)=k}Kj=1exp(θ(j)Tx(i))exp(θ(a)Tx(i))θ(a)exp(θ(a)Tx(i))Kj=1exp(θ(j)Tx(i))1{y(i)=k}Kj=1exp(θ(j)Tx(i))exp(θ(a)Tx(i))x(i)exp(θ(a)Tx(i))Kj=1exp(θ(j)Tx(i))x(i)exp(θ(a)Tx(i))2(Kj=1exp(θ(j)Tx(i)))21{y(i)=k}x(i)Kj=1exp(θ(j)Tx(i))x(i)exp(θ(a)Tx(i))Kj=1exp(θ(j)Tx(i))1{y(i)=k}x(i)(1P(y(i)=a|x(i);θ))

至此,我们已经完成了对于L1(θ)L2(θ)的梯度求导,只要将这两部分进行组合即可得到最终对于cost function的梯度,还有我们一开始将i=1m去掉了,千万不要忘记最后加回来哦~~~

最后,我们得到前述的结论:

θ(k)J(θ)=i=1m[x(i)(1{y(i)=k}P(y(i)=k|x(i);θ))]

2015.12.16 于浙大.

展开阅读全文

没有更多推荐了,返回首页