被掰彎的線性函數,海王一樣的logstic

目錄


1、直男 線性迴歸
2、海王logistic,被掰彎的線性迴歸
3、海王征服的妹子
3.1 Word2Vector
3.2 XGBoost
3.3 深度學習中的sigmod


摘要

本文將要講述的內容是多個機器學習方法推導的一些共通之處,雖涉及到算法的推導,但還是希望能儘量輕鬆愉快的講解,並且能夠幫助大家,將這幾個算法的推導,更加系統化的理解。

本文主要將要講到的幾個機器學習的方法包括線性迴歸、logstic迴歸、XGBoost、Word2Vector以及深度學習等一系列方法的推導以及他們在推導中的共通之處。可能這裏提到的內容,很多大神都有提到過,沒有關係,可以再次溫習一下。

1、直男 線性迴歸

以前學習的時候,就有大神跟我說過,機器學習,得線性着得天下,現在想來,機器學習就是線性到非線性的過程,線性學好了,從線性到非線性的演變自然就能通了。線性與非線性的概念,這裏簡單的介紹下:在二維空間,能夠被一條直線分開的數據,叫線性可分,而這條直線就是線性函數,有意思的是,二維空間線性不可分的數據,在三維或更高維可能可以線性可分,從這一點說,線性與非線性貌似是維度的壓制。

線性迴歸,說的就是,不管多少維,用來學習的就是一個線性函數,函數爲:

F(X)=WTX+b F(X)= \mathbf{W^TX+b}

通俗的解釋下這個應用場景,比如說,有這樣一批數據,對於每一個數據,有mm個對房價的影響因素,寫成一個向量xix_i,然後經過調查,知道xix_i 情況下,房價就是 yiy_i 元。如果蒐集很nn組數據數據,也就是 i=1,2,3,...,ni=1, 2, 3, ..., n,得到D={(x1,y1),(x2,y2),...,(xn,yn)}D=\{(x_1, y_1), (x_2, y_2), ..., (x_n, y_n)\},寫成向量的形式 D={(X,Y)}D =\{(X, Y)\},其中X=(x1,x2,...,xn)X=(x_1, x_2, ..., x_n)Y=(y1,y2,y3,...,yn)Y=(y_1,y_2,y_3, ..., y_n),接下來簡單的說明求解過程。

根據最小錯誤準則,算法預測的數據與實際的數據之間的差距,應該約小越好,在進經典的線性迴歸中,使用的 loss function 是均方誤差:

L(W)=12(F(X)Y)2 L(W) = \frac{1}{2}(F(X)-Y)^2

很明顯,L(W)L(W) 爲凸函數,可以求導試試:

L(W)W=XTXWXTY \frac{\partial L(W)}{\partial W} = \mathbf{X^TXW-X^TY}

如果 XTXX^TX 的逆存在,就可以直接求得最優解:

W=(XTX)1XTY \mathbf{W} = \mathbf{(X^TX)^{-1}X^TY}

對於XTXX^TX不可逆的情況,可以使用梯度下降或加一個λI\lambda I向量來求解,其中0<λ<10< \lambda < 1II爲單位矩陣。如果有小夥伴對於線性迴歸感興趣,或者覺得以上講解過於簡單,沒有弄清楚,可以參照我的另外一篇博文機器學習:線性迴歸(Linear Regression)

2、海王logistic,被掰彎的線性迴歸

線性迴歸的推導過程,其實跟logistic迴歸的推導過程並不一樣,這也是在線性迴歸的時候,粗略帶過,直男的待遇,不是特別重視。但是,logistic迴歸就是基於它來的,每一個海王都有青澀的曾經,一定是受了挫折,預測和分類都不達標,只能改變自己,線性崛起,被迫掰彎自己,華麗轉身成logistic迴歸。

