本文我们来介绍Softmax Regression。
本文目录如下:
Softmax Regression主要应用于多标签分类,它的主要作用是将多个标量映射为一个概率分布。
为了更好地阐述Softmax,让我们首先来回顾一下Logistic regression。在Logistic regression中,我们要解决的实际上是一个二分类问题:
现在,假设我们有m个带标签的训练数据:
其中, x(i)∈Rn , y(i)∈{0,1} 。那么我们有如下结论,首先是我们的假设:
可以将输入数据映射为一个0-1分布,得到概率的估计公式:
接下来,就来到我们熟悉的步骤了:设定cost function,梯度下降法求参数。为了明确起见,我们把cost function也罗列如下:
其中参数 θ∈Rn 。
现在明白了吧?在logistic regression中,由于我们面对的是一个二分类问题,所以我们可以将输入映射为这样的概率分布,通过最大似然准则,求解参数。
现在我们希望在多标签分类问题中,也能够应用类似的框架求解问题。Softmax Regression应运而生!
问题重述如下,给定一组训练数据集 {(x(1),y(1)),...,(x(m),y(m))} 。此时,输入数据仍为 x(i)∈Rn 。而输出标签从0,1两类,变成了 K 类: y(i)∈{0,...,K} 。
我们要做首先就是估计这 K 类中每一类的输出概率。因此,我们要输出的是一个K维的向量,向量中的每一个值即为该类的输出概率。下面我们直接给出结果:
这里面,我们将之前的 θ∈Rn 扩展到了 K 维,即我们有: θ(1),...,θ(K)∈Rn 。为了简洁起见(同时也是为了我们之后的矩阵化编程方便起见,我们这里仍使用 θ 表示所有的参数。我们使用一个n-by-K的矩阵表示所有的参数,如下所示:
此时参数矩阵: θ∈Rn×K
这个时候,我们已经有了hypothesis function,接下来就可以进一步地向前推进了,下面让我们来关注cost function吧。
在给出cost function之前,首先介绍一下指示函数(indicator function)。所谓的指示函数其实和我们学习C语言中的if语句有点像。 1{true statement}=1 , 1{false statement}=0 。有了这个帮手,我们就可以简介地描述cost function啦。
很遗憾,与Linear Regression不同,我们并不能使用解析解来求得参数。此处,我们使用批梯度下降法(Batch Gradient Descent,BGD)方法来进行求解:
在这里,每一个 θ(i) 都是一个n维的向量。
对于 ∇θ(i)J(θ) 的计算是比较的复杂的,这里我们不加证明地直接给出,如果希望了解推导过程的同学可以查看附录(Appendix)部分。
此时,所有我们需要的内容皆已具备,只要有足够多的分类数据,我们就可以使用梯度下降法训练自己的多标签分类数据啦!
我们将算法重述如下:
Algorithm1. Softmax Regression
输入:训练数据 {(x(1),y(1)),...,(x(m),y(m))} 。其中, x(i)∈Rn , y(i)∈{0,...,K} 。
输出:估计标签值 y^(i) 。
(1) 初始化参数 θ(i) ,对 i∈{1,2,...,K} , θ(k)=0n×1 。
(2) 对 i=1,...,#training :
对 j=1,...,K :
设若 y(j)=k,k∈{1,...,K} ,更新 θ(k) :
其中, ∇θ(k)J(θ) 的计算方法如下:
(3) 如果不是所有的 θ(k) 都收敛,重复步骤2。
[1] 李航. 统计学习方法[J]. 2012.
[2] Andrew Ng, et al. Softmax Regression. UFLDL Tutorial. http://ufldl.stanford.edu/tutorial/
问题描述如下,给定cost function:
试求解: ∇θ(a)J(θ) ,这里解释一下,由于我们在原有的cost function中已经使用了 i,j,k 的下标,此处我们使用a作为求梯度时的自变量,即 θ(a) 。当我们已经求梯度完毕后,再将这个临时变量a替换成为k。二者只是一个标号的不同。
首先分析一下,在cost function中可能涉及到 θ(a) 就是右边log函数中的分子,分母。只有当 k=a 的时候,分子才会对求梯度产生影响,而无论k取何值时,分母都一定会对求导产生影响。注意到最外层的 −∑i=1m 这一项实际上对求导并不产生任何影响,真正产生影响的是:
因此我们有:
对于上述两式,我们使用 L1(θ) , L2(θ) 来指代。
首先我们对于 L1(θ) 进行求导:
看上去有点儿复杂?是吧。其实就是我们在高中时候学过的很简单的“链式求导”,斌斌在这里强烈建议您拿出一张草稿纸,自己手动推导一下,你会很快发现,看上去有些可怖的公式推导,居然如此简单!
下面我们再来推导 ∇θ(a)L2(θ) ,这个推导可能会比上面的推导更复杂一下,因为我们要同时顾及到分子分母,一起来看吧:
至此,我们已经完成了对于 L1(θ) , L2(θ) 的梯度求导,只要将这两部分进行组合即可得到最终对于cost function的梯度,还有我们一开始将 −∑i=1m 去掉了,千万不要忘记最后加回来哦~~~
最后,我们得到前述的结论:
2015.12.16 于浙大.