第十七節邏輯迴歸之交叉熵損失函數概念(2)html
上一節中咱們講解了邏輯迴歸是作分類的緣由,本節的話咱們講解邏輯迴歸的損失函數-交叉熵損失函數。邏輯迴歸,是要作分類的,最重要的是要去分界,這個邏輯迴歸它是怎麼找分界?首先它有迴歸兩個字,咱們能夠轉成另外兩個字,擬合。因此邏輯迴歸找分界,它首先乾的事情是擬合原有的數據,而後再來找分界,怎麼找?算法
若是知道已知的數據點,用曲線來進行擬合,以後找到某一個位置能夠對原有的0和1類別,兩類數據進行一個很好的分開。固然線性迴歸也能夠來分類,經過迴歸找到一個分界點X,小於分界點的X屬於某個類別,大於分界點的X屬於另外一個類別。爲何分類必定要找這個點?由於作分類的目標是要訓練出一個模型,而後根據這個模型,咱們把將來新的數據xnew帶進來,它能夠給咱們一個預算結果ŷ,一個分類號,對於二分類來講,它必須得給一個0類別號或者1類別號。因此要根據分界點把每一個數據區分開。咱們怎麼找到一個很好的分界點?由於y= θ^T*X,它的結果是負無窮到正無窮之間,所以Y=0零是比較合適的一個分界點。假如咱們讓y= θ^T*X的負無窮到正無窮之間的值縮放到0到1之間,讓每一個值都具備一個機率的含義,越接近零就說這件事情發生的機率越低越小,越接近1就說明這件事情發生的機率就越大。這時候再找一個分界點區分開以前的數據,能夠天然而然的想到 是0.5,0.5是50%,就是說它屬於負例的機率是50%,它屬於正例的機率也是50%。因此咱們就能夠找0到1之間的0.5來做爲分界點。 實際上這就是邏輯迴歸的設想。app
邏輯迴歸它給出這樣一個縮放的函數,知足最後縮放的區間是0到1之間,而且在咱們本來y= θ^T*X的這個位置,知足縮放後的位置恰好是對應0.5才合適。因此sigmoid函數,自己是一個S曲線的意思,S型的曲線有無窮無盡種,你能夠找不少S曲線,這裏選用的S曲線特色是:機器學習
你會發現,若是θ^T*X=0的話,f(x)的值恰好等於1/(1+1)=1/2=0.5。因此對f(x)來講就以0.5做爲一個分界。也就是說若是咱們要去作分類的話,所計算出來的θ^T*X>0是正例,θ^T*X<0是負例。帶到sigmoid函數裏面去,f(x)就是y軸,算出的y軸,所對應的值就是大於0.5是正例,小於0.5是負例。所以咱們的目標是找到y是0.5的狀況下所對應的x是多少,這樣咱們就能夠用x或者用縮放完以後的y=0.5來做爲分界點,對將來數據進行分類,一個是X軸上的維度,一個是y軸上的維度。函數
咱們再結合圖形來看下對應的函數:學習
S曲線其實是y=1/(1+e-θTx),x,y,e,1都是已知的,惟獨只有θ須要去計算,因此算出來的θ參數就是咱們的模型,因此這個模型就是去找一組θ,使得θ^T*X縮放以後對應的S曲線儘量經過咱們已有的全部的點。儘量是人類語言的描述,咱們就要把儘量的給它變成公式,變成數字的表達,而後讓計算機去算,讓它儘量的偏差最小的時候。url
總結下咱們的目標就是:構造一個函數更好地解決二分類問題,而且使得這個函數輸出一個 (0,1) 的實數表明機率。經過上面的結論,咱們知道這個函數比較好的是sigmoid函數,即:spa
這裏面的Z=w^T*X。若是咱們把w^Tx當作一個總體Z ,f(x)就是關於Z的函數,咱們定義爲g(z),它給出的結果是0到1之間的一個值,咱們說若是它小於0.5表明負例,若是大於0.5,它表明正例。即 g(z) <0.5 時, 判斷y=0。g(z)>=0.5時, 判斷y=1。好比某條數據帶到這個公式裏,而後它給出一個ŷ值,這條ŷ數據具體值含義是,它是1類別的機率有多大。好比最後算出來的值是0.85,0.85是大於0.5,那就意味着這條數據它是1這個類別是正例的機率是85%。若是另一個x new傳進來獲得的結果是0.05,首先0.05小於0.5,因此確定給它分到0這個類別,它就意味着它是1這個類別的機率是0.05,相反它是0類別的機率就是1-0.05,就是0.95。因此實際上得出的ŷ值它表明是該條數據是1這個位置的機率是多少,這是它的實質。3d
咱們再來解剖下z的圖像的含義:g(z) = 0.5 時 ,W^T*X = 0 在二維平面下是一條直線。若是是一維的狀況下,只有一個軸,找到一個點將數據分開,若是有兩個維度,x1,x2,對應一個平面,咱們要找到一條直線把它分開。好比下圖:code
紅色和綠色是已知的數據點,是不一樣的類別,當wTx=0的話,就意味着w1*x1+w2*x2+b=0,正好是圖中的分界線,將數據分割了兩個類別。由於這個地方帶有截距,因此沒有穿過原心點。直線左側的x經過計算會讓g(z)<5,也就是說這裏面紅顏色的就是小於0.5的負例,綠顏色就是大於0.5的正例。這個東西很簡單,以前說的一維狀況下,就把小於0的設爲負例。
因此看起來咱們找到了分類的方法,那麼如何肯定g(z)?實際上肯定了一組w, 就肯定了 z,由於Z=w^T*X,肯定了z 就肯定了 g(z) 的輸出。這裏的g(z) 也能夠寫成 g(w,x),表明每條樣本所對應的輸出。它應該有如下特色,首先值是0到1之間,有機率含義;其次這個機率的含義就是在已知w和x的狀況下,它是1類別的機率是多少。咱們轉化成數學形式的表達就是:以w.x爲條件,它的y是1的機率。即:
P(y=1|w,x),天然而然以w.x爲條件,它的y是0的機率,即P(y=0|w,x)=1- g(z),是相反的。
因此咱們的指望是找到一組w使得已有的數據x爲已知的條件下,你預測出來的ŷ發生的機率最大,也就是但願預測出來的ŷ和手頭上已經拿到的y一致。什麼是不一致,什麼是偏差?ŷ-y是誤差,偏差。對於分類來講,真實的y要麼是0,要麼就是1。對於ŷ來講,它是一個0到1之間的一個值。若是它真實是1類別,咱們的ŷ計算出來結果又正好是1.0,百分之一百準確。若是咱們真實類別是1,計算出來是個0.2,這個偏差就是0.8。若是你真實的類別是0,你計算出來是0.2,那這個誤差就是0.2。由於它最完美的狀況就是0這個類別機率就是0,1這個類別機率就是1.所以咱們指望就是隻要讓咱們的g(w,x)函數在訓練集上預測正確的機率最大,個人g(w,x)就是好的g(w,x)。
舉個例子,好比下面的數據集:
x1,x2,x3,x4分別表明不一樣的維度,y就是真實的y類別號。咱們要求的結果是每一個維度所對應的模型w。而咱們預測正確的機率,就是ŷ=1/(1+e-θ^T*x),即g(w,x)。它是1類別的機率是g(w,x),它是0類別的機率就是1- g(w,x)。咱們結合最大似然的思想。回顧前面咱們所學的知識最大似然的總似然是怎麼求的?就是要獲得每條樣本的機率相乘。而當咱們求出一組模型來的話,此時的總似然就是咱們對應這個模型下每個樣本的機率相乘,而每個樣本此時的機率就是咱們預測正確的機率值。咱們最大似然的前提是假設這裏面的每條樣本它是隨機而且獨立的從全部的樣本里面採樣的這一部分,因此假如咱們的訓練集裏面就這五條數據,而且每條樣本之間相對獨立。對於咱們這五條樣原本說,這裏面總的MLE(最大似然)就是第一條樣本乘以這組w,而後再帶到Sigmoid函數裏面去獲得g(w*x1),這個X1,表明第一條樣本,第二個就是g(w*x2),X2表明第二條樣本,第三個就是g(w*x3),第四條是1-g(w*x4),第五條樣本是1-g(w*x5),連續相乘,獲得總似然。即:MLE=g(w*x1)*g(w*x2)*g(w*x3)*1-g(w*x4)*1-g(w*x5)。這裏面的x1,x2,x3,x3,x5分別表明每一行樣本。簡化一下就是:
咱們只因此將樣本預測出來的機率寫成g(w,xi)或者是1-g(w,xi),是由於咱們看了一眼真實的y=1,才把它寫成g(w,xi),看了一眼真實的 y=0給它寫成1-g(w,xi)。即:
若是要沒看y是1仍是0,來表達一個形式的話,那就是下面泛化的形式,它均可以來表達這兩種狀況。對於每一條數據預測正確的機率即:
假設這條樣本,它的lable標籤y是1,放到公式中,1-yi=0,後面一部分是1,剩下就是g(w,xi)。若是yi=0的話,前面這部分就是1,後面這部分是1-g(w,xi)。因此說這種形式是不看yi是1,0的狀況下,就能夠知道機率如何來經過公式來描述和表達。 若是咱們有n條樣本,要作一個總似然,要把全部條樣本的機率相乘.即:
由於假設獨立了。因此用一個連乘符號∏,從第1條樣本一直乘到n條樣本。pi就是上面的單個預測正確的式子。咱們獲得了一個總似然的式子,記P(所有正確) 爲 L(θ),這裏的θ爲以前的w,記g(w,xi)爲h(θ),即:
它的連乘能夠經過log,ln變一下。實際上就是L(θ),大寫的L,而後取個對數,把它變成l(θ),小寫的l。即:
解釋下上面公式:由於log(a*b)=log a+log b,因此從第一個公式化簡到第二個公式,因此L(θ),把它變成對數形式l(θ),連乘就變成連加,從第1條加到第m條。又log x^2=2log x,因此從第二條化簡爲第3條公式,即化簡爲上面公式。
咱們要使得總體似然函數最大,而此時這樣一個公式,就成爲咱們的目標函數。可是搞機器學習的人喜歡去把它換個名稱叫損失函數,通常提到損失函數咱們都是要找最小。這件事情很簡單,若是要找它的最大,就至關於在前面添個-,找添上-以後的總體最小。 因此邏輯迴歸的損失函數就推導出來了。
因此簡單概括起來就是首先要根據y的真實狀況的機率表達,推導出比較泛化的對每條樣本的機率表達,而後咱們再來一個總似然的機率表達,而後把這些東西帶進來,就獲得L(θ),而後接着取對數,獲得l(θ),最後人爲的加一個負號,這就是損失函數。邏輯迴歸比mse要簡單的多。
它有什麼含義呢?它是從最大似然理論推出來的,一般前面加一個負號。即:
咱們會稱爲交叉熵。因此不少時候一提到分類,就會提到交叉熵損失函數。這個就是邏輯迴歸裏面的損失函數,它前面是一個負號,因此咱們必定要找到交叉熵最小的狀況。
熵是什麼意思? 高壓鍋在熵特別大的時候它會爆炸,由於熵從物理上來講,它表明分子的不肯定性。分子越不肯定,它就亂撞,在高壓鍋裏面亂碰亂撞,總之它表明是不肯定性。不肯定性越大,就表明熵越大。這個含義也被引入到了信息論裏面去,熵越大,就表明了所包含的信息量越大。
熵越大是件好事仍是件壞事?要是研究原子彈,確定越大越好。放到機器學習裏面,熵越小越好,由於我們但願它是有規律的,是肯定性的。因此機率越大,熵就越小。好比說這我的它註定是你一身的伴侶,註定的狀況下,就意味着這件事情機率特別大,不肯定性相反就會變小,不肯定性變小就是熵變小。因此機率越大,不肯定性越小,熵越小。機率越小,不肯定性越大,熵越大。
咱們如今找的就是熵越小的狀況下,機率越大,機率越大就越能說明已知的x根據咱們的某組w,它就越肯定最後的結果是真實y,咱們要使得這個機率最大。這個是它的本質。
咱們看下熵和機率的圖示關係:
橫軸是機率probability,縱軸是熵 entropy。機率最大是1.0,熵沒有盡頭,機率越大,熵就越小,好比說機率達到1.0的時候,熵就是0。機率越小,熵就越大,越趨於正無窮。它是一個帶拐彎的曲線。對比log函數單調遞增,若是咱們反方向畫出log函數,熵的圖像相似反方向的log函數。
再來看下咱們的損失函數:
左邊一部分是yi=1的狀況,右邊一部分是yi=0的狀況,其中log hθ(xi)是咱們預測的ŷ,前面y^(i)是咱們真實的樣本類別,因此yi*log pi,它是交叉熵的公式核心的一部分。若是類比多個分類(k個分類,m個樣本),能夠天然而然推導出目標函數l(θ)公式應該是,0到k個類別各自的yi*log pi累加,而後再從樣本1到m加和,實際上這個就是softmax迴歸的損失函數,即交叉熵,Cross Entropy,公式是:
事實上全部的分類,它的損失函數都是交叉熵。只不過邏輯迴歸裏面的pi是根據Sigmoid函數1/(1+e-z)算出來的。若是有人發明了另一種算法,算出來以後機率不是用這樣的公式,無非用交叉熵的時候,hθ(x)的形式變了而已。其實前面推出交叉熵公式的時候,也並無涉及到前面說的Sigmoid函數,因此它的推導跟Sigmoid函數沒有關係。只不過邏輯迴歸的損失函數在算hθ(x)的時候用了Sigmoid函數。若是是其它算法,那就得用其它算法的公式來算機率。
總結下定義損失函數的步驟:由於要使得l(θ ) 最大的θ 生產出來的 g(θ,x) 全預測對的機率最大,但損失函數是要求某個函數結果越小 生成的模型越好,因此咱們定義 - l(θ )爲邏輯迴歸的損失函數,即:
問題轉化爲 找到一組使損失函數最小的w,下一步就能夠用前面講過的梯度降低最小化這樣一個公式,而後找到w在什麼狀況下,使得損失函數最小。下一節中咱們對具體交叉熵損失函數怎麼求解進行展開。