林軒田機器學習技法課程學習筆記15 — Matrix Factorization

紅色石頭發表於2018-07-29

上節課我們主要介紹了Radial Basis Function Network。它的原理就是基於距離相似性(distance-based similarities)的線性組合(linear aggregation)。我們使用k-Means clustering演算法找出具有代表性的k箇中心點,然後再計算與這些中心點的distance similarity,最後應用到RBF Network中去。

1. LinearNetwork Hypothesis

回顧一下,我們在機器學習基石課程的第一節課就提到過,機器學習的目的就是讓機器從資料data中學習到某種能力skill。我們之前舉過一個典型的推薦系統的例子。就是說,假如我們手上有許多不同使用者對不同電影的排名rank,通過機器學習,訓練一個模型,能夠對使用者沒有看過的某部電影進行排名預測。

一個典型的電影推薦系統的例子是2006年Netflix舉辦的一次比賽。資料包含了480189個使用者和17770部電影,總共1億多個排名資訊。該推薦系統模型中,我們用\breve x_n=(n)表示第n個使用者,這是一個抽象的特徵,常常使用數字編號來代替具體哪個使用者。輸出方面,我們使用y_m=r_{nm}表示第n個使用者對第m部電影的排名數值。

下面我們來進一步看看這些抽象的特徵,\breve x_n=(n)是使用者的ID,通常用數字表示。例如1126,5566,6211等。這些編號並沒有數值大小上的意義,只是一種ID標識而已。這類特徵被稱為類別特徵(categorical features)。常見的categorical features包括:IDs,blood type,programming languages等等。而許多機器學習模型中使用的大部分都是數值特徵(numerical features)。例如linear models,NNet模型等。但決策樹(decision tree)是個例外,它可以使用categorical features。所以說,如果要建立一個類似推薦系統的機器學習模型,就要把使用者ID這種categorical features轉換為numerical features。這種特徵轉換其實就是訓練模型之前一個編碼(encoding)的過程。

一種最簡單的encoding方式就是binary vector encoding。也就是說,如果輸入樣本有N個,就構造一個維度為N的向量。第n個樣本對應向量上第n個元素為1,其它元素都是0。下圖就是一個binary vector encoding的例子。

經過encoding之後,輸入x_n是N維的binary vector,表示第n個使用者。輸出y_n是M維的向量,表示該使用者對M部電影的排名數值大小。注意,使用者不一定對所有M部電影都作過評價,未評價的恰恰是我們要預測的(下圖中問號?表示未評價的電影)。

總共有N個使用者,M部電影。對於這樣的資料,我們需要掌握每個使用者對不同電影的喜愛程度及排名。這其實就是一個特徵提取(feature extraction)的過程,提取出每個使用者喜愛的電影風格及每部電影屬於哪種風格,從而建立這樣的推薦系統模型。可供選擇使用的方法和模型很多,這裡,我們使用的是NNet模型。NNet模型中的網路結構是N-\breve d-M型,其中N是輸入層樣本個數,\breve d是隱藏層神經元個數,M是輸出層電影個數。該NNet為了簡化計算,忽略了常數項。當然可以選擇加上常數項,得到較複雜一些的模型。順便提一下,這個結構跟我們之前介紹的autoencoder非常類似,都是隻有一個隱藏層。

說到這裡,有一個問題,就是上圖NNet中隱藏層的tanh函式是否一定需要呢?答案是不需要。因為輸入向量x是經過encoding得到的,其中大部分元素為0,只有一個元素為1。那麼,只有一個元素x_n與相應權重的乘積進入到隱藏層。由於x_n=1,則相當於只有一個權重值進入到tanh函式進行運算。從效果上來說,tanh(x)與x是無差別的,只是單純經過一個函式的計算,並不影響最終的結果,修改權重值即可得到同樣的效果。因此,我們把隱藏層的tanh函式替換成一個線性函式y=x,得到下圖所示的結構。

