標籤:

為什麼 LR 模型要使用 sigmoid 函數,背後的數學原理是什麼?

這個問題經常被問到,但一直沒找到較好的資料。Ng的視頻里提到過Exponential Family相關的東西,但覺得並不能很好的解釋這個問題。


看了一下,幾乎所有的回答都只解釋了「為什麼可以用sigmoid」,而沒有解釋「為什麼要用sigmoid」。雖然也有回答提到了exponential family中bernoulli的形式,但高票回答基本只說明了sigmoid的各種良好性質。

若是光從這個角度解釋的話,probit也具有相同的性質,為什麼除了做GLM的,基本上就沒人用呢?

說到底源於sigmoid,或者說exponential family所具有的最佳性質,即maximum entropy的性質。
雖然不清楚歷史上孰先孰後,但這並不妨礙maximum entropy給了logistic regression一個很好的數學解釋。

為什麼maximum entropy好呢?entropy翻譯過來就是熵,所以maximum entropy也就是最大熵。熵原本是information theory中的概念,用在概率分布上可以表示這個分布中所包含的不確定度,熵越大不確定度越大。所以大家可以想像到,均勻分布熵最大,因為基本新數據是任何值的概率都均等。

而我們現在關心的是,給定某些假設之後,熵最大的分布。也就是說這個分布應該在滿足我假設的前提下越均勻越好。比如大家熟知的正態分布,正是假設已知mean和variance後熵最大的分布。

回過來看logistic regression,這裡假設了什麼呢?首先,我們在建模預測 Y|X,並認為 Y|X 服從bernoulli distribution,所以我們只需要知道 P(Y|X);其次我們需要一個線性模型,所以 P(Y|X) = f(wx)。接下來我們就只需要知道 f 是什麼就行了。而我們可以通過最大熵原則推出的這個 f,就是sigmoid。

其實前面也有人劇透了bernoulli的exponential family形式,也即是 1/ (1 + e^-z)

具體推導詳見:http://www.win-vector.com/dfiles/LogisticRegressionMaxEnt.pdf


考慮任意多類(不僅是兩類)的分類問題。

Exponential model 的形式是這樣的:
假設第i個特徵對第k類的貢獻是w_{ki},則數據點(x_1, ldots, x_n)屬於第k類的概率正比於exp(w_{k1}x_1 + ldots + w_{kn}x_n)。(省略bias)

