線性模型、最優化方法(二)


一、線性回歸

一般的,線性回歸模型表示為

\[h_{\theta}(x)=\theta_0+\theta_1x_1+...+\theta_nx_n=\sum_{i=0}^{n}\theta_ix_i=\theta^Tx \]

上式中令\(x_0=1\),這樣\(x\)實際上是\(n+1\)維,\(x=[1,x_1,x_2,…,x_n]^T\).當我們知道訓練數據集后怎樣得到參數\(\theta\)的值呢?一個比較合理的想法是盡可能的讓\(h_{\theta}(x)\)接近真實值\(y\),下面我們來定義一個函數來度量\(h_{\theta}\)\(y\)的距離:

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

其中\(m\)表示訓練集中樣本個數,\(x^{(i)}\)\(y^{(i)}\)分別表示第\(i\)個樣例的特征值和真實結果。我們希望找到一個\(\theta\)使的\(J(\theta)\)最小。下面分別采用梯度下降算法和最小二乘法來求解\(\theta\)

二、梯度下降算法

我們希望能找到\(\theta\)使得\(J(\theta)\)達到最小,於是我們可以使一個搜素算法,初始化\(\theta\)為一個任意值,在迭代過程中不斷的更新\(\theta\)使得\(J(\theta)\)更小,直到收斂為止(可以認為\(J(\theta)\)不再改變)。下面我們來考慮下梯度下降算法,它先給\(\theta\)一個初始化值,然后通過下面公式來更新\(\theta\)

\[\theta_j:=\theta_j-\alpha\frac{\partial}{\partial \theta_{j}}J(\theta)\quad 其中 \quad j = 0,1,...,n \]

上式中\(\alpha\)稱為學習速率。為了理解上面的算法,我們需要推導一下偏微分部分,推導過程中我們只考慮一個樣例(x,y),然后只需要把所有的加起來就可以了

\[\frac{\partial}{\partial \theta_{j}}J(\theta)=\frac{1}{2}\frac{\partial}{\partial \theta_{j}}(h_{\theta}(x)-y)^2 \\ =(h_{\theta}(x)-y)\frac{\partial}{\partial \theta_{j}}(\sum_{i=0}^n\theta_i x_i-y) \\ =(h_{\theta}(x)-y)x_j \quad \quad \quad \quad \quad \quad \quad \]

對於單獨的第\(i\)個樣本,更新規則為

\[\theta_j:=\theta_j-\alpha(h_{\theta}(x^{(i)})-y^{(i)})x_{j}^{(i)}\quad 其中 \quad j = 0,1,...,n \]

當有\(m\)個樣本時,更新規則為

\[\theta_j:=\theta_j-\alpha \sum_{i=1}^m(h_{\theta}(x^{(i)})-y^{(i)})x_j^{(i)}\quad 其中 \quad j = 0,1,...,n \]

上式每次迭代將所有樣本考慮進來更新\(\theta\),這種方法叫做批量梯度下降。梯度下降容易陷入一個局部的最優解,事實上\(J(\theta)\)是一個凸函數,沒有所謂的局部最優解,它只有一個全局最優解。

​ 批量梯度下降一般工作的很好,考慮下面的算法:![屏幕快照 2018-03-08 18.01.18](屏幕快照 2018-03-08 18.01.18.png)

該算法每一個樣例都更新了\(\theta\)一次,這個算法被稱作隨機梯度下降(或增量梯度下降)SGD,當\(m\)很大的時候,批量梯度下會很耗時,通常,隨機梯度下降比批量梯度下降要快很多,然而它可能永遠達不到最小值,並在最小值附近震盪,而實際上這種近似最小值已經夠了。在樣本量比較大的情況下,隨機梯度下降比梯度下降更實用。

三、最小二乘法

梯度下降算法給出了一種最小化\(J(\theta)\)的方法。這里將介紹第二種方法:最小二乘法。我們先求\(J(\theta)\)的偏導數,然后令偏導數為0,用等式解出\(\theta\),此時的\(\theta\)使得\(J(\theta)\)最小(\(J(\theta)\)是下凸函數)。

