大白话5分钟带你走进人工智能-第十八节逻辑回归之交叉熵损失函数梯度求解过程(3)

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

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

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

第一步,随机产生w,随机到0附近会比较好一点,w随机到0附近就意味着无论用L1仍是L2正则的时候,可使w的总体比较小。L1和L2正则一样能够用到逻辑回归里面去,来使得逻辑回归的损失函数obj相对比较小,而后使得咱们模型具备推广能力和泛化能力。其实任何算法,均可以去使用L1和L2来提升模型的泛化能力,本质上就是减小模型的复杂度。因此之后将来碰到任何的算法,w在随机的过程中,咱们最好用指望为0的正态分布,来随机产生n+1个w。spa

第二步是求梯度,对于逻辑回归来讲,若是用SGD求梯度,咱们得用交叉熵的损失函数来获得它的导函数,而后才能够知道某一个值的时候它的梯度是多少。.net

第三步是w k+1=w k+\lambda *-\frac{\partial L(W k)}{\partial(w k)},它本质是一阶泰勒展开近似。3d

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

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

                         $J_{\log }(w)=\sum_{i=1}^{m}-y_{i} \log \left(p\left(x_{i} ; w\right)\right)-\left(1-y_{i}\right) \log \left(1-p\left(x_{i} ; w\right)\right)$

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

                        $J_{\log }(w)=-\sum_{i=1}^{m}y_{i} \log \left(p\left(x_{i} ; w\right)\right)+\left(1-y_{i}\right) \log \left(1-p\left(x_{i} ; w\right)\right)$

至于求导梯度时为何要加-1/m,能够参考第六节梯度降低之从单元函数理解梯度降低过程(1)ast

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

                                                                                                                  y_{i} \left(\log p_{i}\right)^{\prime}=y_{i} \frac{1}{p_{i}} p_{i}^{\prime}=y_{i} \frac{1}{h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)

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

即 :            

                                                                               (\left(1-y_{i}\right) \log \left(1-p\left(x_{i} ; w\right)\right))^{\prime}=\left(1-y_{i}\right) (\log \left(1-p\left(x_{i} ; w\right)\right))^{\prime}=$$\left(1-y_{i}\right)\frac{1}{\left(1-p\left(x_{i} ; w\right)\right))} \left(1-p\left(x_{i} ; w\right)\right)^{\prime}

又由于\left(1-p\left(x_{i} ; w\right)\right)^{\prime}求导结果为\left(1-p\left(x_{i} ; w\right)\right)^{\prime}=-p\left(x_{i} ; w\right)\right)^{\prime}。而p(xi;w) 实际上就是关于θ的函数,能够写成h(θ)x。因此

                                                                                                 $$\left(1-y_{i}\right)\frac{1}{\left(1-p\left(x_{i} ; w\right)\right))} \left(1-p\left(x_{i} ; w\right)\right)^{\prime}=-\left(1-y_{i}\right) \frac{1}{1-h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)

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

                                                                                                   \frac{\delta}{\delta_{\theta_{j}}} J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)-\left(1-y_{i}\right) \frac{1}{1-h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)\right)

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

                                                                                                     \frac{\delta}{\delta_{\theta_{j}}} J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{g\left(\theta^{T} x_{i}\right)}-\left(1-y_{i}\right) \frac{1}{1-g\left(\theta^{T} x_{i}\right)}\right) \frac{\delta}{\delta_{\theta_{j}}} g\left(\theta^{T} x_{i}\right)

又由于(1/x)'=-1/x2,(ex)'= ex,(-z)'=-1,因此\frac{\delta}{\delta_{\theta_{j}}} g\left(\theta^{T} x_{i}\right)实际上展开就是:

                                                                                                               \begin{aligned} \\ & \left(\frac{1}{1+e^{-z}}\right)^{\prime}\\ &=-\frac{1}{(1+e^{-z})^{2}}*(1+e^{-z})^{\prime} \\ &=-\frac{1}{(1+e^{-z})^{2}}*(e^{-z})^{\prime}\\ &=-\frac{1}{(1+e^{-z})^{2}}*(e^{-z})*(-z)^{\prime}\\ &=\frac{1}{(1+e^{-z})^{2}}*(e^{-z})*(z)^{\prime}\end{aligned}