由於中間隱藏層的轉換函式是線性的,我們把這種結構稱為Linear Network(與linear autoencoder比較相似)。看一下上圖這個網路結構,輸入層到隱藏層的權重W_{ni}^{(1)}維度是Nx\breve d,用向量V^T表示。隱藏層到輸出層的權重W_{im}^{(2)}維度是\breve dxM,用矩陣W表示。把權重由矩陣表示之後,Linear Network的hypothesis 可表示為:

h(x)=W^TVx

如果是單個使用者x_n,由於X向量中只有元素x_n為1,其它均為0,則對應矩陣V只有第n列向量是有效的,其輸出hypothesis為:

h(x_n)=W^Tv_n

2. Basic Matrix Factorization

剛剛我們已經介紹了linear network的模型和hypothesis。其中Vx可以看作是對使用者x的一種特徵轉換\Phi(x)。對於單部電影,其預測的排名可表示為:

h_m(x)=w_m^T\Phi(x)

推導完linear network模型之後,對於每組樣本資料(即第n個使用者第m部電影),我們希望預測的排名w_m^Tv_n與實際樣本排名y_n儘可能接近。所有樣本綜合起來,我們使用squared error measure的方式來定義E_{in}E_{in}的表示式如下所示:

上式中,灰色的部分是常數,並不影響最小化求解,所以可以忽略。接下來,我們就要求出E_{in}最小化時對應的V和W解。

我們的目標是讓真實排名與預測排名儘可能一致,即r_{nm}\approx w_m^Tv_n=v_n^Tw_m。把這種近似關係寫成矩陣的形式:R\approx V^TW。矩陣R表示所有不同使用者不同電影的排名情況,維度是NxM。這種用矩陣的方式進行處理的方法叫做Matrix Factorization。

上面的表格說明了我們希望將實際排名情況R分解成兩個矩陣(V和W)的乘積形式。V的維度是\breve dxN的,N是使用者個數,\breve d可以是影片型別,例如(喜劇片,愛情片,懸疑片,動作片,…)。根據使用者喜歡的型別不同,賦予不同的權重。W的維度是\breve dxM,M是電影數目,\breve d同樣是影片型別,該部電影屬於哪一型別就在那個型別上佔比較大的權重。當然,\breve d維特徵不一定就是影片型別,還可以是其它特徵,例如明顯陣容、年代等等。

那麼,Matrix Factorization的目標就是最小化E_{in}函式。E_{in}表示式如下所示:

E_{in}中包含了兩組待優化的引數,分別是v_nw_m。我們可以借鑑上節課中k-Means的做法,將其中第一個引數固定,優化第二個引數,然後再固定第二個引數,優化第一個引數,一步一步進行優化。

v_n固定的時候,只需要對每部電影做linear regression即可,優化得到每部電影的\breve d維特徵值w_m

w_m固定的時候,因為V和W結構上是對稱的,同樣只需要對每個使用者做linear regression即可,優化得到每個使用者對\breve d維電影特徵的喜愛程度v_n

這種演算法叫做alternating least squares algorithm。它的處理思想與k-Means演算法相同,其演算法流程圖如下所示:

alternating least squares algorithm有兩點需要注意。第一是initialize問題,通常會隨機選取v_nw_m。第二是converge問題,由於每次迭代更新都能減小E_{in}E_{in}會趨向於0,則保證了演算法的收斂性。

在上面的分析中,我們提過Matrix Factorization與Linear Autoencoder的相似性,下圖列出了二者之間的比較。

Matrix Factorization與Linear Autoencoder有很強的相似性,都可以從原始資料彙總提取有用的特徵。其實,linear autoencoder可以看成是matrix factorization的一種特殊形式。

3. Stochastic Gradient Descent

我們剛剛介紹了alternating least squares algorithm來解決Matrix Factorization的問題。這部分我們將討論使用Stochastic Gradient Descent方法來進行求解。之前的alternating least squares algorithm中,我們考慮了所有使用者、所有電影。現在使用SGD,隨機選取一筆資料,然後只在與這筆資料有關的error function上使用梯度下降演算法。使用SGD的好處是每次迭代只要處理一筆資料,效率很高;而且程式簡單,容易實現;最後,很容易擴充套件到其它的error function來實現。

對於每筆資料,它的error function可表示為:

