1. 程式人生 > >線性迴歸_邏輯迴歸_廣義線性模型_斯坦福CS229_學習筆記

線性迴歸_邏輯迴歸_廣義線性模型_斯坦福CS229_學習筆記

前言

之前學習過視訊版本的吳恩達老師CS229的機器學習課程,但是覺得並不能理解很好。現在結合講義,對於之前的內容再次進行梳理,仍然記錄下自己的思考。圖片來源於網路或者講義。話不多說,進入正題吧。


Part I Regression and Linear Regression

線性迴歸

課程內容首先從監督學習開始。在監督學習裡,你應該有待訓練的特徵的集合(訓練集)以及標籤作為輸入,你想得到的這些特徵與標籤的關係,即h(x) =  y,這裡的h也稱為假設,判斷h(x)與y近似程度的方法就是定義成本函式(cost function),在成本函式的指導下(最小化成本函式),幫助推斷對映關係h(x)。監督學習主要應用於兩個方面:預測(regression)和分類(classification)。談到監督學習的預測,那自然而然的第一課便是線性迴歸。顧名思義,便是以線性函式對映的方式來解決預測問題。從這個最為基本的方法出發,可以便於我們理解監督學習的流程。

線性迴歸形式如下所示,注意這裡設x0 = 1,從而構造常數項:

                                                                           h_{\theta }(x)=\theta _{0} + \theta _{1}x_{1}+ \theta _{2}x_{2}

 由此得到其一般形式:

                                                                h(x)=\sum_{i=0}^{n}\theta _{i}x_{i}=\theta ^{\top }x

接下來定義成本函式,即誤差的平方和,前面的0.5是為了求導之後可以抵消常數2:

                                                               J(\theta )=\frac{1}{2}\sum_{i=1}^{m}(h_{\theta }(x^{(i)})-y^{(i)})^{2}

                                 (1)

為什麼這樣定義呢?從概率的意義出發進行解釋,設假設的線性迴歸和真實情況存在一個隨機誤差\epsilon^{(i)}\sim N(0,\sigma ^{2}),則

                                                               y^{(i)} = \theta ^{\top }x+\epsilon ^{(i)}

            那麼可得到下列公式,注意這裡\theta是引數,而不是作為給定的值參與條件概率。

構建極大似然方程,得出

從這裡就可以發現,要使概率最大化,即是要最小化(y^{(i)}-\theta ^{\top }x^{(i)})^{2}。這就驗證了利用誤差平方和最小化來衡量假設與真實情況差異的一個自然的合理性。但是也要明白也存在著其他合理的評判的方法,這只是其中的一種。

也就是說,上述的成本函式定義,是通過分析其最大似然方程得出的一個自然的結論。

梯度下降

那麼接下來所要做的便是求解\theta _{i},使得成本函式最小。成本函式越小,說明假設中的引數使假設越接近於真實情況,則該引數的取值越合理。這裡剛接觸的時候一看,不就是一個多元函式求極小值的問題嗎?那對於每個引數\theta _{i}求偏導,令其為0,就可以得到結果了,這也是下面要說的正規方程的思路。

但是現在換個角度,從計算機的角度出發,或許一種初始化、迭代進行逼近真值的思路更為適合求解問題。這種思路便是初始化引數\theta,在每一次迭代中更新\theta的值,迭代直到滿足收斂條件。迭代的更新方式也就是常用的梯度下降的方式。參見下圖,圖片來源於網路。

就上述成本函式而言,理想情況下,要尋找的\theta集合使\frac{\partial J}{\partial \theta }為0。那麼先初始化\theta _{i}的值,在每次迭代中求解\frac{\partial J}{\partial \theta }的值,並用此來更新\theta,這樣做的話每次迭代都使\frac{\partial J}{\partial \theta }更加接近於0,一直迭代直到滿足收斂條件。