這裏用logistic來解決分類問題,模型訓練成功後,輸出給定樣本特徵及模型超參數的情況下,屬於某類別的概率。經典案例,二分類問題,如果事件AA發生的概率爲PAP_A,那麼事件AA不發生的概率就是1PA1-P_A,判斷的時候,可以用比
PA1PA \frac{P_A}{1-P_A}
這個公式是有名字的哦,它叫事件發生的機率(大概就是我們通俗的說,這個事情發生的機率挺大的“機率”),機率>1>1,認爲事件會發生,反之,認爲事件不發生。對機率取對數,得到lnPA1PAln\frac{P_A}{1-P_A}就是對數機率了,假設我們用線性模型來回歸對數機率的值爲
f(x)=wx+b=lnPA1PA f(x) =wx+b=ln \frac{P_A}{1-P_A}
求解可得
F(x)=PA=ef(x)1+ef(x)=11+ef(x)=11+e(wx+b) F(x)=P_A=\frac{e^{f(x)}}{1+e^{f(x)}}=\frac{1}{1+e^{-f(x)}}=\frac{1}{1+e^{-(wx+b)}}

看到這個公式,我們是不是很熟悉,對的,這就是logistic(概率分佈函數),也就是它把線性函數給掰彎了,上個圖展示下:

在這裏插入圖片描述

圖1. logistic分佈的概率密度函數和分佈函數

現在,需要求的是一個時間發生的概率,要學的參數還是線性函數中的w,bw,b,那是不是還是按照之前的最小錯誤率準則構造最小均方誤差的loss function呢?回答這個問題之前,先把問題定義清楚。假設有一堆事情,其表示爲(xi,yi)(x_i, y_i),其中i=1,2,3,...,ni=1, 2, 3, ..., nxix_i是一組判斷事件發生與否的已知因素,比如判斷一個程序員是否有女朋友的時候,可以總結這個小夥跟女生交流是否臉紅(小夥,都紅過吧),是否常洗澡換衣…, 假設已知因素很多,有mm個,然後yiy_i就表示該小夥有沒有女友的事實了,yi=1y_i=1表示有,yi=0y_i=0就是沒有。然後,經過某些有心人士的蒐集,就有了一批數據D=(X,Y)D=(X,Y),也就是說 上述的i=1,2,...,ni=1,2, ..., n,也就是X=(x1,x2,...,xn),Y=(y1,y2,...,yn)X=(x_1, x_2, ..., x_n), Y=(y_1, y_2, ..., y_n)
數據有了,如果用均方誤差函數,這loss function爲:
L(W)=12i=1n(F(xi)yi)2=12i=1n(11+e(wixi+b)yi)2 \begin{aligned} L(W) &= \frac{1}{2}\sum_{i=1}^{n}(F(x_i)-y_i)^2 \\ &= \frac{1}{2}\sum_{i=1}^{n}(\frac{1}{1+e^{-(w_ix_i+b)}}-y_i)^2 \end{aligned}

什麼都不說了,無腦求導唄

L(w)w=i=1n(F(xi)yi)(1F(xi))F(xi)(xi) \frac{\partial L(w)}{\partial w} = \sum_{i=1}^{n}{(F(x_i)-y_i)(1-F(x_i))F(x_i)(-x_i)}

假設某個事件發生 F(xi)F(x_i) = 1,該事件發生,則 1F(xi)=01-F(x_i)=0,最後求得L(w)w=0\frac{\partial L(w)}{\partial w} = 0,符合實際,離目標很近的時候,梯度爲00F(xi)=0F(x_i) = 0,這個時候離目標很遠,同樣求得L(w)w=0\frac{\partial L(w)}{\partial w} = 0,無法有優化了。

換個方向,既然是概率,那假設每個事件發生的概率互相不影響(獨立),每個事件都用的同一個分佈函數(同分布),對於樣本ii,取其對應標籤成立情況下的概率爲:
pi=F(xi)yi(1F(xi))(1yi) p_i = F(x_i)^{y_i}(1-F(x_i))^{(1-y_i)}

如果樣本yi=1y_i=1,說明事件發生,pi=F(xi)p_i=F(x_i);如果yi=0y_i=0,取的是pi=1F(xi)p_i=1-F(x_i)
所有樣本,不管是沒發生還是發生,每個樣本都正確的概率(極大似然)爲:
L(w)=i=1npi L(w)=\prod_{i=1}^{n}{p_i}

