深度學習筆記之一些基本術語

weixin_33816946發表於2017-06-09

 

  不多說,直接上乾貨!

 

 

前言:

  最近打算稍微系統的學習下deep learing的一些理論知識,打算採用Andrew Ng的網頁教程UFLDL Tutorial,據說這個教程寫得淺顯易懂,也不太長。不過在這這之前還是複習下machine learning的基礎知識,見網頁:http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning。內容其實很短,每小節就那麼幾分鐘,且講得非常棒。

 

 

 

教程中的一些術語:

  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.01,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迴歸。

 

 

 

 

 

 

參考資料:

     http://openclassroom.stanford.edu/MainFolder/CoursePage.php?course=DeepLearning

     http://deeplearning.stanford.edu/wiki/index.php/UFLDL_Tutorial

Deep learning:一(基礎知識_1)

相關文章