​ 先介紹下矩陣跡相關知識,對於一個\(n \times n\)的方陣\(A\),定義它的跡為

\[tr(A)=\sum_{i=1}^nA_{ii} \]

即矩陣對角線的和。實數的跡是它本身,有關跡的一些性質

\[tr(A)=tr(A^T) \quad \quad \quad\quad\quad\quad\quad\quad\\ tr(A+B)=tr(A)+tr(B)\quad \quad \quad \\ tr(kA)=ktr(A)\quad \quad \quad\quad\quad\quad\quad\;\;\\ tr(AB)=tr(BA)\quad \quad \quad\quad\quad\quad\quad\;\; \\ tr(ABC)=tr(CAB)=tr(BCA) \quad\\ tr(ABCD)=tr(BCDA)=tr(CDBA)=tr(DABC) \quad\\ \]

不加證明的給出有關矩陣微分結論

\[\nabla_A tr(AB)=B^T \quad \quad \quad \quad \quad \quad \quad \quad \\ \nabla_{A^T}f(A)=(\nabla_Af(A))^T \quad \quad \quad \quad \quad\\ \nabla_Atr(ABA^TC)=CAB+C^TAB^T \\ \nabla_A |A|=|A|(A^{-1})^T \quad \quad \quad \quad\quad \quad\;\; \]

其中\(|A|\)表示\(A\)的行列式,第四個式子中\(A\)可逆。定義\(X\)\(m \times n\)(實際上是\(m \times (n+1)\))的矩陣,用它表示訓練的數據特征集

\[X=[x^{(1)},x^{(2)},...,x^{(m)}] \]

定義真實值向量\(y=[y^{(1)},y^{(2)},…,y^{(m)}]^T\),於是

\[X^T\theta - y =[h_{\theta}( x^{(1)})-y^{(1)},h_{\theta}( x^{(2)})-y^{(2)},...,h_{\theta}( x^{(m)})-y^{(m)}]^T \]

我們知道對於一個\(n\)維向量\(z\)\(z^Tz=\sum_{i=1}^{n}z_{i}^2\),於是

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

下面來對\(J(\theta)\)求導

\[\nabla_{\theta} J(\theta)=\frac{1}{2}\nabla_{\theta}(X^T\theta-y)^T( X^T\theta-y) \quad\quad\quad\quad\quad\quad\quad\quad\\ =\frac{1}{2}\nabla_{\theta}(\theta^TXX^T\theta-2\theta^T Xy+y^Ty) \quad\quad \;\;\\ =\frac{1}{2}\nabla_{\theta}(tr\;\theta^TXX^T\theta-2\;tr\;\theta^T Xy+y^Ty) \\ =\frac{1}{2}\nabla_{\theta}tr\;\theta\theta^TXX^T-(\nabla_{\theta^T} tr\;\theta^T Xy)^T \quad \\ =XX^T\theta-Xy \quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\;\; \]

\(\nabla_{\theta} J(\theta)=0\)\(XX^T\theta=Xy\),求解

\[\theta = (XX^T)^{-1}Xy \]

這樣我們直接求出來了\(\theta\)的解析解,這就是最小二乘法。

四、有關概率的解釋

當我們求解回歸問題時,為什么選擇線性回歸?為什么代價函數\(J\)是合理的呢?這里我們將給出一個概率性的假設,然后很自然的推導出最小二乘法。

我們結果的目標值和預測值滿足以下等式

\[y^{(i)}=\theta^Tx^{(i)}+\epsilon^{(i)} \]

其中\(\epsilon^{(i)}\)表示預測誤差,我們再繼續假設\(\epsilon^{(i)}\)滿足獨立同分布,它們服從均值為0,方差為\(\delta\)的高斯分布\(\epsilon ^{(i)}\sim N(0,\delta^{2})\),概率密度函數即為