首先要明白為什麼要選取梯度的方式進行更新。我的理解是,某點的梯度代表著一個函式在該點變化速率最快的方向,選取梯度作為更新的方向也就是選取更新速度最快的方向。理想情況下我們要尋找的點即為梯度為0的點,對於梯度下降而言,不管在某點的梯度的方向是正還是負,只要每次迭代向著梯度相反的方向進行更新(梯度為正,說明函式在該點的變化趨勢增加,那麼在更新時向其反方向更新,即減去該梯度,就更接近梯度為0的點,梯度為負的情況亦然),在上述成本函式的形式下(因為有且只有一個極小值)那麼一定會找到該極小值點,即梯度為0的點。

理解了上一步,不難得到以下迭代流程,這裡的\alpha也就是學習率,顧名思義,調整學習率即可以調整學習的快慢:

更新方式:

看看這個偏導數是什麼樣子 :

迭代:

 由此,即可以求出\theta的值,求出對映關係了。

讓我們回頭再看看J(\theta )的定義式,發現每一次的迭代我們都把整個樣本集遍歷了一遍(m個樣本集),有時候樣本集很大,這樣的話計算就會很慢。由此便會引出隨機梯度下降(SGD),mini-batch梯度下降,batch梯度下降(選擇全部樣本)三種方式。實施起來也很簡單,差別在於每次迭代的樣本選取的個數(分別為:隨機選擇1個,mini-batch個,選擇全部樣本)。

但是我覺得在這裡也存在著一些思考。首當其衝的便是為什麼可以這樣做。首先要明白我們之前都做了什麼。我們有了一些資料和標籤,我們想得到這些資料和標籤關係,即想要建立y = h(x)這個對映。但是不知道真實關係是什麼,所以打算建立一個線性關係去”擬合”這個關係。這裡的關鍵是用了”擬合”這個詞。擬合的程度採用最小平方誤差的方式去判斷。擬合的基礎在於我們採取的樣本。若樣本不同,顯然根據樣本得到最優解(這裡的最優並不是指真實情況的最優)是不一樣(這也是為什麼強調樣本數量越多越好的原因,因為樣本資料量越多,我們逼近於真實情況的可能性也就越高),但是實際上通過不同樣本得到的最優解同樣對於我們逼近真實情況的最優解是具備指導意義的,我的理解是這些最優解雖然不是真實情況的最優,但是都某種程度上逼近於真實情況的最優,他們都指導計算的過程逼近於最優解。

利用梯度下降的方式進行解的逼近這種思想在計算數學裡面應該是很常用的。另一種求解的方式便是直接求解公式(1)的偏導數並令其為0,從而進行\theta的求解。這便是正規方程(The normal equations)的思路。具體的公式推導感覺不必深究,參照講義直接給出結果。

加權線性迴歸

線上性迴歸的基礎上,可以進行一些改進。

 這樣就得到了區域性加權線性迴歸(locally weighted linear regression),其中權重可這樣確定:

注意這裡的x表示的是,輸入假設中待預測的點。也就是對於每一個待預測的點,都要重新確定權重。這顯然是很費時的。 

小結

對於非數學和統計專業的人,沒必要過分花時間深究於公式的推導。針對應用而言,機器學習是一種能夠用來解決問題的強大的手段。更重要的在於瞭解其怎麼用以及為什麼要這麼用。

上述是一個監督學習中解決預測問題的一個基本演算法--線性迴歸,相對於其他演算法還較為簡單,但是看似簡潔卻包含魅力,我卻仍然花費不少的時間進行梳理,因為我認為其對於理解學習的流程很有幫助。

還是從應用的角度的出發,來梳理這個流程。首先有了一組資料集,希望能夠從這組資料集中得到一些規律,當有新的資料來時,能夠藉助這個規律幫助我們進行決策,這就是問題的實際意義。我們不知道這個規律是什麼,但是可以通過先驗知識來進行大致的判斷,然後提出一個假設(線性迴歸等等),為了判斷這個假設是否合理,設定了一個優化函式(最小二乘),你還可以在優化函式上做一些手段來使其更加合理(引數加權),接下來求解優化函式(梯度下降、正規方程),得到引數從而得出我們的假設,以此假設來近似代替規律從而解決問題。只有理解了演算法在做什麼以及為什麼要這麼做,才能夠得之而用。

