目錄
1、直男 線性迴歸
2、海王logistic,被掰彎的線性迴歸
3、海王征服的妹子
3.1 Word2Vector
3.2 XGBoost
3.3 深度學習中的sigmod
摘要
本文將要講述的內容是多個機器學習方法推導的一些共通之處,雖涉及到算法的推導,但還是希望能儘量輕鬆愉快的講解,並且能夠幫助大家,將這幾個算法的推導,更加系統化的理解。
本文主要將要講到的幾個機器學習的方法包括線性迴歸、logstic迴歸、XGBoost、Word2Vector以及深度學習等一系列方法的推導以及他們在推導中的共通之處。可能這裏提到的內容,很多大神都有提到過,沒有關係,可以再次溫習一下。
1、直男 線性迴歸
以前學習的時候,就有大神跟我說過,機器學習,得線性着得天下,現在想來,機器學習就是線性到非線性的過程,線性學好了,從線性到非線性的演變自然就能通了。線性與非線性的概念,這裏簡單的介紹下:在二維空間,能夠被一條直線分開的數據,叫線性可分,而這條直線就是線性函數,有意思的是,二維空間線性不可分的數據,在三維或更高維可能可以線性可分,從這一點說,線性與非線性貌似是維度的壓制。
線性迴歸,說的就是,不管多少維,用來學習的就是一個線性函數,函數爲:
F(X)=WTX+b
通俗的解釋下這個應用場景,比如說,有這樣一批數據,對於每一個數據,有m個對房價的影響因素,寫成一個向量xi,然後經過調查,知道xi 情況下,房價就是 yi 元。如果蒐集很n組數據數據,也就是 i=1,2,3,...,n,得到D={(x1,y1),(x2,y2),...,(xn,yn)},寫成向量的形式 D={(X,Y)},其中X=(x1,x2,...,xn),Y=(y1,y2,y3,...,yn),接下來簡單的說明求解過程。
根據最小錯誤準則,算法預測的數據與實際的數據之間的差距,應該約小越好,在進經典的線性迴歸中,使用的 loss function 是均方誤差:
L(W)=21(F(X)−Y)2
很明顯,L(W) 爲凸函數,可以求導試試:
∂W∂L(W)=XTXW−XTY
如果 XTX 的逆存在,就可以直接求得最優解:
W=(XTX)−1XTY
對於XTX不可逆的情況,可以使用梯度下降或加一個λI向量來求解,其中0<λ<1,I爲單位矩陣。如果有小夥伴對於線性迴歸感興趣,或者覺得以上講解過於簡單,沒有弄清楚,可以參照我的另外一篇博文機器學習:線性迴歸(Linear Regression)
2、海王logistic,被掰彎的線性迴歸
線性迴歸的推導過程,其實跟logistic迴歸的推導過程並不一樣,這也是在線性迴歸的時候,粗略帶過,直男的待遇,不是特別重視。但是,logistic迴歸就是基於它來的,每一個海王都有青澀的曾經,一定是受了挫折,預測和分類都不達標,只能改變自己,線性崛起,被迫掰彎自己,華麗轉身成logistic迴歸。
這裏用logistic來解決分類問題,模型訓練成功後,輸出給定樣本特徵及模型超參數的情況下,屬於某類別的概率。經典案例,二分類問題,如果事件A發生的概率爲PA,那麼事件A不發生的概率就是1−PA,判斷的時候,可以用比
1−PAPA
這個公式是有名字的哦,它叫事件發生的機率(大概就是我們通俗的說,這個事情發生的機率挺大的“機率”),機率>1,認爲事件會發生,反之,認爲事件不發生。對機率取對數,得到ln1−PAPA就是對數機率了,假設我們用線性模型來回歸對數機率的值爲
f(x)=wx+b=ln1−PAPA
求解可得
F(x)=PA=1+ef(x)ef(x)=1+e−f(x)1=1+e−(wx+b)1
看到這個公式,我們是不是很熟悉,對的,這就是logistic(概率分佈函數),也就是它把線性函數給掰彎了,上個圖展示下:
圖1. logistic分佈的概率密度函數和分佈函數
現在,需要求的是一個時間發生的概率,要學的參數還是線性函數中的w,b,那是不是還是按照之前的最小錯誤率準則構造最小均方誤差的loss function呢?回答這個問題之前,先把問題定義清楚。假設有一堆事情,其表示爲(xi,yi),其中i=1,2,3,...,n;xi是一組判斷事件發生與否的已知因素,比如判斷一個程序員是否有女朋友的時候,可以總結這個小夥跟女生交流是否臉紅(小夥,都紅過吧),是否常洗澡換衣…, 假設已知因素很多,有m個,然後yi就表示該小夥有沒有女友的事實了,yi=1表示有,yi=0就是沒有。然後,經過某些有心人士的蒐集,就有了一批數據D=(X,Y),也就是說 上述的i=1,2,...,n,也就是X=(x1,x2,...,xn),Y=(y1,y2,...,yn)。
數據有了,如果用均方誤差函數,這loss function爲:
L(W)=21i=1∑n(F(xi)−yi)2=21i=1∑n(1+e−(wixi+b)1−yi)2
什麼都不說了,無腦求導唄
∂w∂L(w)=i=1∑n(F(xi)−yi)(1−F(xi))F(xi)(−xi)
假設某個事件發生 F(xi) = 1,該事件發生,則 1−F(xi)=0,最後求得∂w∂L(w)=0,符合實際,離目標很近的時候,梯度爲0,F(xi)=0,這個時候離目標很遠,同樣求得∂w∂L(w)=0,無法有優化了。
換個方向,既然是概率,那假設每個事件發生的概率互相不影響(獨立),每個事件都用的同一個分佈函數(同分布),對於樣本i,取其對應標籤成立情況下的概率爲:
pi=F(xi)yi(1−F(xi))(1−yi)
如果樣本yi=1,說明事件發生,pi=F(xi);如果yi=0,取的是pi=1−F(xi)
所有樣本,不管是沒發生還是發生,每個樣本都正確的概率(極大似然)爲:
L(w)=i=1∏npi
最大化這個函數,以達到所有的樣本都按照其特定的事實去發生(正樣本)與不發生(負樣本),就可以得到訓練的模型了。
對數似然爲:
l(w)=logL(w)=logi=1∏npi=i=1∑n⟮yilogF(xi)+(1−yi)log(1−F(xi))⟯
梯度的推導過程如下:
∂wj∂l(w)=i=1∑n(F(xi)yi−1−F(xi)1−yi)∂wj∂F(xi)=i=1∑nF(xi)(1−F(xi))yi−yiF(xi)−F(xi)+yiF(xi)F(xi)(1−F(xi))(−xj)=i=1∑n(F(xi)−yi)xj
logistic梯度有了,算法就可以根據訓練數據求解了。至此logistic迴歸,的講解就告一段落了,需要深度回味的少年可以看看這篇博文,機器學習:Logisitic迴歸。
3、海王征服的妹子們
講完海王logistic自己的故事,現在可以說說海王的妹子們了,爲什麼說下面幾個是海王的妹子呢,賣個關子,且往下看。
3.1 Word2vec
此處主要的是想說與logistic函數相關的部分,但是爲了讓不同的人都知道word2vector大概幹了什麼事情,所以額外的介紹一點基本知識,然後快速進入到說明爲什麼說Word2vector是海王的妹子。
3.1.1 Word2vec簡單介紹
話說,最開始想做的事情並不是embedding(word2vector),想做的事情,類似於大家小學的時候,語文課常做的題,完形填空,也就是給定一個句子中的幾個詞,填寫你認爲最有可能的詞。就是這樣的一件事件,用算法怎麼做呢?
做法很多,各種機器學習方法都可以,但是這裏說到的是經典的三層神經網絡模型,如下圖所示:
圖中x1,x2,...,xV是詞經過one-hot形式向量,有V個數輸入神經元,實際上就能處理V個詞的情況。中間層有N維,這裏N<V,最後一層就是softmax層,維度也是V,輸出的是填入每個詞的概率,期望是完形填空正確答案的詞概率最大。訓練好後,機器就會做完形填空了,是不是很厲害,最厲害的是得到的WV×N,因爲之前的詞向量是one-hot形式,一個詞的向量與該矩陣相乘,就是把這個矩陣的某一行給拿出來,然後這個向量也就是後來我們使用的embedding後的詞向量。
3.1.2 基於Hierarchical Softmax的word2vec
是不是覺得這麼做就已經不錯了呀,是的,不過能問題也很明顯呀,現在知道V是詞典的維度,那如果V超級大呢,參數暴增,計算量大,還不好優化,這裏藉助了霍夫曼編碼構造的霍夫曼樹,構造Hierarchical Softmax
從圖中可以看到,輸出層葉子節點數還是V,也就是詞典的維度,但是從n(w2,1)→w2的路徑,不再需要計算所有的softmax,需要處理的是,在每個節點岔路口,決定是往左還是往右。如果往左是yi=1,往右是yi=0;基於logistic的二分類問題(這裏規定1是負類,0是正類,有點繞,但是先不管)。
參照logistic迴歸來,可以知道,正類概率:
P(+)=1+e−θx1
一次到葉子節點,需要走多步,並且每次都走對,才能到達目的地,則對於n(w2)來說,它走到w2的需要走三步,概率是分別每一步概率的乘積,表示如下:
L(w2)=P(−∣n(w2,1))×P(−∣n(w2,2))×P(+∣n(w2,3))
轉換一下
l(w2)=i=1∏3P(+)(1−yi)×P(−)yi
上面這個公式跟logistic的損失函數就很像了,繼續往下對於所有的訓練樣本,都正確的概率爲:
L(w)=i=1∏nl(wi)
這個就是最後要優化的目標函數,接下來定義一些符號,方便後續推導。輸入的詞爲w,其從輸入層詞向量求和平均後的霍夫曼樹根節點詞向量爲xw, 從根節點到w所在的葉子節點,包含的節點總數爲lw, w在霍夫曼樹中從根節點開始,經過的第i個節點表示爲piw,對應的霍夫曼編碼爲diw∈{0,1},其中i=2,3,...,lw。而該節點對應的模型參數表示爲θiw, 其中i=1,2,3,...,lw−1,沒有i=lw是因爲模型參數僅僅針對於霍夫曼樹的內部節點。
定義w經過的霍夫曼樹某一個節點j的邏輯迴歸概率爲P(djw∣xw,θj−1w),其表達式爲,並且
P(djw∣xw,θj−1w)={σ(θj−1xw)1−σ(θj−1xw)djw=0,djw=1.
將L(w)展開後求導:
logL(w)=log⟮i=1∏nl(wi)⟯=log⟮i=1∏nj=2∏lwσ(θj−1xw)(1−djw)×(1−σ(θj−1xw))djw⟯=i=1∑nj=2∑lwl(w,j)
其中l(w,j)=σ(θj−1xw)(1−djw)+(1−σ(θj−1xw))djw,對l(w,j)求導有
∂θj−1∂l(w,j)=⟮σ(θj−1xw)1−djw−1−σ(θj−1xw)djw⟯∂θj−1∂σ(θj−1xw)=σ(θj−1xw)(1−σ(θj−1xw))1−djw−σ(θj−1xw)+djwσ(θj−1xw)−djwσ(θj−1xw)σ(θj−1xw)(1−σ(θj−1xw))xw=⟮1−djw−σ(θj−1xw)⟯xw
對於一個訓練樣本則有梯度爲:∑j=2lw⟮1−djw−σ(θj−1xw)⟯xw
同樣的方法,可以得到xw的更新爲:∂xw∂l(wi)=∑j=2lw⟮1−djw−σ(θj−1xw)⟯θ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)=−21j=1∑T∑i∈Ijhi+λ(∑i∈Ijgi)2+γT
其中,T爲葉子節點的個數,Ij爲葉子節點j中的樣本集合,gi爲目標函數的一階導,hi爲目標函數的二階導,λ和γ分別用來平滑葉子節點權重弄和控制懲罰模型複雜度的。
上面函數是用來評價一個既定樹結構的好壞的,如果想要找到最優的樹結構,則需要窮舉數據結構並求每個數的得分,爲了減少計算,一般都採用貪心算法進行後續求解。這裏可以跟logistic掛鉤的地方就是一階導gi和二階導hi可以是通過logistic函數來求得,並且使用logistic的時候,其使用的極大似然函數是凸函數,可以二階泰勒來進行推導。所以,logistic估計只是曾經暗戀過XGboost而已。
3.2.2 深度學習中的Sigmoid
深度學習中,主要是激活函數,特別是分類時,最後通常會接一個softmax層。此處的單個sigmoid函數與logistic函數的形狀是一致的,如果深度學習最後輸出的softmax只有一個神經元,那麼loss function定義爲:
L(w)=i=1∏nF(xi)(yi)(1−F(xi))(1−yi)
其中i=1,2,3,...,n是樣本數量,根上式求導,梯度下降,後續的梯度傳遞採用鏈式求導法則,求解只有一個輸出神經元的神經網絡是完全沒有問題的。
問題是輸出神經元的數目一般來說是有多個,對於多分類問題,在處理的時候,標籤轉換爲yi=(y1i,y2i,...,yci)向量, 其中
yij={10j=k,j=k.
其中k是樣本的類別。
對於多個神經元輸出的概率向量 y^i=(y^1i,y^2i,...,y^Ci), 取其發生的概率爲:
pj=yjTy^j=i=1∑Cyijy^ij
其中C爲類別數,對於所有樣本都按照其觀測的情況一起發生的概率爲:
P=L(w)=i=1∏npi=i=1∏nyiTy^i
上述同樣是極大似然的思想,對其去對數有:
l(w)=−logL(w)=−j=1∑ni=1∑Cyijlog(y^ij)
對其求導,求梯度,按照鏈式求導法則反向傳遞,可求解深度學習網絡。
簡單的給出求導結果, 設l=−∑i=1Cyilog(y^i)
∂zj∂l=∂y^i∂l∂zj∂y^i
∂y^i∂l=−i=1∑Cy^iyi
∂zj∂y^i={y^j(1−y^j)−y^iy^jj=i,j=i.
∂zj∂l=−y^iyiy^i(1−y^i)+i=j∑y^iyiy^iy^j=y^i−yi
深度學習中間的激活函數,目前來說有很多的可選項,包括Relu、tanh等;這些暫且不談,按照本文上述過程來看,logistic跟深度學習淵源還是頗深的,至少曾經相互喜歡過。
4、總結
本文從傳統機器學習線性模型出發,講述了線性模型掰彎後變爲logistic模型。在此基礎上,通俗的說明了線性模型的求解過程、詳細的描述了logistic迴歸的求解過程。從logistic函數及極大似然的角度,總結了具有雷同思想的改進版word2vec之Hierarchical Softmax、XGBoost中使用logistic目標函數,深度學習中使用sigmoid的情況,並對其相似之處做了詳細的介紹;
本文所講的內容並沒有特別新穎之處,只是對已有算法做了一個簡單的歸納總結,期望對學習或者已經瞭解這些算法的同學,在理解上面提供一些角度和切入點,對這些算法有更好的瞭解。
最後個人覺得,從擬人的角度上說,線性函數是狠心的掰彎自己,有了後續的成功,但是我們小夥伴們,可以對自己狠一點,但是不提倡掰彎哦!