\[p(\epsilon ^{(i)})=\frac{1}{\sqrt{2 \pi}\delta}exp(-\frac{(\epsilon^{(i)})^2}{2\delta}) \]

於是有\(y^{(i)}\sim N(\theta^Tx^{(i)},\delta^2)\)分布,則

\[p(y^{(i)}|x^{(i)} ;\theta)=\frac{1}{\sqrt{2 \pi}\delta}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\delta}) \]

需要注意\(p(y^{(i)}|x^{(i)} ;\theta)\)中德\(\theta\)是一個確定的值,並不是隨機變量,這個和\(p(y^{(i)}|x^{(i)} ,\theta)\)是不同的,此處的\(\theta\)是一個隨機變量。我們希望觀測概率最大,也就是關於觀測值的似然函數

\[L(\theta)=L(\theta;x,y)=p(y|x;\theta) \]

注意前面我們假設了隨機變量\(\epsilon^{(i)}\) 是相互獨立的,所以

\[L(\theta)=\prod_{i=1}^mp(y^{(i)}|x^{(i)})=\prod_{i=1}^m\frac{1}{\sqrt{2 \pi}\delta}exp(-\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\delta}) \]

現在給出\(y^{(i)},x^{(i)}\),如何選擇參數\(\theta\)使得\(L(\theta)\)最大呢?這中方法被稱極大似然估計。我們取對數似然函數

\[l(\theta)=ln\;L(\theta)=\frac{m}{ln\;(\sqrt{2\pi}\delta)}-\sum_{i=1}^m\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2\delta} \]

我們需要最大化\(l(\theta)\)也就是得極小化

\[\sum_{i=1}^m\frac{(y^{(i)}-\theta^Tx^{(i)})^2}{2}=J(\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)}\)一個常用的權重

\[w^{(i)}=exp(-\frac{(x^{(i)}-x)^2}{2\tau^2}) \]

這個可以內比高斯分布的圖形,但事實上它們沒半毛錢關系。距離\(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)\)的形式

\[h_{\theta}(x)=g(\theta^Tx)=\frac{1}{1+exp(-\theta^Tx)} \]

其中

\[g(z)=\frac{1}{1+e^{-z}} \]

稱為\(sigmiod\)函數着或logistic函數。sigmoid函數將\(\theta^Tx\)映射為\(0\to 1\)的概率,sigmoid函數還有一個很好的性質

