第十八节逻辑回归之交叉熵损失函数梯度求解过程(3)

上一节中,我们讲解了交叉熵损失函数的概念,目标是要找到使得损失函数最小的那组θ,也就是l(θ)最大,即预测出来的结果在训练集上全部正确的概率最大。那我们怎么样找到我们的最优解呢?上节中提出用梯度下降法求解,本节的话我们对其具体细节展开。

先来看下我们用梯度下降求解最优解,想要通过梯度下降优化L(θ)到最小值需要几步?

第一步,随机产生w,随机到0附近会比较好一点,w随机到0附近就意味着不管用L1还是L2正则的时候,可以使w的整体比较小。L1和L2正则同样可以用到逻辑回归里面去,来使得逻辑回归的损失函数obj相对比较小,然后使得我们模型具有推广能力和泛化能力。其实任何算法,都可以去使用L1和L2来提高模型的泛化能力,本质上就是减少模型的复杂度。所以以后未来碰到任何的算法,w在随机的过程当中,我们最好用期望为0的正态分布,来随机产生n+1个w。

第二步是求梯度,对于逻辑回归来说,如果用SGD求梯度,我们得用交叉熵的损失函数来得到它的导函数,然后才可以知道某一个值的时候它的梯度是多少。

第三步是

LASSO回归 10折交叉验证_损失函数

,它本质是一阶泰勒展开近似。

           第四步是判断收敛,其实就是第二第三步循环往复来执行。

四步里面第二步求解交叉熵损失函数的导函数求得其梯度是最关键的。我们对其展开来说。我们再来看下我们的目标函数:

                        

LASSO回归 10折交叉验证_人工智能_02

把负号提出来再加上1/m就是:

                       

LASSO回归 10折交叉验证_数据结构与算法_03

至于求导梯度时为什么要加-1/m,可以参考第六节梯度下降之从单元函数理解梯度下降过程(1)

我们要对损失函数里每个w求偏导,也就是对每一部分求偏导。w在pi里面,pi=1/(1+e-w^Tx),也可写成h(θ)x。上面可拆成左右两部分求导,先对左半部分yi*log pi求导,我们是对wj即(θj)求偏导,跟yi没关系,因为(lnx)'=1/x ,并且log pi是复合函数,需要对里外分别求导,即: 

                                                                                                                 

LASSO回归 10折交叉验证_LASSO回归 10折交叉验证_04

后半部分同理复合函数求导,

即 :            

                                                                              

LASSO回归 10折交叉验证_梯度下降_05

又因为

LASSO回归 10折交叉验证_梯度下降_06

求导结果为

。而p(xi;w) 实际上就是关于θ的函数,可以写成h(θ)x。所以                                                                                                

LASSO回归 10折交叉验证_LASSO回归 10折交叉验证_07

左右两部分求导结合起来后损失函数表示成:

                                                                                                  

LASSO回归 10折交叉验证_LASSO回归 10折交叉验证_08

hθ(x)=1/(1+e-θ^Tx),是关于θ^Tx的Sigmoid函数.所以可以用g(θTx)表示,所以损失函数推导部分又可以写成:

                                                                                                    

LASSO回归 10折交叉验证_梯度下降_09

又因为(1/x)'=-1/x2,(ex)'= ex,(-z)'=-1,所以

LASSO回归 10折交叉验证_梯度下降_10

实际上展开就是:                                                                                                              

LASSO回归 10折交叉验证_梯度下降_11

好吧看到这是不是很晕眩,实际上耐心下来,跟着我的思路去走,就会很好理解上面的公式。我们继续吧,很快就结束了,也快大功告成了。我们对

LASSO回归 10折交叉验证_梯度下降_10

上面展开后的公式继续展开,整理即:                                                                                                               

LASSO回归 10折交叉验证_梯度下降_13

因为z就是θTx,hθ(x)=1/(1+e-θ^Tx)是关于θ^Tx的Sigmoid函数.同样可以用g(θTx)表示。所以上面

LASSO回归 10折交叉验证_梯度下降_10

展开后的公式最后可以表示成:

 

                                                                                                                 

LASSO回归 10折交叉验证_损失函数_15

所以损失函数可以推导成:

                                                                                                              

LASSO回归 10折交叉验证_数据结构与算法_16

而θTx就是θ1x1+θ2x2+……+θjxj+……+θnxn,如果对θj求偏导,只剩xj。即

LASSO回归 10折交叉验证_LASSO回归 10折交叉验证_17

xij这种表达方式大家应该已经习惯了,因为i代表第i行,j代表第j列,因为损失函数前面有一个加和符号,所以它实际上还是每一行的事。接下来就是把损失函数式子拆开,正负相消即:

                                                                                                            

LASSO回归 10折交叉验证_人工智能_18

最后一步是把前面的负号放进去得到的。到此我们推导成功,擦擦汗,真不容易!!!。它就是逻辑回归的导函数,你会发现它推导之后和mse的导函数是一样的,都是(hθ(x)-y)*xj这种形式。只不过在多元线性回归的时候,hθ(x)是wTx,在逻辑回归里面,hθ(x)是1/(1+e-θTx)。hθ(x)不一样,但是整体形式一样。所以这也是它叫逻辑回归的一个很大原因。

有了逻辑回归损失函数推出来的导函数,我们用梯度下降求解的时候,我们就可以把第三步中的

LASSO回归 10折交叉验证_梯度下降_19

这一部分算出来了。只要给我一组w,或者θ,w0一直到wn。有了θ,x,y,xj,我就可以把导数求出来。有了导数,继而求得梯度。然后就可以用梯度下降公式去求解了。

下一节中我们讲解逻辑回归的优化。