最大化這個函數,以達到所有的樣本都按照其特定的事實去發生(正樣本)與不發生(負樣本),就可以得到訓練的模型了。

對數似然爲:

l(w)=logL(w)=logi=1npi=i=1nyilogF(xi)+(1yi)log(1F(xi)) \begin{aligned} l(w) &= logL(w) \\ &= log\prod_{i=1}^{n}{p_i} \\ &= \sum_{i=1}^{n}{\lgroup y_ilogF(x_i)+(1-y_i)log(1-F(x_i))\rgroup} \end{aligned}

梯度的推導過程如下:

l(w)wj=i=1n(yiF(xi)1yi1F(xi))F(xi)wj=i=1nyiyiF(xi)F(xi)+yiF(xi)F(xi)(1F(xi))F(xi)(1F(xi))(xj)=i=1n(F(xi)yi)xj \begin{aligned} \frac{\partial l(w)}{\partial w_j} &= \sum_{i=1}^{n}{(\frac{y_i}{F(x_i)}-\frac{1-y_i}{1-F(x_i)})\frac{\partial F(x_i)}{\partial w_j}} \\ &=\sum_{i=1}^{n}{\frac{y_i-y_iF(x_i)-F(x_i)+y_iF(x_i)}{F(x_i)(1-F(x_i))}} F(x_i)(1-F(x_i))(-x_j) \\ &= \sum_{i=1}^{n}{(F(x_i)-y_i)x_j} \end{aligned}

logistic梯度有了,算法就可以根據訓練數據求解了。至此logistic迴歸,的講解就告一段落了,需要深度回味的少年可以看看這篇博文,機器學習:Logisitic迴歸

3、海王征服的妹子們

講完海王logistic自己的故事,現在可以說說海王的妹子們了,爲什麼說下面幾個是海王的妹子呢,賣個關子,且往下看。

3.1 Word2vec

此處主要的是想說與logistic函數相關的部分,但是爲了讓不同的人都知道word2vector大概幹了什麼事情,所以額外的介紹一點基本知識,然後快速進入到說明爲什麼說Word2vector是海王的妹子。

3.1.1 Word2vec簡單介紹

話說,最開始想做的事情並不是embedding(word2vector),想做的事情,類似於大家小學的時候,語文課常做的題,完形填空,也就是給定一個句子中的幾個詞,填寫你認爲最有可能的詞。就是這樣的一件事件,用算法怎麼做呢?
做法很多,各種機器學習方法都可以,但是這裏說到的是經典的三層神經網絡模型,如下圖所示:

在這裏插入圖片描述

圖中x1,x2,...,xVx_1, x_2, ..., x_V是詞經過one-hot形式向量,有VV個數輸入神經元,實際上就能處理VV個詞的情況。中間層有NN維,這裏N<VN<V,最後一層就是softmax層,維度也是VV,輸出的是填入每個詞的概率,期望是完形填空正確答案的詞概率最大。訓練好後,機器就會做完形填空了,是不是很厲害,最厲害的是得到的WV×NW_{V\times N},因爲之前的詞向量是one-hot形式,一個詞的向量與該矩陣相乘,就是把這個矩陣的某一行給拿出來,然後這個向量也就是後來我們使用的embedding後的詞向量。

3.1.2 基於Hierarchical Softmax的word2vec

是不是覺得這麼做就已經不錯了呀,是的,不過能問題也很明顯呀,現在知道VV是詞典的維度,那如果VV超級大呢,參數暴增,計算量大,還不好優化,這裏藉助了霍夫曼編碼構造的霍夫曼樹,構造Hierarchical Softmax

在這裏插入圖片描述
從圖中可以看到,輸出層葉子節點數還是VV,也就是詞典的維度,但是從n(w2,1)w2n(w_2, 1) \rightarrow w_2的路徑,不再需要計算所有的softmax,需要處理的是,在每個節點岔路口,決定是往左還是往右。如果往左是yi=1y_i=1,往右是yi=0y_i=0;基於logistic的二分類問題(這裏規定1是負類,0是正類,有點繞,但是先不管)。

