第十八節邏輯迴歸之交叉熵損失函數梯度求解過程(3)算法
上一節中,咱們講解了交叉熵損失函數的概念,目標是要找到使得損失函數最小的那組θ,也就是l(θ)最大,即預測出來的結果在訓練集上所有正確的機率最大。那咱們怎麼樣找到咱們的最優解呢?上節中提出用梯度降低法求解,本節的話咱們對其具體細節展開。函數
先來看下咱們用梯度降低求解最優解,想要經過梯度降低優化L(θ)到最小值須要幾步?優化
第一步,隨機產生w,隨機到0附近會比較好一點,w隨機到0附近就意味着無論用L1仍是L2正則的時候,可使w的總體比較小。L1和L2正則一樣能夠用到邏輯迴歸裏面去,來使得邏輯迴歸的損失函數obj相對比較小,而後使得咱們模型具備推廣能力和泛化能力。其實任何算法,均可以去使用L1和L2來提升模型的泛化能力,本質上就是減小模型的複雜度。因此之後將來碰到任何的算法,w在隨機的過程中,咱們最好用指望爲0的正態分佈,來隨機產生n+1個w。spa
第二步是求梯度,對於邏輯迴歸來講,若是用SGD求梯度,咱們得用交叉熵的損失函數來獲得它的導函數,而後才能夠知道某一個值的時候它的梯度是多少。.net
第三步是,它本質是一階泰勒展開近似。3d
第四步是判斷收斂,其實就是第二第三步循環往復來執行。code
四步裏面第二步求解交叉熵損失函數的導函數求得其梯度是最關鍵的。咱們對其展開來講。咱們再來看下咱們的目標函數:blog
把負號提出來再加上1/m就是:get
至於求導梯度時爲何要加-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是複合函數,須要對裏外分別求導,即:
後半部分同理複合函數求導,
即 :
又由於求導結果爲。而p(xi;w) 實際上就是關於θ的函數,能夠寫成h(θ)x。因此
左右兩部分求導結合起來後損失函數表示成:
hθ(x)=1/(1+e-θ^Tx),是關於θ^Tx的Sigmoid函數.因此能夠用g(θTx)表示,因此損失函數推導部分又能夠寫成:
又由於(1/x)'=-1/x2,(ex)'= ex,(-z)'=-1,因此實際上展開就是:
好吧看到這是否是很暈眩,實際上耐心下來,跟着個人思路去走,就會很好理解上面的公式。咱們繼續吧,很快就結束了,也快大功告成了。咱們對上面展開後的公式繼續展開,整理即:
由於z就是θTx,hθ(x)=1/(1+e-θ^Tx)是關於θ^Tx的Sigmoid函數.一樣能夠用g(θTx)表示。因此上面展開後的公式最後能夠表示成:
因此損失函數能夠推導成:
而θTx就是θ1x1+θ2x2+……+θjxj+……+θnxn,若是對θj求偏導,只剩xj。即 。
xij這種表達方式你們應該已經習慣了,由於i表明第i行,j表明第j列,由於損失函數前面有一個加和符號,因此它實際上仍是每一行的事。接下來就是把損失函數式子拆開,正負相消即:
最後一步是把前面的負號放進去獲得的。到此咱們推導成功,擦擦汗,真不容易!!!。它就是邏輯迴歸的導函數,你會發現它推導以後和mse的導函數是同樣的,都是(hθ(x)-y)*xj這種形式。只不過在多元線性迴歸的時候,hθ(x)是wTx,在邏輯迴歸裏面,hθ(x)是1/(1+e-θTx)。hθ(x)不同,可是總體形式同樣。因此這也是它叫邏輯迴歸的一個很大緣由。
有了邏輯迴歸損失函數推出來的導函數,咱們用梯度降低求解的時候,咱們就能夠把第三步中的這一部分算出來了。只要給我一組w,或者θ,w0一直到wn。有了θ,x,y,xj,我就能夠把導數求出來。有了導數,繼而求得梯度。而後就能夠用梯度降低公式去求解了。
下一節中咱們講解邏輯迴歸的優化。