寥寥數語不足以概括其中的很多細節,例如如何判斷假設和規律(真實情況)是否接近、如何設定優化函式得到推斷假設、如何求解優化函式等等,其實從線性迴歸就可以看出,流程中的每一步都蘊含著數學的意義。此中細節只有建立在數學的基礎上才具備合理性與說服力。


 Part II Classification and Logistic Regression

邏輯迴歸

前面提及了監督學習的預測問題,現在來看看分類問題。

以二元分類為例,假設現在解決一個處理垃圾郵件分類的問題,是垃圾郵件則標籤為1(positive),否則為0(negative)。現在利用邏輯迴歸來解決這個問題,同樣構建假設:

                                                                                     h_{\theta }(x)=g(\theta ^{\top }x)=\frac{1}{1+e^{-\theta ^{\top }x}}

其中                                                                                 g(z) = \frac{1}{1+e^{-x}} 

記住g(z)的導數在接下來會有用。

                                                                                      g{}'(z)=g(z)*(1-g(z))

g(z)也稱為sigmoid函式。函式形狀如下所示,z=0時,g(z)=0.5g(z)\in (0,1)

 

其實就這問題而言,任何取值範圍在0,1內的函式彷彿都能夠作為g(z),更深層次的原因,在接下來的廣義線性模型裡面會涉及到。這裡先接著演算法往下面走。

梯度上升與牛頓法

同樣,從概率的角度出發,假設

上式也可以寫作 

以此構建最大似然方程 

注意在這裡,與之前線性迴歸不同,我們使l(\theta )最大化,因此採用梯度上升進行,因此更新的方式為 

這與之前提到線性迴歸不同。這裡直接給出利用隨機梯度上升進行更新方式

是不是覺得很線性迴歸更新形式類似,但是注意這裡的h_{\theta }(x)是一個非線性函式sigmoid。不管怎麼說,看上去應該有更深層次的原因,否則二者形式不可能如此相似。利用梯度上升法求解引數,便可以利用邏輯迴歸進行分類了。

除了梯度上升,還有一種求解方式。同樣的,不管是尋求極大值的點,還是極小值的點,都是在尋求\theta的值,從而使偏導數為0的點。在當引數的數量不多時(因為需要涉及到n*n矩陣的操作),牛頓法也可以作為求解的一種選擇,因為牛頓法收斂得更快,其實我記得要使牛頓法收斂是有許多限制條件的,尤其是初值的選擇上。在這裡,相當於求解l{}'(\theta )=0的解,因此直接給出套用牛頓法進行迭代的公式:

這裡是梯度上升的情況,想想梯度下降的情況,牛頓法的引數更新方式將是什麼樣呢? 

小結

邏輯迴歸雖然稱為迴歸,但是解決的是一個二分類問題。當訓練好分類器時,可以設定大於0.5為正分類,小於0.5為負分類,以此作為分類的判斷條件。關於邏輯迴歸的數學原理,可參照2011_[John Mount]_The equivalence of logistic regression and maximum entropy models。


Part III 廣義線性模型(Generalized Linear Models)

指數分佈族(The exponential family)

這一部分作為前面兩部分的點睛之筆,值得令人琢磨。

前面介紹的線性迴歸,由於隨機高斯噪聲的影響,y服從於高斯分佈;而用於分類的邏輯迴歸裡,y服從於伯努利分佈。這二者冥冥之中彷彿有某種共性。沒錯,其實二者都屬於指數分佈族。

這裡引入一個概念,指數分佈族(The exponential family)。形如以下定義的都可劃入指數分佈族的一員:

參照原文,給出每個引數的解釋:

(1)η is called the natural parameter (also called the canonical parameter) of the distribution

(2)T(y) is the sufficient statistic (for the distributions we consider, it will often be the case that T(y) = y)

(3)a(η) is the log partition function

具體各個引數是什麼意思,也必要去深究。只要明白,當選定T,a,b這三個函式時,就可以確定引數為\eta的概率分佈。讓我們分別一探究竟。

對於引數為\phi伯努利分佈(y取0或1),進行如下改寫:

