一、線性回歸
一般的,線性回歸模型表示為
上式中令\(x_0=1\),這樣\(x\)實際上是\(n+1\)維,\(x=[1,x_1,x_2,…,x_n]^T\).當我們知道訓練數據集后怎樣得到參數\(\theta\)的值呢?一個比較合理的想法是盡可能的讓\(h_{\theta}(x)\)接近真實值\(y\),下面我們來定義一個函數來度量\(h_{\theta}\)與\(y\)的距離:
其中\(m\)表示訓練集中樣本個數,\(x^{(i)}\)和\(y^{(i)}\)分別表示第\(i\)個樣例的特征值和真實結果。我們希望找到一個\(\theta\)使的\(J(\theta)\)最小。下面分別采用梯度下降算法和最小二乘法來求解\(\theta\)。
二、梯度下降算法
我們希望能找到\(\theta\)使得\(J(\theta)\)達到最小,於是我們可以使一個搜素算法,初始化\(\theta\)為一個任意值,在迭代過程中不斷的更新\(\theta\)使得\(J(\theta)\)更小,直到收斂為止(可以認為\(J(\theta)\)不再改變)。下面我們來考慮下梯度下降算法,它先給\(\theta\)一個初始化值,然后通過下面公式來更新\(\theta\)
上式中\(\alpha\)稱為學習速率。為了理解上面的算法,我們需要推導一下偏微分部分,推導過程中我們只考慮一個樣例(x,y),然后只需要把所有的加起來就可以了
對於單獨的第\(i\)個樣本,更新規則為
當有\(m\)個樣本時,更新規則為
上式每次迭代將所有樣本考慮進來更新\(\theta\),這種方法叫做批量梯度下降。梯度下降容易陷入一個局部的最優解,事實上\(J(\theta)\)是一個凸函數,沒有所謂的局部最優解,它只有一個全局最優解。
批量梯度下降一般工作的很好,考慮下面的算法:
該算法每一個樣例都更新了\(\theta\)一次,這個算法被稱作隨機梯度下降(或增量梯度下降)SGD,當\(m\)很大的時候,批量梯度下會很耗時,通常,隨機梯度下降比批量梯度下降要快很多,然而它可能永遠達不到最小值,並在最小值附近震盪,而實際上這種近似最小值已經夠了。在樣本量比較大的情況下,隨機梯度下降比梯度下降更實用。
三、最小二乘法
梯度下降算法給出了一種最小化\(J(\theta)\)的方法。這里將介紹第二種方法:最小二乘法。我們先求\(J(\theta)\)的偏導數,然后令偏導數為0,用等式解出\(\theta\),此時的\(\theta\)使得\(J(\theta)\)最小(\(J(\theta)\)是下凸函數)。
先介紹下矩陣跡相關知識,對於一個\(n \times n\)的方陣\(A\),定義它的跡為
即矩陣對角線的和。實數的跡是它本身,有關跡的一些性質
不加證明的給出有關矩陣微分結論
其中\(|A|\)表示\(A\)的行列式,第四個式子中\(A\)可逆。定義\(X\)為\(m \times n\)(實際上是\(m \times (n+1)\))的矩陣,用它表示訓練的數據特征集
定義真實值向量\(y=[y^{(1)},y^{(2)},…,y^{(m)}]^T\),於是
我們知道對於一個\(n\)維向量\(z\)有\(z^Tz=\sum_{i=1}^{n}z_{i}^2\),於是
下面來對\(J(\theta)\)求導
令\(\nabla_{\theta} J(\theta)=0\)得\(XX^T\theta=Xy\),求解
這樣我們直接求出來了\(\theta\)的解析解,這就是最小二乘法。
四、有關概率的解釋
當我們求解回歸問題時,為什么選擇線性回歸?為什么代價函數\(J\)是合理的呢?這里我們將給出一個概率性的假設,然后很自然的推導出最小二乘法。
我們結果的目標值和預測值滿足以下等式
其中\(\epsilon^{(i)}\)表示預測誤差,我們再繼續假設\(\epsilon^{(i)}\)滿足獨立同分布,它們服從均值為0,方差為\(\delta\)的高斯分布\(\epsilon ^{(i)}\sim N(0,\delta^{2})\),概率密度函數即為
於是有\(y^{(i)}\sim N(\theta^Tx^{(i)},\delta^2)\)分布,則
需要注意\(p(y^{(i)}|x^{(i)} ;\theta)\)中德\(\theta\)是一個確定的值,並不是隨機變量,這個和\(p(y^{(i)}|x^{(i)} ,\theta)\)是不同的,此處的\(\theta\)是一個隨機變量。我們希望觀測概率最大,也就是關於觀測值的似然函數
注意前面我們假設了隨機變量\(\epsilon^{(i)}\) 是相互獨立的,所以
現在給出\(y^{(i)},x^{(i)}\),如何選擇參數\(\theta\)使得\(L(\theta)\)最大呢?這中方法被稱極大似然估計。我們取對數似然函數
我們需要最大化\(l(\theta)\)也就是得極小化
我們總結一下,在概率假設前提下,最小二乘回歸就是找到\(\theta\)的最大似然估計。
五、局部加權線性回歸
在原來的線性回歸中,為了預測在點\(x\)處的值,我們會
- 擬合\(\theta\)來最小化\(\sum_i(y^{(i)}-\theta^Tx^{(i)})^2\)
- 輸出\(\theta^Tx\)
而在局部線性回歸中,我們會
- 擬合\(\theta\)來最小化\(\sum_iw^{(i)}(y^{(i)}-\theta^Tx^{(i)})^2\)
- 輸出\(\theta^Tx\)
這里的\(w^{(i)}\)是非負數的權重,直觀上看,如果\(w^{(i)}\)很小,將會被忽略\((y^{(i)}-\theta^Tx^{(i)})^2\),下面是\(w^{(i)}\)一個常用的權重
這個可以內比高斯分布的圖形,但事實上它們沒半毛錢關系。距離\(x\)越遠的點權重越小,越近的點權重越大,當\(|x^{(i)}-x|\)越小,\(w^{(i)} \to 1\),當\(|x^{(i)}-x|\)很大時,\(w^{(i)} \to 0\).參數\(\tau\)通常稱為波長參數,控制權重函數圖像的形狀。
局部加權線性回歸是我們看到的第一個非參數學習模型,我們之前看到的是未加權的參數學習算法,因為它具有固定個數的參數,這些參數只需要學習一遍。相反的,使用局部加權線性回歸,我們需要保持整個訓練集,每次預測都要用不同的參數。
六、邏輯回歸模型
現在我們來考慮下分類問題。這和回歸問題一樣,唯一的區別是我們要預測的值是離散的。現在我們來討論二元分類問題,其中\(y\)能只能取\(0\)或者\(1\).例如現實生活中,郵件是否是垃圾郵件,只有是和否兩種答案。通常我們也可以稱這樣的樣本為正或負樣本。
上述問題,我們忽視\(y\)是離散值的事實,也可以采用線性回歸來分類,但是\(y \in \{0,1\}\),線性回歸得到的大於1或者小於0的值都是沒有意義的。為了解決這個問題,我們修改假設函數\(h_{\theta}(x)\)的形式
其中
稱為\(sigmiod\)函數着或logistic函數。sigmoid函數將\(\theta^Tx\)映射為\(0\to 1\)的概率,sigmoid函數還有一個很好的性質
那么給出了邏輯回歸模型,我們如何得到參數\(\theta\),和前面最小二乘法概率解釋做法一樣,可以采用極大似然估計方法來求解參數\(\theta\).我們假設
注意到上面兩個式子可以寫成
我們假設有\(m\)個訓練樣本相互獨立,似然函數為
然后再化簡為對數似然函數
要最大化\(l(\theta)\),我們可以向前面那樣,使用梯度上升算法根據下面迭代公式
更新\(\theta\).我們用一個樣例來求導,然后用隨機梯度上升算法求解。
這個形式和最小二乘法得到的一樣,區別是模型\(h_\theta(x)\)不一樣。我們得到的隨機梯度上升迭代公式為
七、感知機模型
我們現在來討論一個具有歷史意義的算法,考慮修改邏輯回歸算法讓結果強制映射為0和1,修改\(sigmoid\)函數為下面形式
於是
我們得到的\(\theta\)學習規則與前面線性模型一樣
這樣,我們就得到了感知機學習算法。在過去,感知機被粗略的認為是大腦中的一個簡單的神經元,需要注意盡管感知機算法在形式上和前面討論的算法相似,但它與邏輯回歸和最小二乘回歸實際上是不同的模型。特別是將感知機賦予概率的意義,或者是利用極大似然估計來推導它。
八 牛頓法
以邏輯回歸為例,來討論另一個最優化算法:牛頓法。下面使用牛頓法來最大化\(l(\theta)\).牛頓法的思想就是通過迭代來找到函數的零點。特別的,假設我們有一個函數\(f:\textbf{R} \mapsto \textbf{R}\),我們想找到一個\(\theta\)滿足\(f(\theta)=0\),這里\(\theta \in R\),牛頓法的迭代公式為
這種方法通常有一個直觀的解釋,我們可以通過一個線性函數來近似\(f\),該線性函數在當前猜測的\(\theta\)點處與\(f\)相切,接下來求解線性函數零點,並讓下一個猜測點在線性函數的零點位置,如下圖
牛頓迭代法給出了一個求解零點的方法,但是我們怎么來通過牛頓迭代法來優化\(l(\theta)\)呢?求解\(l(\theta)\)的最大值先要求解\(l'(\theta)\)的零點,所以上式中我們令\(f(\theta)=l'(\theta)\),於是
在邏輯回歸模型中,\(\theta\)是一個向量而不是一個實數,所以我們需要將牛頓法推廣到多維的情況,推廣公式為
其中,\(\nabla_\theta l(\theta)\)是\(l(\theta)\)的梯度,\(H^{-1}\)是\(n\)階方陣(實際上是\(n+1\)階),他被稱為\(Hessian\)矩陣,它的元素其實就是\(l(\theta)\)二階偏導數組成的
牛頓法是二階收斂,梯度下降是一階收斂,牛頓法通常比梯度下降算法收斂速度要快,只需要更少的迭代次數就能獲得最小值。然而一次牛頓迭代要比一次梯度下降更昂貴,因為它需要計算\(Hessan\)矩陣並且求它的逆,這將花費不少時間。但是當參數個數\(n\)不是太大時,總體來說速度還是要快很多。
