Machine Learning:一(基礎知識)

前言:

  最近打算稍微系統的學習下Machine learing的一些理論知識,打算採用Andrew Ng的視頻教程,具體見https://class.coursera.org/ml-003/class/index。這個是Andrew Ng在這個網站上的公開課,我聽這課程的時候,是同步聽的,然後可以提交作業。不同於網易的公開課,這個課程就講述了很簡單的幾個算法問題,後續的課程會從網易上學習而來。不過有一點很讚的是,這個課程留下的習題,非常適合新手,會一步步引導你進入境界。

  教程中的一些術語:

  Model representation:

  其實就是指學習到的函數的表達形式,可以用矩陣表示。

  Vectorized implementation:

  指定是函數表達式的矢量實現。

  Feature scaling:

  指是將特徵的每一維都進行一個尺度變化,比如說都讓其均值爲0等。

  Normal equations:

  這裏指的是多元線性迴歸中參數解的矩陣形式,這個解方程稱爲normal equations.

  Optimization objective:

  指的是需要優化的目標函數,比如說logistic中loss function表達式的公式推導。或者多元線性迴歸中帶有規則性的目標函數。

  Gradient Descent、Newton’s Method:

  都是求目標函數最小值的方法。梯度下降法和牛頓方法。

  Common variations:

  指的是規則項表達形式的多樣性。

 

  一些筆記:

  模型表達就是給出輸入和輸出之間的函數關係式,當然這個函數是有前提假設的,裏面可以含有參數。此時如果有許多訓練樣本的話,同樣可以給出訓練樣本的平均相關的誤差函數,一般該函數也稱作是損失函數(Loss function)。我們的目標是求出模型表達中的參數,這是通過最小化損失函數來求得的。一般最小化損失函數是通過梯度下降法(即先隨機給出參數的一組值,然後更新參數,使每次更新後的結構都能夠讓損失函數變小,最終達到最小即可)。在梯度下降法中,目標函數其實可以看做是參數的函數,因爲給出了樣本輸入和輸出值後,目標函數就只剩下參數部分了,這時可以把參數看做是自變量,則目標函數變成參數的函數了。梯度下降每次都是更新每個參數,且每個參數更新的形式是一樣的,即用前一次該參數的值減掉學習率和目標函數對該參數的偏導數(如果只有1個參數的話,就是導數),爲什麼要這樣做呢?通過取不同點處的參數可以看出,這樣做恰好可以使原來的目標函數值變低,因此符合我們的要求(即求函數的最小值)。即使當學習速率固定(但不能太大),梯度下降法也是可以收斂到一個局部最小點的,因爲梯度值會越來越小,它和固定的學習率相乘後的積也會越來越小。在線性迴歸問題中我們就可以用梯度下降法來求迴歸方程中的參數。有時候該方法也稱爲批量梯度下降法,這裏的批量指的是每一時候參數的更新使用到了所有的訓練樣本。

      Vectorized implementation指的是矢量實現,由於實際問題中很多變量都是向量的,所有如果要把每個分量都寫出來的話會很不方便,應該儘量寫成矢量的形式。比如上面的梯度下降法的參數更新公式其實也是可以用矢量形式實現的。矢量形式的公式簡單,且易用matlab編程。由於梯度下降法是按照梯度方向來收斂到極值的,如果輸入樣本各個維數的尺寸不同(即範圍不同),則這些參數的構成的等高線不同的方向胖瘦不同,這樣會導致參數的極值收斂速度極慢。因此在進行梯度下降法求參數前,需要先進行feature scaling這一項,一般都是把樣本中的各維變成0均值,即先減掉該維的均值,然後除以該變量的range。

     接下來就是學習率對梯度下降法的影響。如果學習速率過大,這每次迭代就有可能出現超調的現象,會在極值點兩側不斷髮散,最終損失函數的值是越變越大,而不是越來越小。在損失函數值——迭代次數的曲線圖中,可以看到,該曲線是向上遞增的。當然了,當學習速率過大時,還可能出現該曲線不斷震盪的情形。如果學習速率太小,這該曲線下降得很慢,甚至在很多次迭代處曲線值保持不變。那到底該選什麼值呢?這個一般是根據經驗來選取的,比如從…0.0001,0.001,0.003,0.01,0.03,0.1,1.0…這些參數中選,看那個參數使得損失值和迭代次數之間的函數曲線下降速度最快。

     同一個問題可以選用不同的特徵和不同的模型,特徵方面,比如單個面積特徵其實是可以寫成長和寬2個特徵的。不同模型方面,比如在使用多項式擬合模型時,可以指定x的指數項最多到多少。當用訓練樣本來進行數據的測試時,一般都會將所有的訓練數據整理成一個矩陣,矩陣的每一行就是一個訓練樣本,這樣的矩陣有時候也會叫做是“design matrix”。當用矩陣的形式來解多項式模型的參數時,參數w=inv(X’*X)*X’*y,這個方程也稱爲normal equations. 雖然X’*X是方陣,但是它的逆不一定存在(當一個方陣的逆矩陣不存在時,該方陣也稱爲sigular)。比如說當X是單個元素0時,它的倒數不存在,這就是個Sigular矩陣,當然了這個例子太特殊了。另一個比較常見的例子就是參數的個數比訓練樣本的個數還要多時也是非可逆矩陣。這時候要求解的話就需要引入regularization項,或者去掉一些特徵項(典型的就是降維,去掉那些相關性強的特徵)。另外,對線性迴歸中的normal equations方程求解前,不需要對輸入樣本的特徵進行feature scale(這個是有理論依據的)。

  上面講的函數一般都是迴歸方面的,也就是說預測值是連續,如果我的們需要預測的值只有2種,要麼是要麼不是,即預測值要麼是0要麼是1,那麼就是分類問題了。這樣我們需要有一個函數將原本的預測值映射到0到1之間,通常這個函數就是logistic function,或者叫做sigmoid function。因爲這種函數值還是個連續的值,所以對logistic函數的解釋就是在給定x的值下輸出y值爲1的概率。

  Convex函數其實指的是隻有一個極值點的函數,而non-convex可能有多個極值點。一般情況下我們都希望損失函數的形式是convex的。在分類問題情況下,先考慮訓練樣本中值爲1的那些樣本集,這時候我的損失函數要求我們當預測值爲1時,損失函數值最小(爲0),當預測值爲0時,此時損失函數的值最大,爲無窮大,所以這種情況下一般採用的是-log(h(x)),剛好滿足要求。同理,當訓練樣本值爲0時,一般採用的損失函數是-log(1-h(x)).因此將這兩種整合在一起時就爲-y*log(h(x))-(1-y)*log(1-h(x)),結果是和上面的一樣,不過表達式更緊湊了,選這樣形式的loss函數是通過最大釋然估計(MLE)求得的。這種情況下依舊可以使用梯度下降法來求解參數的最優值。在求參數的迭代公式時,同樣需要求損失函數的偏導,很奇怪的時,這時候的偏導函數和多元線性迴歸時的偏導函數結構類似,只是其中的預測函數一個是普通的線性函數,一個是線性函數和sigmoid的複合的函數。

  梯度下降法是用來求函數值最小處的參數值,而牛頓法是用來求函數值爲0處的參數值,這兩者的目的初看是感覺有所不同,但是再仔細觀察下牛頓法是求函數值爲0時的情況,如果此時的函數是某個函數A的導數,則牛頓法也算是求函數A的最小值(當然也有可能是最大值)了,因此這兩者方法目的還是具有相同性的。牛頓法的參數求解也可以用矢量的形式表示,表達式中有hession矩陣和一元導函數向量。

  下面來比較梯度法和牛頓法,首先的不同之處在於梯度法中需要選擇學習速率,而牛頓法不需要選擇任何參數。第二個不同之處在於梯度法需要大量的迭代次數才能找到最小值,而牛頓法只需要少量的次數便可完成。但是梯度法中的每一次迭代的代價要小,其複雜度爲O(n),而牛頓法的每一次迭代的代價要大,爲O(n^3)。因此當特徵的數量n比較小時適合選擇牛頓法,當特徵數n比較大時,最好選梯度法。這裏的大小以n等於1000爲界來計算。

  如果當系統的輸入特徵有多個,而系統的訓練樣本比較少時,這樣就很容易造成over-fitting的問題。這種情況下要麼通過降維方法來減小特徵的個數(也可以通過模型選擇的方法),要麼通過regularization的方法,通常情況下通過regularization方法在特徵數很多的情況下是最有效,但是要求這些特徵都只對最終的結果預測起少部分作用。因爲規則項可以作用在參數上,讓最終的參數很小,當所有參數都很小的情況下,這些假設就是簡單假設,從而能夠很好的解決over-fitting的問題。一般對參數進行regularization時,前面都有一個懲罰係數,這個係數稱爲regularization parameter,如果這個規則項係數太大的話,有可能導致系統所有的參數最終都很接近0,所有會出現欠擬合的現象。在多元線性迴歸中,規則項一般懲罰的是參數1到n(當然有的也可以將參數0加入懲罰項,但不常見)。隨着訓練樣本的增加,這些規則項的作用在慢慢減小,因此學習到的系統的參數傾向而慢慢增加。規則項還有很多種形式,有的規則項不會包含特徵的個數,如L2-norm regularization(或者叫做2-norm regularization).當然了,還有L1-norm regularization。由於規則項的形式有很多種,所以這種情形也稱爲規則項的common variations.

  在有規則項的線性迴歸問題求解中,如果採用梯度下降法,則參數的更新公式類似(其中參數0的公式是一樣的,因爲規則項中沒有懲罰參數0),不同之處在於其它參數的更新公式中的更新不是用本身的參數去減掉後面一串,而是用本身參數乘以(1-alpha*lamda/m)再減掉其它的,當然了這個數在很多情況下和1是相等的,也就很前面的無規則項的梯度下降法類似了。它的normal equation也很前面的類似,大致爲inv(X’*X+lamda*A)*X’*y,多了一項,其中A是一個對角矩陣,除了第一個元素爲0外,其它元素都爲1(在通用規則項下的情形)。這種情況下前面的矩陣一般就是可逆的了,即在樣本數量小於特徵數量的情況下是可解的。當爲logistic迴歸的情況中(此時的loss函數中含有對數項),如果使用梯度下降法,則參數的更新方程中也和線性迴歸中的類似,也是要乘以(1-alpha*lamda/m),nomal equation中也是多了一個矩陣,這樣同理就解決了不可逆問題。在牛頓法的求解過程中,加了規則項後的一元導向量都隨着改變,hession矩陣也要在最後加入lamda/m*A矩陣,其中A和前面的一樣。

  logistic迴歸與多充線性迴歸實際上有很多相同之處,最大的區別就在於他們的因變量不同,其他的基本都差不多,正是因爲如此,這兩種迴歸可以歸於同一個家族,即廣義線性模型(generalized linear model)。這一家族中的模型形式基本上都差不多,不同的就是因變量不同,如果是連續的,就是多重線性迴歸,如果是二項分佈,就是logistic迴歸,如果是poisson分佈,就是poisson迴歸,如果是負二項分佈,就是負二項迴歸,等等。只要注意區分它們的因變量就可以了。logistic迴歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更爲常用,也更加容易解釋。所以實際中最爲常用的就是二分類的logistic迴歸。

 

  參考資料:

    https://class.coursera.org/ml-003/class/index

   http://v.163.com/special/opencourse/machinelearning.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章