對照指數分佈族的形式 ,不難得到:

                                            \eta =log(\frac{\phi }{1-\phi })              即              \phi =\frac{1}{1+e^{-\eta }}

這不正就是邏輯迴歸裡面用到的sigmoid函式嗎?對比可再看看其他引數。這裡列出其他引數。

 同樣對於高斯分佈N(\mu ,\sigma ^{2}),我們也可進行改寫。因為由前面線性迴歸可知,\sigma對迴歸並沒有影響。因此為了簡單運算,這裡假設\sigma^{2}=1,從而進行以下改寫:

同樣對比,可得到各個引數如下所示:

                                                                                              (2)

二者果然存在著共性。線性迴歸中對應著的高斯分佈和邏輯迴歸中對應著的伯努利分佈都屬於著指數分佈族,而這將是構建廣義線性模型(GLM)的基礎。

構建廣義線性模型(Construct Generalized Linear Models)

在實際解決問題的過程中,根據先驗知識,可能會知道y大概屬於什麼分佈,例如高斯、伯努利、泊松等等,如果其屬於指數分佈族,我們可以利用該分佈構建廣義線性模型來解決問題。為了構建廣義線性模型,需要基於三點假設:

(1)(y | x; θ) ∼ ExponentialFamily(η)。y服從於引數為\eta的指數分佈族。

(2)h(x) = E[y|x]。這裡猜測可能是為了保證一致無偏性吧。

(3)\eta =\theta ^{\top }x\eta與輸入引數滿足線性關係。這條假設也可以看做是"design choice"。畢竟是構建一個廣義線性模型,總得有線性吧。

基於這三條假設,根據y服從哪一個分佈,就可以構建GLM了,看以下三個例子。

(1)y|x;\theta \sim N(\mu ,\sigma ^{2}),進行如下推算:

第一行由假設(2)得出;第二行由y\sim N(\mu ,\sigma ^{2})得出;第三行由(2)式中,\mu =\eta得出;第四行由假設(3)得出。

由此得到線性迴歸。

(2)同理,當y服從於伯努利分佈時,y|x;\theta \sim Bernoulli(\phi)

由此得到邏輯迴歸。

一開始疑惑為什麼要採用邏輯迴歸這樣看似彆扭的方式進行二元分類,在此才深感存在皆合理。 

(3)由邏輯迴歸擴充套件一下,看看SoftMax迴歸是怎麼推的。不同的是,在SoftMax迴歸中,不再是二元分類問題,而是多元分類問題,y可以屬於k種不同的類別,因此y服從於多項分佈,且擁有引數\phi _{1}\phi _{2}...\phi _{k},k個引數。但是這裡注意,為了使每個引數獨立(因為\sum_{i=1}^{k}\phi _{i}=1),因此,設\phi _{k}=1-\sum_{i=1}^{k-1}\phi _{i},但是為了寫法方便,依然寫作\phi _{k}。所以實際上只有k-1個引數。進行如下定義:

定義一個有用的記號函式:

                                                                                   (1\left \{ True \right \}=1,1\left \{ False\right \}=0)

則可以得到 

                                                                                 (T(y))_{i} = 1\left \{ y=i \right \}

因為對於(T(y))_{i}來說,只有第i個位置為1,其餘都為0。進一步可以得到 

                                                E[(T(y))_{i}]=p(y=i)=0*\phi _{0}+...+1*\phi _{i}+...+\phi _{k}=\phi _{i}

將多項分佈寫作指數分佈族形式 :

對於的引數如下所示:

 不難得出(具體參照原文):

 由此構建可GLM,得出:

這便是在神經網路中常用的SoftMax函式的數學意義了。

至於如何求解引數\theta,參照邏輯迴歸中的解法,構建極大似然方程,然後利用梯度上升或牛頓法便可以進行求解。 

小結

看完GLM這一部分,醍醐灌頂,發現過程中的每一步都那麼的合理(可能是自己太菜了),感受到了機器學習的魅力,雖然其中深層次的數學原理都不瞭解,但是不管怎樣,只有建立在數學基礎之上的手段才令人信服。