參照logistic迴歸來,可以知道,正類概率:
P(+)=11+eθx P(+) = \frac{1}{1+e^{-\theta x}}
一次到葉子節點,需要走多步,並且每次都走對,才能到達目的地,則對於n(w2)n(w_2)來說,它走到w2w_2的需要走三步,概率是分別每一步概率的乘積,表示如下:
L(w2)=P(n(w2,1))×P(n(w2,2))×P(+n(w2,3)) L(w_2) = P(-|n(w_2, 1))\times P(-|n(w_2, 2))\times P(+|n(w_2, 3))
轉換一下
l(w2)=i=13P(+)(1yi)×P()yi l(w_2)=\prod_{i=1}^{3}{P(+)^{(1-y_i)}\times P(-)^{y_i}}

上面這個公式跟logistic的損失函數就很像了,繼續往下對於所有的訓練樣本,都正確的概率爲:
L(w)=i=1nl(wi) L(w)=\prod_{i=1}^{n}{l(w_i)}
這個就是最後要優化的目標函數,接下來定義一些符號,方便後續推導。輸入的詞爲ww,其從輸入層詞向量求和平均後的霍夫曼樹根節點詞向量爲xwx_w, 從根節點到ww所在的葉子節點,包含的節點總數爲lwl_w, ww在霍夫曼樹中從根節點開始,經過的第ii個節點表示爲piwp_i^w,對應的霍夫曼編碼爲diw{0,1}d_i^w \in \{0, 1\},其中i=2,3,...,lwi=2, 3, ..., l_w。而該節點對應的模型參數表示爲θiw\theta_i^w, 其中i=1,2,3,...,lw1i=1, 2, 3, ..., l_w-1,沒有i=lwi=l_w是因爲模型參數僅僅針對於霍夫曼樹的內部節點。

定義ww經過的霍夫曼樹某一個節點jj的邏輯迴歸概率爲P(djwxw,θj1w)P(d^w_j|x_w, \theta^w_{j-1}),其表達式爲,並且