上式中的err是squared error function,僅與第n個使用者v_n,第m部電影w_m有關。其對v_nw_m的偏微分結果為:

\nabla v_n=-2(r_{nm}-w_m^Tv_n)w_m

\nabla w_m=-2(r_{nm}-w_m^Tv_n)v_n

很明顯,\nabla v_n\nabla w_m都由兩項乘積構成。(忽略常數因子2)。第一項都是r_{nm}-w_m^Tv_n,即餘數residual。我們在之前介紹的GBDT演算法中也介紹過餘數這個概念。\nabla v_n的第二項是w_m,而\nabla w_m的第二項是v_n。二者在結構上是對稱的。

計算完任意一個樣本點的SGD後,就可以構建Matrix Factorization的演算法流程。SGD for Matrix Factorization的演算法流程如下所示:

在實際應用中,由於SGD演算法簡單高效,Matrix Factorization大多采用這種演算法。

介紹完SGD for Matrix Factorization之後,我們來看一個實際的應用例子。問題大致是這樣的:根據現在有的樣本資料,預測未來的趨勢和結果。顯然,這是一個與時間先後有關的預測模型。比如說一個使用者三年前喜歡的電影可能現在就不喜歡了。所以在使用SGD選取樣本點的時候有一個技巧,就是最後T次迭代,儘量選擇時間上靠後的樣本放入到SGD演算法中。這樣最後的模型受這些時間上靠後的樣本點影響比較大,也相對來說比較準確,對未來的預測會比較準。

所以,在實際應用中,我們除了使用常規的機器學習演算法外,還需要根據樣本資料和問題的實際情況來修改我們的演算法,讓模型更加切合實際,更加準確。我們要學會靈活運用各種機器學習演算法,而不能只是照搬。

4. Summary of Extraction Models

從第12節課開始到現在,我們總共用了四節課的時間來介紹Extraction Models。雖然我們沒有給出Extraction Models明確的定義,但是它主要的功能就是特徵提取和特徵轉換,將原始資料更好地用隱藏層的一些節點表徵出來,最後使用線性模型將所有節點aggregation。這種方法使我們能夠更清晰地抓住資料的本質,從而建立最佳的機器學習模型。

下圖所示的就是我們介紹過的所有Extraction Models,除了這四節課講的內容之外,還包括之前介紹的Adaptive/Gradient Boosting模型。因為之前筆記中都詳細介紹過,這裡就不再一一總結了。

除了各種Extraction Models之外,我們這四節課還介紹了不同的Extraction Techniques。下圖所示的是對應於不同的Extraction Models的Extraction Techniques。

最後,總結一下這些Extraction Models有什麼樣的優點和缺點。從優點上來說:

  • easy:機器自己完成特徵提取,減少人類工作量
  • powerful:能夠處理非常複雜的問題和特徵提取

另一方面,從缺點上來說:

  • hard:通常遇到non-convex的優化問題,求解較困難,容易得到區域性最優解而非全域性最優解
  • overfitting:模型複雜,容易造成過擬合,需要進行正則化處理

所以說,Extraction Models是一個非常強大的機器學習工具,但是使用的時候也要小心處理各種可能存在的問題。

5. 總結

本節課主要介紹了Matrix Factorization。從電影推薦系統模型出發,首先,我們介紹了Linear Network。它從使用者ID編碼後的向量中提取出有用的特徵,這是典型的feature extraction。然後,我們介紹了基本的Matrix Factorization演算法,即alternating least squares,不斷地在使用者和電影之間互動地做linear regression進行優化。為了簡化計算,提高運算速度,也可以使用SGD來實現。事實證明,SGD更加高效和簡單。同時,我們可以根據具體的問題和需求,對固有演算法進行一些簡單的調整,來獲得更好的效果。最後,我們對已經介紹的所有Extraction Models做個簡單的總結。Extraction Models在實際應用中是個非常強大的工具,但是也要避免出現過擬合等問題。

註明:

文章中所有的圖片均來自臺灣大學林軒田《機器學習技法》課程

更多AI資源請關注公眾號:AI有道(ID:redstonewill)

相關文章