因為一個數據點屬於各類的概率之和為1,所以可以得到
P(y = k) = frac{exp(sum_{i=1}^n w_{ki}x_i)}{sum_{k

現在回到兩類(0、1)的情況,此時分母上只有兩項:
P(y = 1) = frac{exp(sum_{i=1}^n w_{1i}x_i)}{exp(sum_{i=1}^n w_{1i}x_i) + exp(sum_{i=1}^n w_{0i}x_i)}

分子、分母同除以分子,並設w_i = w_{1i} - w_{0i},則有
P(y = 1) = frac{1}{1 + exp(-sum_{i=1}^n w_i x_i)}

喏,這就是logistic函數。其中參數w_i表示第i個特徵對1類的貢獻比對0類的貢獻多多少。


設計一個分類模型,首先要給它設定一個學習目標。在支持向量機中,這個目標是max-margin;在adaboost中,目標是優化一個指數損失函數。那麼在logistic regression (LR)中,這個目標是什麼呢?最大化條件似然度。考慮一個二值分類問題,訓練數據是一堆(特徵,標記)組合,(x1,y1), (x2,y2), .... 其中x是特徵向量,y是類標記(y=1表示正類,y=0表示反類)。LR首先定義一個條件概率p(y|x;w)。 p(y|x;w)表示給定特徵x,類標記y的概率分布,其中w是LR的模型參數(一個超平面)。有了這個條件概率,就可以在訓練數據上定義一個似然函數,然後通過最大似然來學習w。這是LR模型的基本原理。

那麼接下來的問題是如何定義這個條件概率呢?sigmoid函數就派上用場了。我們知道,對於大多數(或者說所有)線性分類器,response value(響應值) & (w和x的內積) 代表了數據x屬於正類(y=1)的confidence (置信度)。&越大,這個數據屬於正類的可能性越大;&越小,屬於反類的可能性越大。&在整個實數範圍內取值。現在我們需要用一個函數把&從實數空間映射到條件概率p(y=1|x,w),並且希望&越大,p(y=1|x,w)越大;&越小,p(y=1|x,w)越小(等同於p(y=0|x,w)越大),而sigmoid函數恰好能實現這一功能(參見sigmoid的函數形狀):首先,它的值域是(0,1),滿足概率的要求;其次,它是一個單調上升函數。最終,p(y=1|x,w)=sigmoid (&).

綜上,LR通過最大化類標記的條件似然度來學習一個線性分類器。為了定義這個條件概率,使用sigmoid 函數將線性分類器的響應值&映射到一個概率上。sigmoid的值域為(0,1),滿足概率的要求;而且是一個單調上升函數,可將較大的&映射到較大的概率p(y=1|x,w)。sigmoid的這些良好性質恰好能滿足LR的需求。


正好之前寫過一篇博客機器學習演算法之:指數族分布與廣義線性模型,其實就是A. Ng的學習筆記,可以參考下


不是因為sigmoid函數好LR才用它,而是因為RL的建模過程就會計算出sigmoid。

LR是一種線性分類方法,即用超平面(eta ^Tx=0)來分類。在二分類問題中,樣本在超平面的一邊就屬於一類。這個超平面可以看作類與類之間的邊界,如果一個樣本出現在邊界上,那麼它必須同時滿足

eta ^Tx=0 (1)

{{P(Y=1|x)}over {P(Y=-1|x)}}=1 (2)

即邊界上的樣本屬於邊界兩邊的類的條件概率相等。考慮(2)與(3)是等價的

ln{{P(Y=1|x)}over {P(Y=-1|x)}}=0 (3)

聯立(1)(3)有

ln{{P(Y=1|x)}over {P(Y=-1|x)}}=eta ^Tx (4)

我們知道由於類密度高斯假設和公共協方差假設,LDA(線性判別分析)是有這樣的性質的,即LDA的log-odds是x的線性函數。而Logistic繞過了這2個假設直接以式(4)建模。儘管形式上和LDA是一樣的,但是估計係數eta的方法不同。logistic模型更具一般性,它認為一個樣本屬於類1的概率P(Y=1|x)大的話,它應當同時滿足eta^Tx>0,類似的,當這個樣本屬於-1類概率 P(Y=-1|x)大時,應當同時滿足eta^Tx<0

又由於樣本屬於兩類的概率之和為1

P(Y=1|x)+P(Y=-1|x)=1 (5)

聯立(4)(5),解未知數為P(Y=1|x)和P(Y=-1|x)的方程得

P(Y=1|x)={exp(eta ^Tx)over {1 + exp(eta ^Tx)}}P(Y=-1|x)={1over {1 + exp(eta ^Tx)}}

這就是LR,然后里邊有sigmoid。姑且就當做另一種假設看看吧。也可能是像大家說的那樣,sigmoid有種種好處,因此基於它可導且方便表達概率的特點,直接以sigmoid的形式建模。


假設x為正太分布,y只有0和1兩類,且p(y=1) = pi_1, p(y=0) = pi_0,則:

p(y=1 ig| x) = frac{p(x, y=1)} {p(x)} = frac {pi_1 N(x ig| mu_1, Sigma_1)} {sum_i pi_i N(x ig| mu_i, Sigma_i)}

假設x之間滿足條件獨立(conditional independent,即給定y的情況下獨立):

p(y=1 ig| x) = frac {pi_1 exp {-sum_j(frac{1}{2} (frac{x^j-mu_1^j}{sigma_1^j})^2 -log sigma_1^j - C) }} {sum_i pi_i exp {-sum_j(frac{1}{2} (frac{x^j-mu_i^j}{sigma_i^j})^2 -log sigma_i^j - C) }}

如果對於y=0和y=1,x的方差不變,則:

p(y=1 ig| x) = frac {1} {1 + frac {pi_0 exp (-sum_j (frac{1}{2sigma_j^2}) (x^j - mu_0^j)^2 - log sigma_j - C)} {pi_1 exp (-sum_j (frac{1}{2sigma_j^2}) (x^j - mu_1^j)^2 - log sigma_j - C)} } = frac {1} {1 + e^{-w^Tx}}

因此得出sigmoid函數


基於上述表格我們可以進行逆過程 (我們需要做的就是把函數值控制在0-1之間)


首先不得不說的是,sigmoid這個函數實質上是以分類為目的出現的。
傳統的回歸直接給出具體值,而當某些情況我們想知道某件事發生的概率時,這個函數就有用了:其將數值限定在0~1之間,從而將原有數值轉化為概率--這個從其函數形式可以看到。
然後,之所以「用」這個函數,實質上並不是拿來用,而是經過推導得到的。
見《機器學習導論》長久以前推導過,思路應該是如下(細節出錯望見諒):
假設y = p(C1|x) 1-y = p(C2|x) 則可用y的對數比率 logit(y)來得到判定的概率,即logy/1-y &> 0則選擇C1, 這樣 限定這是兩個共享協方差矩陣的正態類,再使用貝葉斯規則 :
logit(P(C1|x)) = .... = w * x + w0
則 log p(C1|x) / 1-p(C2|x) = w * x + w0
得到p(C1|x) = sigmoid(w * x + w0) = 1 / (1 + exp[-(w*x + w0)])
就是這樣推導得到的, 然後再看最終的結論, 是不是發現 其與基本的線性回歸不同就在於使用一個S形函數,將原來的數值轉換到0~1之間,這樣更加容易看到數值的意義。
邏輯斯蒂 判別式!注意這點,其不是對類條件密度p(x|C1)建模,而是對其比率建模。假設對數似然比線性 即:
logp(x|C1) / p (x|C2) = w *x + w0
再使用貝葉斯規則,像之前那樣來整理推導得到:
y = p(C1|x) = 1 / (1 + exp[-(w*x + w0)]) 作為對於p(C1|x)的估計
這樣看,使用sigmoid函數是推導得到的,有了這貨以後 廣告點擊率估計就再也不愁了,誰知道哪位大牛提出來的,反正吾等菜用就好了.....
機器學習演算法與Python實踐之(七)邏輯回歸(Logistic Regression) 最終上個乾貨,寫的挺好


某些答案回答得太信誓旦旦了,哪有那麼多的繞來繞去的原因。很多答案中所謂的原因都是結果,或者是說性質。


原因非常簡單——logistic regression 之所以要選擇sigmoid函數作為link function,是因為作為GLM模型中的一類,logistic regression 的 link function 的 canonical 形式就是 sigmoid函數。


雖然link function當然你可以根據自己的喜歡調整,但這個canonical 形式是唯一的,所以絕大部分的時候就用sigmoid函數了。


之所以要選擇canonical link function 是為了簡便計算,使得所有GLM模型對參數的極大似然估計具有相同的形式(正則方程)。


這是一個最簡單的、可導的、0-1階躍函數。


參考ng的講義。。stanford machine learning


二項分布和多項分布都是指數家族分布的成員,將其寫成指數家族的形式,然後用

natural parameters來表示模型本身的參數,你就能得到sigmod和softmax函數了,也就是你採用sigmoid函數擬合時學習的是對應模型的natural parameters。
由於指數家族分布的moments和natural parameters是一一對應的,所以採用natural parameters的方法可以唯一的模型。
至於為什麼採用指數家族分布,我感覺應該和最大熵的性質有關。(我就是個半路出家的。


from Logistic Regressionz = Wx+bias &> 0 則 sigmoid(z) &> 0.5;z = Wx+bias &< 0 則 sigmoid(z) &< 0.5;
LR 訓練得到的仍然是決策邊界,與其他分類器學習到的決策邊界略有不同罷了。


講義中是說假設二類分布是01分布…p(x)=p^y*(1-p)^(1-y),然後最大似然全部樣本…求導為零…得到n=log(p/(1-p)),得到p=1/(1+e^n)


除了各位回答。還有一個顯而易見的觀察,就是Linear Regression這個函數所對應的log [P/(1-P)]的值域是符合(-inf,+inf),能夠覆蓋整個實數域。


指數簇函數,二項分布的指數簇形勢呈現的是sigmoid函數。具體可參見prml


這裡給出另一個解釋,可解釋著個sigmoid的由來,並引出probit回歸和logistic回歸的關係。
這就是潛變數模型:
1,假設有一個潛在的連續因變數ξ,樣本自變數Xi對應ξi。滿足所有Yi,當Yi=0是ξi&<=0,Yi=1時ξi&>0。
2,假設潛變數ξ是線性函數,ξi=α+β*Xi-εi,其中ε是誤差項。
3,概率P(Yi=1)=P(ξi&>0)=P(α+β*Xi-ε&>0)=P(εi&<α+β*Xi)。
4,重點來了,就如同線性回歸中假設誤差為正態分布一樣,假設ε服從正態分布N(0,1)那P(ε&<α+β*Xi)=Φ(α+β*Xi),Φ為正態分布的累計密度函數,這正是probit回歸。如果假設ε服從logistic分布Λ(0,1)那P(εi&<α+β*Xi)=Λ(α+β*Xi),Λ為logistic分布的累計密度函數,其實這個Λ(0,1)就是sigmoid函數1/(1+e^-z)。

所以,這種解釋中,邏輯回歸只是假設了潛變數模型中誤差ε服從logistic分布。完全可以不這麼假設,因為誤差分布本來就是和數據相關的。之所以logistic回歸比probit回歸更常用,可能是因為更容易計算和更好的可解釋性(odds)。
參考:
Probit model
Logistic distribution


行文倉促,歡迎大家幫我指出回答中的錯誤~

「首先,我們在建模預測 Y|X,並認為 Y|X 服從bernoulli distribution,所以我們只需要知道 P(Y|X);其次我們需要一個線性模型,所以 P(Y|X) = f(wx)。接下來我們就只需要知道 f 是什麼就行了。而我們可以通過最大熵原則推出的這個 f,就是sigmoid。」

匿名用戶解釋了 LR 模型的 f 是通過最大熵原則推導出來的,但是沒有給出具體由最大熵原則的推導出 sigmoid 函數過程,這個回答主要彌補該缺陷。多數回答的落腳點在用 sigmoid 函數有什麼好處,而沒有回答為什麼要用 sigmoid 函數,在閱讀了這篇文章之前,筆者以為在 LR 中用 sigmoid 函數是一個拍腦袋的決定,直到接觸了最大熵原則等相關知識,才發現並非如此。

pi() 是我們的 LR 概率預測函數 f ,那麼它應該滿足一下三個條件:

  1. 非負pi(x)_{v} ge 0
  2. 和為 1{sum}_{v=1}^{k}pi(x)_{v} = 1
  3. 值越大越好,表明預測值和原標籤越匹配: max pi(x(i))_{y_{(i)}}

對於二分類任務的 LR, w 是權重係數,一般有,

pi(x(i))_1 = frac{1}{1+e^{-wcdot x}}

但更一般的情況,我們認為用這種方式來表示更容易理解,對 k 個分類的任務,表示第 v 個分類的概率得分

pi(x(i))_v = frac{e^{w_vcdot x}}{sum_{u=1}^{k}e^{w_ucdot x}}

那麼,對於大小為 m 的數據集 x_i,{i=1,2,...,m} ,概率預測函數 pi(x_i) 的目的是為了讓模型更加接近數據真實的情形,用公式可以這樣來表達(前提是假設數據彼此之間相互獨立):

egin{equation} prod_{i=1}^{m} pi(x_i)_{y_i} end{equation}

然而上式累乘很容易造成數值的下溢,等價地,我們取它的對數形式,並求使其最大化的參數矩陣 w目標函數如下:

egin{equation} f(w) = sum_{i=1}^{m}log(pi(x_i)_{y_{i}}) end{equation}

對目標函數求 w 的偏導數, u=(1,2,...,k),j=(1,2,...,n) ,有

egin{equation}egin{split} frac{partial{f(w)}}{partial{w_{u,j}}} = frac{partial}{w_{u,j}}sum_{i=1}^{m}log(pi(x_i)_{y_{i}}) \ =sum_{i=1}^{m}frac{1}{pi(x_i)_{y_{i}}}frac{partial}{partial w_{u,j}}pi(x_i)_{y_{i}} end{split}end{equation}

在進行下一步之前,這裡先停一下,對於 k 分類的情形,係數矩陣 w 的大小為 (n×k)^T ,對應每個類別都會有一個概率得分,所以得分兩種情形,預測值等於真實情況和不等於真實情況

①:當 u = y_i 的時候:
frac{partial}{partial w_{u,j}}pi(x_i)_{y_{i}}=x_jpi(x_i)_{u_{i}}(1-pi(x_i)_{u_i})
②:當 u
eq y_i 的時候:
frac{partial}{partial w_{u,j}}pi(x_i)_{y_{i}}=-x_jpi(x_i)_{y_{i}}pi(x_i)_{u_{i}}

繼續,

egin{equation}egin{split} frac{partial{f(w)}}{partial{w_{u,j}}}=sum_{i=1,u = y_i}^{m}frac{1}{pi(x_i)_{y_{i}}}x_jpi(x_i)_{u_{i}}(1-pi(x_i)_{u_i})\ -sum_{i=1,u 
eq y_i}^{m}frac{1}{pi(x_i)_{y_{i}}}x_jpi(x_i)_{y_{i}}pi(x_i)_{u_{i}} \ =sum_{i=1,u = y_i}^{m}x_j(1-pi(x_i)_{u_i})\ -sum_{i=1,u 
eq y_i}^{m}x_jpi(x_i)_{u_i} end{split}end{equation}

frac{partial{f(w)}}{partial{w_{u,j}}}=0 ,得到如下等式,其中 I(u, y_i) 是指示函數:

egin{equation}egin{split} sum_{i=1}^{m}pi(x(i))_ux(i)_j=sum_{i=1}^{m}I(u, y_i)x(i)_j end{split}end{equation}

最大熵原理

在李航老師的《統計學習方法》中,解釋了最大熵原理是概率模型學習的一個準則,學習概率模型時,所有可能的概率模型中,熵最大的模型是最好的。

到目前為止,我們已經得到了三個約束條件:

egin{equation} pi(x)_{v} ge 0 end{equation}

egin{equation} {sum}_{u=1}^{k}pi(x)_{u} = 1 end{equation}

egin{equation} sum_{i=1}^{m}pi(x(i))_ux(i)_j=sum_{i=1}^{m}I(u, y_i)x(i)_j end{equation}

由最大熵原理,我們的目的是使模型函數的熵最大化, pi() 的熵等於,

egin{equation} -sum_{i=1}^{m}sum_{u=1}^{k}pi(x(i))_ulog(pi(x(i))_u) end{equation}

目標函數和三個約束條件,用拉格朗日乘數法可以輕鬆解決,建立拉格朗日函數如下:

egin{equation}egin{split} L=sumsumlambda(pi(x(i))_ux(i)_j-I(u, y_i)x(i)_j)\ +sumsumeta(pi(x)_{u}-1)\ -sumsumpi(x(i))_ulog(pi(x(i))_u) end{split}end{equation}

frac{partial}{partialpi(x(i))_u}L=0 ,得

frac{partial}{partialpi(x(i))_u}L=lambda x(i)+eta-log(pi(x(i))_u)-1

最終得到

log(pi(x(i))_u)=lambda cdot x(i)+eta-1

更一般地,回到熟悉簡單的二分類情形,

logfrac{y}{1-y} = lambda cdot x(i)+eta-1

解得,

y=frac{1}{1+e^{ lambda cdot x(i)+eta-1}}

到了這裡,相信我應該解釋清楚了為什麼 LR 模型要使用 sigmoid 函數背後的數學原理,如果覺得還是覺得不太理解的話,建議還是看看原推薦閱讀給出的原文~

推薦閱讀

The Simpler Derivation of Logistic Regression


提供點自己的理解。

很多問題講了sigmoid函數的性質,但其他函數也具備類似性質。

事實上LR作為最大熵在二分類時的例子,運用交叉熵作為代價函數,表徵P(Y|X)下的似然概率。而作為代價函數,自然希望目標y和計算值a,在y和a偏差很大的時候,下降速度快,而在y和a接近的時候,下降速度慢。而sigmoid函數作為變換函數很好的滿足這個性質。

例如,我們需要從z經過f()函數的變換到a同時運用交叉熵作為代價函數。那麼自然希望C對b的偏導等於a-y,那麼推導過程如下,經過sigmoid函數,其代價函數為交叉熵時,恰好能滿足此性質。同樣,對於平方函數的代價函數,運用線性回歸也能滿足此性質。


建議看一下李航《統計學習方法》第6章,邏輯斯諦回歸與最大熵模型。

又重新看了一遍其他回答,主要有以下幾種:

1. 自己本身理解不清楚,以為理解清楚的;
2. 整一些詞以為高大上的;
3. 解釋的只有原來懂得人才看得懂的。

因此,強烈建議,中文看《統計學習方法》,英文可以看ng的講義,或者 prml。


推薦閱讀:

模式識別機器學習的發展方向?
機器學習工程師需要掌握哪些編程語言?
The Elements of Statistical Learning 需要怎樣的數學基礎才能讀懂?
機器學習各種演算法怎麼調參?
深度學習caffe的代碼怎麼讀?

TAG:機器學習 |