zoukankan      html  css  js  c++  java
  • softmax回归(理论部分解释)

    前面我们已经说了logistic回归,训练样本是5ec89e9cf3712d45b80e93258352ea8fimage(且这里的image是d维,下面模型公式的x是d+1维,其中多出来的一维是截距横为1,这里的y=±1也可以写成其他的值,这个无所谓不影响模型,只要是两类问题就可以),训练好这个模型中imageimage参数θ以后(或者是imageimage这个模型,这俩是一个模型),然后给入一个新的image,我们就可以根据模型来预测image对应label=1或0的概率了。

    前面处理的是两类问题,我们想把这个两类问题扩展,即根据训练好的模型,给入一个新的imageimage,我们就可以根据模型来预测image对应label=1,2,…k等多个值的概率。我们首先也是最重要的部分是确定这个新的模型是什么。对于一个x,新的模型image(j=1,2..k)要加起来等于1.

    我们假设新模型为:

    image……………………………………..……………………………………………………………………(1)

    (这里模型中的image是经过前面的image处理后的,每一个image都增加了一维image

    其中 	heta_1, 	heta_2, ldots, 	heta_k in Re^{n+1} 是模型的参数在实现Softmax回归时,将 	extstyle 	heta 用一个 	extstyle k 	imes(n+1) 的矩阵来表示会很方便,该矩阵是将 	heta_1, 	heta_2, ldots, 	heta_k 按行罗列起来得到的,如下所示:

    
	heta = egin{bmatrix}
mbox{---} 	heta_1^T mbox{---} \
mbox{---} 	heta_2^T mbox{---} \
vdots \
mbox{---} 	heta_k^T mbox{---} \
end{bmatrix}

    这里说一个问题:在logistic回归中,是两类问题,我们只用了一个θ,这里我们是不是也可以只用k-1个θk就可以表示所有的模型呢?具体就是我们只需要把image置为0.所以image=1,这样带入公式(1)中就可以少使用一个image,我们验证一下,如果k=2即两类问题时,这个模型就退化成logistic回归,我们令θ2=0,那么我们得到:

    imageimageimageimageimage  ,得证。所以说我们的
	heta = egin{bmatrix}
mbox{---} 	heta_1^T mbox{---} \
mbox{---} 	heta_2^T mbox{---} \
vdots \
mbox{---} 	heta_k^T mbox{---} \
end{bmatrix}
参数矩阵确实存在参数冗余,这个问题,下面还会继续说。

    接下来我们要做的是求cost function:

    我们知道logistic的cost function(不加约束项)为171730576401395,即把每个样本image带入其label image对应的模型公式里(image的labelimage是1,就把image代入image,是0就代入image),然后把所有样本image带入模型得到的结果相乘再取对数log(对数运算也就是每个样本image带入模型得到的结果再相加),取平均。我们这里同样这样做,只是因为这里类别计较多,我们使用一个”示性函数‘’来使公式表达整洁:

    	extstyle 1{cdot} 是示性函数,其取值规则为:	extstyle 1{ 值为真的表达式 	extstyle }=1	extstyle 1{ 值为假的表达式 	extstyle }=0

    举例来说,表达式 	extstyle 1{2+2=4} 的值为1 ,	extstyle 1{1+1=5}的值为 0。

    我们的代价函数为(不加约束项):

    
egin{align}
J(	heta) = - frac{1}{m} left[ sum_{i=1}^{m} sum_{j=1}^{k}  1left{y^{(i)} = j
ight} log frac{e^{	heta_j^T x^{(i)}}}{sum_{l=1}^k e^{ 	heta_l^T x^{(i)} }}
ight]
end{align}

    我们知道对logistic回归模型的cost function 最小化,这里以梯度下降法进行说明:

    这里的θ是一个k*(n+1)的矩阵,对应着模型里面的所有参数,我们现在有一个θ参数矩阵值

    ,那么我们通过梯度下降法得到的新的θ’参数矩阵值是多少呢,怎么求?是这样的,比如我们更新θ(1,1)这个参数目前对应的值,

    首先我们求image对θ(1,1)这一个参数的偏导:

    image求导得到的是一个数(即把所有image和目前的θ参数矩阵值带入左边这个公式得到的结果即是,而不是还需要θ的第一个元素增加一个增量什么的,因为这里已经对θ(1,1)求导了)。有的地方是按梯度更新的,梯度是一个向量,但梯度也是分别对每一个参数求导得到的数,然后组成的向量。这里这么写是为了便于理解(在程序中还是以矩阵运算进行的,所以跟这个公式会有出入,但是核心思想是一样的)。然后新的θ’参数矩阵值的第一个元素θ’(1,1)=θ(1,1)-a。然后利用同样的方法image得到新的参数矩阵值θ’的其他元素θ’(v,u)。我们得到θ’后,我们按这种方法再次迭代得到新的参数矩阵值θ”…..最后得到使image收敛的模型参数。

    这时候我们讨论一下前面提到的参数冗余问题:

    现在我们模型的参数矩阵θ求好了,那么我们有一个样本image,我们想求下这个样本对应的label等于各个i(i=1,2…k)的概率即利用image

    这时候我们让矩阵θ的每一行	extstyle 	heta_j 都变成 	extstyle 	heta_j - psi(	extstyle j=1, ldots, k)。那么对任意的j,j∈	extstyle j=1, ldots, k,有

    d8076908fb40b49db821dc410b03700f

    也就是说参数矩阵θ的每一行	extstyle 	heta_j都减去减去某一个常向量image得到新的参数矩阵θ’,那么这两个参数矩阵是等价的,即一个样本image对应的label等于各个i(i=1,2…k)的概率在两个参数矩阵下是一样的。这时候我们假设如果参数 	extstyle (	heta_1, 	heta_2,ldots, 	heta_k) 是代价函数 	extstyle J(	heta) 的极小值点,那么 	extstyle (	heta_1 - psi, 	heta_2 - psi,ldots,
	heta_k - psi) 同样也是它的极小值点,其中 	extstyle psi 可以为任意向量。因此使 	extstyle J(	heta) 最小化的解不是唯一的。(有趣的是,由于 	extstyle J(	heta) 仍然是一个凸函数,如果是只是用梯度下降法的话,不会遇到局部最优解的问题。但是 Hessian 矩阵是奇异的/不可逆的,这会直接导致采用牛顿法优化就遇到数值计算的问题,所以我们还是要寻找在使用梯度下降、牛顿法或其他算法时都可以解决参数冗余所带来的数值问题的办法)

    这时候我们可以考虑这个image等于某一个	extstyle 	heta_j,那么这个	extstyle 	heta_j就变成了0向量,这样新的参数矩阵就少了一组变量,只需要k-1组	extstyle 	heta_j,我们就可以构建模型,这样我们的cost function的优化结果只有唯一解。并且在logistic公式中我们也是这么做的,前面已经证明了。

    在实际应用中,为了使算法实现更简单清楚,往往保留所有参数 	extstyle (	heta_1, 	heta_2,ldots, 	heta_n),而不任意地将某一参数设置为 0。但此时我们需要对代价函数做一个改动:加入权重衰减。权重衰减可以解决 softmax 回归的参数冗余所带来的数值问题。

    我们通过添加一个权重衰减项 	extstyle frac{lambda}{2} sum_{i=1}^k sum_{j=0}^{n} 	heta_{ij}^2 来修改代价函数,这个衰减项会惩罚过大的参数值,现在我们的代价函数变为:

    
egin{align}
J(	heta) = - frac{1}{m} left[ sum_{i=1}^{m} sum_{j=1}^{k} 1left{y^{(i)} = j
ight} log frac{e^{	heta_j^T x^{(i)}}}{sum_{l=1}^k e^{ 	heta_l^T x^{(i)} }}  
ight]
              + frac{lambda}{2} sum_{i=1}^k sum_{j=0}^n 	heta_{ij}^2
end{align}
    那为什么加入这个权重衰减项也就是L2正则项后,就可以解决参数冗余所带来的数值问题?
    有了这个权重衰减项以后 (

    	extstyle lambda > 0

    ),代价函数就变成了严格的凸函数,这样就可以保证得到唯一的解了。 此时的 Hessian矩阵变为可逆矩阵,并且因为

    	extstyle J(	heta)

    是凸函数,梯度下降法和 L-BFGS 等算法可以保证收敛到全局最优解。

    在优化参数每次迭代得到新的θ‘时,与前面的相比,我们这里只要需要改变上面的a,即上面的a还要加上一个数。你要更新θ元素的某个元素θ(v,u),就是把对应的a变成:a加上正则项权重lamuda倍的原参数矩阵对应的元素θ(v,u),从而得到a’,然后更新θ’(v,u)=θ(v,u)-迭代速率α倍的a’。

  • 相关阅读:
    最近一月研报推荐次数最多的最热股票
    【2019年07月22日】A股最便宜的股票
    【07月19日】指数估值排名
    北上资金近1周流入排行榜
    主要股东近3年净买入排名
    【07月16日】A股滚动市净率PB历史新低排名
    【07月15日】A股滚动市盈率PE最低排名
    最近3年股息率最高排名
    主要股东近3年净买入排名
    【07月09日】预分红股息率最高排名
  • 原文地址:https://www.cnblogs.com/happylion/p/4219756.html
Copyright © 2011-2022 走看看