\[g(z)'=g(z)(1-g(z)) \]

那么給出了邏輯回歸模型,我們如何得到參數\(\theta\),和前面最小二乘法概率解釋做法一樣,可以采用極大似然估計方法來求解參數\(\theta\).我們假設

\[P(y=1|x;\theta)=h_{\theta}(x) \quad\quad \\ P(y=0|x;\theta)=1-h_{\theta}(x) \]

注意到上面兩個式子可以寫成

\[P(y|x;\theta)=h_{\theta}(x)^y(1-h_{\theta}(x))^{1-y} \]

我們假設有\(m\)個訓練樣本相互獨立,似然函數為

\[L(\theta)=\prod_{i=1}^mp(y|x;\theta)\quad\quad\quad\quad \quad\quad\quad\quad\quad\quad \\ =\prod^{m}_{i=1}h_{\theta}(x^{(i)})^{y^{(i)}}(1-h_{\theta}(x))^{1-y^{(i)}} \]

然后再化簡為對數似然函數

\[l(\theta)=\sum_{i=1}^m [y^{(i)}ln\;h_\theta(x)+(1-y^{(i)})ln\;(1-h_\theta(x))] \]

要最大化\(l(\theta)\),我們可以向前面那樣,使用梯度上升算法根據下面迭代公式

\[\theta := \theta +\alpha \nabla_\theta l(\theta) \]

更新\(\theta\).我們用一個樣例來求導,然后用隨機梯度上升算法求解。

\[\frac{\partial}{\partial \theta_j}l(\theta)=[\frac{y}{g(\theta^Tx)}-\frac{1-y}{1-g(\theta^Tx)}]\frac{\partial}{\theta_j}g(\theta^Tx) \\ =\frac{y-g(\theta^Tx)}{g'(\theta^Tx)}g'(\theta^Tx)x_j=(y-h_\theta(x))x_j \]

這個形式和最小二乘法得到的一樣,區別是模型\(h_\theta(x)\)不一樣。我們得到的隨機梯度上升迭代公式為

\[\theta_j := \theta_j +\alpha (y^{(i)}-h_\theta(x^{(i)}))x_j \quad foreach \;j \;from \; 1 \to n \]

七、感知機模型

我們現在來討論一個具有歷史意義的算法,考慮修改邏輯回歸算法讓結果強制映射為0和1,修改\(sigmoid\)函數為下面形式

\[g(z)=\left \{ \begin{matrix} 0 & z<0\\ 1 & z \ge 0 \end{matrix} \right . \]

於是

\[h_\theta(x)=g(\theta^Tx)=\left \{ \begin{matrix} 0 & \theta^Tx<0\\ 1 & \theta^Tx \ge 0 \end{matrix} \right . \]

我們得到的\(\theta\)學習規則與前面線性模型一樣

\[\theta_j=\theta_j+\alpha(y^{(i)}-h_\theta(x^{(i)}))x_j^{(i)} \]

這樣,我們就得到了感知機學習算法。在過去,感知機被粗略的認為是大腦中的一個簡單的神經元,需要注意盡管感知機算法在形式上和前面討論的算法相似,但它與邏輯回歸和最小二乘回歸實際上是不同的模型。特別是將感知機賦予概率的意義,或者是利用極大似然估計來推導它。

八 牛頓法

以邏輯回歸為例,來討論另一個最優化算法:牛頓法。下面使用牛頓法來最大化\(l(\theta)\).牛頓法的思想就是通過迭代來找到函數的零點。特別的,假設我們有一個函數\(f:\textbf{R} \mapsto \textbf{R}\),我們想找到一個\(\theta\)滿足\(f(\theta)=0\),這里\(\theta \in R\),牛頓法的迭代公式為

\[\theta :=\theta-\frac{f(\theta)}{f'(\theta)} \]

這種方法通常有一個直觀的解釋,我們可以通過一個線性函數來近似\(f\),該線性函數在當前猜測的\(\theta\)點處與\(f\)相切,接下來求解線性函數零點,並讓下一個猜測點在線性函數的零點位置,如下圖![屏幕快照 2018-03-11 11.10.31](../屏幕快照 2018-03-11 11.10.31.png)

牛頓迭代法給出了一個求解零點的方法,但是我們怎么來通過牛頓迭代法來優化\(l(\theta)\)呢?求解\(l(\theta)\)的最大值先要求解\(l'(\theta)\)的零點,所以上式中我們令\(f(\theta)=l'(\theta)\),於是

\[\theta := \theta - \frac{l'(\theta)}{l''(\theta)} \]

在邏輯回歸模型中,\(\theta\)是一個向量而不是一個實數,所以我們需要將牛頓法推廣到多維的情況,推廣公式為

\[\theta :=\theta - H^{-1}\nabla_\theta l(\theta) \]

其中,\(\nabla_\theta l(\theta)\)\(l(\theta)\)的梯度,\(H^{-1}\)\(n\)階方陣(實際上是\(n+1\)階),他被稱為\(Hessian\)矩陣,它的元素其實就是\(l(\theta)\)二階偏導數組成的

\[H^{-1}_{i,j}=\frac{\partial^2 \theta}{\partial \theta_i \partial \theta_j} \]

牛頓法是二階收斂,梯度下降是一階收斂,牛頓法通常比梯度下降算法收斂速度要快,只需要更少的迭代次數就能獲得最小值。然而一次牛頓迭代要比一次梯度下降更昂貴,因為它需要計算\(Hessan\)矩陣並且求它的逆,這將花費不少時間。但是當參數個數\(n\)不是太大時,總體來說速度還是要快很多。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM