第十八節邏輯迴歸之交叉熵損失函式梯度求解過程(3)
上一節中,我們講解了交叉熵損失函式的概念,目標是要找到使得損失函式最小的那組θ,也就是l(θ)最大,即預測出來的結果在訓練集上全部正確的概率最大。那我們怎麼樣找到我們的最優解呢?上節中提出用梯度下降法求解,本節的話我們對其具體細節展開。
先來看下我們用梯度下降求解最優解,想要通過梯度下降優化L(θ)到最小值需要幾步?
第一步,隨機產生w,隨機到0附近會比較好一點,w隨機到0附近就意味著不管用L1還是L2正則的時候,可以使w的整體比較小。L1和L2正則同樣可以用到邏輯迴歸裡面去,來使得邏輯迴歸的損失函式obj相對比較小,然後使得我們模型具有推廣能力和泛化能力。其實任何演算法,都可以去使用L1和L2來提高模型的泛化能力,本質上就是減少模型的複雜度。所以以後未來碰到任何的演算法,w在隨機的過程當中,我們最好用期望為0的正態分佈,來隨機產生n+1個w。
第二步是求梯度,對於邏輯迴歸來說,如果用SGD求梯度,我們得用交叉熵的損失函式來得到它的導函式,然後才可以知道某一個值的時候它的梯度是多少。
第三步是,它本質是一階泰勒展開近似。
第四步是判斷收斂,其實就是第二第三步迴圈往復來執行。
四步裡面第二步求解交叉熵損失函式的導函式求得其梯度是最關鍵的。我們對其展開來說。我們再來看下我們的目標函式:
把負號提出來再加上1/m就是:
至於求導梯度時為什麼要加-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是複合函式,需要對裡外分別求導,即:
後半部分同理複合函式求導,
即 :
又因為求導結果為。而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,我就可以把導數求出來。有了導數,繼而求得梯度。然後就可以用梯度下降公式去求解了。
下一節中我們講解邏輯迴歸的優化。