P(djwxw,θj1w)={σ(θj1xw)djw=0,1σ(θj1xw)djw=1. P(d^w_j|x_w, \theta^w_{j-1})=\begin{cases} \sigma(\theta_{j-1}x_w) &d_j^w=0,\\ 1-\sigma(\theta_{j-1}x_w)& d_j^w=1. \end{cases}

L(w)L(w)展開後求導:
logL(w)=logi=1nl(wi)=logi=1nj=2lwσ(θj1xw)(1djw)×(1σ(θj1xw))djw=i=1nj=2lwl(w,j) \begin{aligned} logL(w) &= log\lgroup \prod_{i=1}^{n}{l(w_i)} \rgroup\\ &= log\lgroup\prod_{i=1}^{n}{\prod_{j=2}^{l_w}{\sigma(\theta_{j-1}x_w)^{(1-d_j^w)}\times (1-\sigma(\theta_{j-1}x_w))^{d_j^w}}}\rgroup \\ &=\sum_{i=1}^{n}{\sum_{j=2}^{l_w}{l(w,j)}} \end{aligned}
其中l(w,j)=σ(θj1xw)(1djw)+(1σ(θj1xw))djwl(w,j) = \sigma(\theta_{j-1}x_w)^{(1-d_j^w)} + (1-\sigma(\theta_{j-1}x_w))^{d_j^w},對l(w,j)l(w,j)求導有
l(w,j)θj1=1djwσ(θj1xw)djw1σ(θj1xw)σ(θj1xw)θj1=1djwσ(θj1xw)+djwσ(θj1xw)djwσ(θj1xw)σ(θj1xw)(1σ(θj1xw))σ(θj1xw)(1σ(θj1xw))xw=1djwσ(θj1xw)xw \begin{aligned} \frac{\partial l(w,j)}{\partial \theta_{j-1}}&=\lgroup\frac{1-d_j^w}{\sigma(\theta_{j-1}x_w)} -\frac{d_j^w}{1-\sigma(\theta_{j-1}x_w)}\rgroup\frac{\partial \sigma(\theta_{j-1}x_w)}{\partial\theta_{j-1}} \\ &=\frac{1-d_j^w-\sigma(\theta_{j-1}x_w)+d_j^w \sigma(\theta_{j-1}x_w)-d_j^w \sigma(\theta_{j-1}x_w)}{\sigma(\theta_{j-1}x_w)(1-\sigma(\theta_{j-1}x_w))}\sigma(\theta_{j-1}x_w)(1-\sigma(\theta_{j-1}x_w))x_w \\ &=\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup x_w \end{aligned}
對於一個訓練樣本則有梯度爲:j=2lw1djwσ(θj1xw)xw\sum_{j=2}^{l_w}{\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup x_w}

同樣的方法,可以得到xwx_w的更新爲:l(wi)xw=j=2lw1djwσ(θj1xw)θj1\frac{\partial l(w_i)}{\partial x_w}=\sum_{j=2}^{l_w}{\lgroup1-d_j^w-\sigma(\theta_{j-1}x_w)\rgroup \theta_{j-1}}

後續的跟新過程這裏就不詳細介紹了,有興趣的同學可以詳細研究下這個博文word2vec原理

從推導的過程中,不難看出,從基本原理和推導過程,具有很高的一致性,logistic全面浸入word2vec,他們兩個搞對象實錘。

3.2 Xgboost中的logistic和深度學習中的Sigmoid

如果說logistic跟word2vec是情侶的話,logistic跟XGboost以及logistic跟深度學習也就是一個曾經曖昧過。

3.2.1 XGboost中的logistic

Xgboost大家可能已經很熟悉了,基本原理的話就是多個弱模型的級聯,後一模型學習的是前一模型的殘差。對於Xgboost框架,其loss function可以是均方誤差函數,也可以是極大似然函數。本文關注的是其跟logistic的關聯性,這裏將要介紹是採用極大似然函數,目標函數是logistic的情況。

Xgboost的推導過程,這裏不詳細介紹,感興趣的同學可以看下這篇博文機器學習:XGBoost,這裏直接把結論拿出來使用,最終目標函數的形式爲:
L~(t)(q)=12j=1T(iIjgi)2iIjhi+λ+γT \tilde{L}^{(t)}(q)=-\frac{1}{2}\sum_{j=1}^{T}{\frac{(\sum_{i \in I_j}^{}{g_i})^2}{\sum_{i\in I_j }^{}{h_i+\lambda}}}+\gamma T
其中,TT爲葉子節點的個數,IjI_j爲葉子節點jj中的樣本集合,gig_i爲目標函數的一階導,hih_i爲目標函數的二階導,λ\lambdaγ\gamma分別用來平滑葉子節點權重弄和控制懲罰模型複雜度的。

上面函數是用來評價一個既定樹結構的好壞的,如果想要找到最優的樹結構,則需要窮舉數據結構並求每個數的得分,爲了減少計算,一般都採用貪心算法進行後續求解。這裏可以跟logistic掛鉤的地方就是一階導gig_i和二階導hih_i可以是通過logistic函數來求得,並且使用logistic的時候,其使用的極大似然函數是凸函數,可以二階泰勒來進行推導。所以,logistic估計只是曾經暗戀過XGboost而已。

3.2.2 深度學習中的Sigmoid

深度學習中,主要是激活函數,特別是分類時,最後通常會接一個softmax層。此處的單個sigmoid函數與logistic函數的形狀是一致的,如果深度學習最後輸出的softmax只有一個神經元,那麼loss function定義爲:
L(w)=i=1nF(xi)(yi)(1F(xi))(1yi) L(w)=\prod_{i=1}^{n}{F(x_i)^{(y_i)}(1-F(x_i))^{(1-y_i)}}
其中i=1,2,3,...,ni=1, 2, 3, ..., n是樣本數量,根上式求導,梯度下降,後續的梯度傳遞採用鏈式求導法則,求解只有一個輸出神經元的神經網絡是完全沒有問題的。

問題是輸出神經元的數目一般來說是有多個,對於多分類問題,在處理的時候,標籤轉換爲yi=(y1i,y2i,...,yci)y_i=(y^i_1,y^i_2, ..., y_c^i)向量, 其中
yij={1j=k,0jk. y_i^j=\begin{cases} 1 &j=k,\\ 0& j \neq k. \end{cases}
其中kk是樣本的類別。

對於多個神經元輸出的概率向量 y^i=(y^1i,y^2i,...,y^Ci)\hat{y}_i=(\hat{y}^i_1,\hat{y}^i_2, ..., \hat{y}_C^i), 取其發生的概率爲:
pj=yjTy^j=i=1Cyijy^ij p_j=y_j^T\hat{y}_j=\sum_{i=1}^{C}{y^j_i\hat{y}_i^j}
其中CC爲類別數,對於所有樣本都按照其觀測的情況一起發生的概率爲:
P=L(w)=i=1npi=i=1nyiTy^i P =L(w)= \prod_{i=1}^{n}{p_i}=\prod_{i=1}^{n}{y_i^T\hat{y}_i}
上述同樣是極大似然的思想,對其去對數有:
l(w)=logL(w)=j=1ni=1Cyijlog(y^ij) l(w) = -logL(w) = -\sum_{j=1}^{n}{\sum_{i=1}^{C}{}y_i^jlog(\hat{y}_i^j)}
對其求導,求梯度,按照鏈式求導法則反向傳遞,可求解深度學習網絡。

簡單的給出求導結果, 設l=i=1Cyilog(y^i)l=-\sum_{i=1}^{C}{}y_ilog(\hat{y}_i)

lzj=ly^iy^izj \frac{\partial l}{\partial z_j} =\frac{ \partial l}{\partial \hat{y}_i}\frac{\partial \hat{y}_i}{\partial z_j}

ly^i=i=1Cyiy^i \frac{ \partial l}{\partial \hat{y}_i}=-\sum_{i=1}^{C}{\frac{y_i}{\hat{y}_i}}

y^izj={y^j(1y^j)j=i,y^iy^jji. \frac{ \partial \hat{y}_i}{\partial z_j}=\begin{cases} \hat{y}_j(1-\hat{y}_j) &j=i,\\ -\hat{y}_i\hat{y}_j& j \neq i. \end{cases}

lzj=yiy^iy^i(1y^i)+ijyiy^iy^iy^j=y^iyi \frac{\partial l}{\partial z_j} =-\frac{y_i}{\hat{y}_i}\hat{y}_i(1-\hat{y}_i)+\sum_{i \neq j}{\frac{y_i}{\hat{y}_i}\hat{y}_i\hat{y}_j}=\hat{y}_i-y_i

深度學習中間的激活函數,目前來說有很多的可選項,包括Relu、tanh等;這些暫且不談,按照本文上述過程來看,logistic跟深度學習淵源還是頗深的,至少曾經相互喜歡過。

4、總結

本文從傳統機器學習線性模型出發,講述了線性模型掰彎後變爲logistic模型。在此基礎上,通俗的說明了線性模型的求解過程、詳細的描述了logistic迴歸的求解過程。從logistic函數及極大似然的角度,總結了具有雷同思想的改進版word2vec之Hierarchical Softmax、XGBoost中使用logistic目標函數,深度學習中使用sigmoid的情況,並對其相似之處做了詳細的介紹;
本文所講的內容並沒有特別新穎之處,只是對已有算法做了一個簡單的歸納總結,期望對學習或者已經瞭解這些算法的同學,在理解上面提供一些角度和切入點,對這些算法有更好的瞭解。
最後個人覺得,從擬人的角度上說,線性函數是狠心的掰彎自己,有了後續的成功,但是我們小夥伴們,可以對自己狠一點,但是不提倡掰彎哦!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章