好吧看到这是否是很晕眩,实际上耐心下来,跟着个人思路去走,就会很好理解上面的公式。咱们继续吧,很快就结束了,也快大功告成了。咱们对\frac{\delta}{\delta_{\theta_{j}}} g\left(\theta^{T} x_{i}\right)上面展开后的公式继续展开,整理即:

                                                                                                                \begin{aligned} \\ & \frac{1}{(1+e^{-z})^{2}}*(e^{-z})*(z)^{\prime}\\ &=\frac{1}{1+e^{-z}}*\frac{e^{-z}}{1+e^{-z}}*(z)^{\prime} \\ &=\frac{1}{1+e^{-z}}*(\frac{1+e^{-z}}{1+ e^{-z}}-\frac{1}{1+e^{-z}})*(z)^{\prime}\end{aligned}

由于z就是θTx,hθ(x)=1/(1+e-θ^Tx)是关于θ^Tx的Sigmoid函数.一样能够用g(θTx)表示。因此上面\frac{\delta}{\delta_{\theta_{j}}} g\left(\theta^{T} x_{i}\right)展开后的公式最后能够表示成:

 

                                                                                                                  \begin{aligned} \\ &\frac{1}{1+e^{-z}}*(\frac{1+e^{-z}}{1+ e^{-z}}-\frac{1}{1+e^{-z}})*(z)^{\prime} \\ &\\ &=g\left(\theta^{T} x_{i}\right)\left(1-g\left(\theta^{T} x_{i}\right)\right) \frac{\delta}{\delta_{\theta_{j}}} \theta^{T} x_{i}\end{aligned}

因此损失函数能够推导成:

                                                                                                               \begin{aligned} &\frac{\delta}{\delta_{\theta_{j}}} J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)-\left(1-y_{i}\right) \frac{1}{1-h_{\theta}\left(x_{i}\right)} \frac{\delta}{\delta_{\theta_{j}}} h_{\theta}\left(x_{i}\right)\right)\\ &\\ & \qquad \quad=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{g\left(\theta^{T} x_{i}\right)}-\left(1-y_{i}\right) \frac{1}{1-g\left(\theta^{T} x_{i}\right)}\right) \frac{\delta}{\delta_{\theta_{j}}} g\left(\theta^{T} x_{i}\right)\\ &\\ & \qquad \quad=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{g\left(\theta^{T} x_{i}\right)}-\left(1-y_{i}\right) \frac{1}{1-g\left(\theta^{T} x_{i}\right)}\right) g\left(\theta^{T} x_{i}\right)\left(1-g\left(\theta^{T} x_{i}\right)\right) \frac{\delta}{\delta_{\theta_{j}}} \theta^{T} x_{i}\end{aligned}

而θTx就是θ1x1+θ2x2+……+θjxj+……+θnxn,若是对θj求偏导,只剩xj。即 \frac{\delta}{\delta_{\theta_{j}}} \theta^{T} x_{i}=x_{i}^{j}

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

                                                                                                             \begin{aligned} &\frac{\delta}{\delta_{\theta_{j}}} J(\theta)=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i} \frac{1}{g\left(\theta^{T} x_{i}\right)}-\left(1-y_{i}\right) \frac{1}{1-g\left(\theta^{T} x_{i}\right)}\right) g\left(\theta^{T} x_{i}\right)\left(1-g\left(\theta^{T} x_{i}\right)\right) \frac{\delta}{\delta_{\theta_{j}}} \theta^{T} x_{i}\\ &\\ & \qquad \quad=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i}\left(1-g\left(\theta^{T} x_{i}\right)\right)-\left(1-y_{i}\right) g\left(\theta^{T} x_{i}\right)\right) x_{i}^{j}\\ &\\ & \qquad \quad=-\frac{1}{m} \sum_{i=1}^{m}\left(y_{i}-g\left(\theta^{T} x_{i}\right)\right) x_{i}^{j}\\ &\\ & \qquad \quad=\frac{1}{m} \sum_{i=1}^{m}\left(h_{\theta}\left(x_{i}\right)-y_{i}\right) ) x_{i}^{j}\end{aligned}

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

有了逻辑回归损失函数推出来的导函数,咱们用梯度降低求解的时候,咱们就能够把第三步中的-\frac{\partial L(W k)}{\partial(w k)}这一部分算出来了。只要给我一组w,或者θ,w0一直到wn。有了θ,x,y,xj,我就能够把导数求出来。有了导数,继而求得梯度。而后就能够用梯度降低公式去求解了。

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

相关文章
相关标签/搜索