【Matrix Factorization】林軒田機器學習技法


在NNet這個系列中講了Matrix Factorization感覺上怪怪的,但是聽完第一小節課程就明白了。

林首先介紹了機器學習里面比較困難的一種問題:categorical features

這種問題的特征就是一些ID編號這類的,不是numerical的。

如果要處理這種情況,需要encoding from categorical to numerical

最常用的一種encoding方法就是binary vector encoding(也是實習工作中用過的路子),將binary vector作為輸入。

聯系之前學過的模型,可以用NNet來學習這種映射關系。

但是,binary vector畢竟不是numerical vector,由於每個輸入只在一個維度上是1,其余都是0,因此,NNet中的tanh就沒啥必要了(因為每個輸入數據x喂到每個tanh的只有一個維度的值,輸出也只受這個一個維度的值影響,且tanh是關於x是單調的)。

所以,有了如下的簡化版的Linear Network,即把tanh換成了Σ求和。

這里對符號進行一下說明:

1)V是d×N的矩陣(d是hidden unit的個數,N是user的個數):V的每個column代表每個user對hidden unit的權重

2)W’是M×d的矩陣(M是movie的個數):M的每個row代表的是每個movie關於hidden unit的權重

考慮每個xn是binary vector,則h(xn) = W’vn(動筆推導一下就OK了):Linear Network的輸出h(xn)是一個M維的vector,代表每個user對於各個movie的rating。

綜上,Linear Network對於recommender system來說,需要學習的一個是V矩陣(user-hidden unit或latent factor),另一個是W矩陣(item-hidden或latent factor)。

在介紹學習方法之前,林重新整理了一下Linear Network問題。

linear network對於m-th movie來說:就是有一個對應的Wm'來對轉換后的x進行線性加權hm(x) = Wm' fi(x)

因此,學習目標也了然了:

1)transform的系數矩陣

2)linear model的系數矩陣

綜上,由於Linear Network的輸入是binary vector的,因此對原Linear Network問題做一個變形:rnm = Wm'Vn → R = V‘W,即轉化成一個matrix factorization問題。(個人非常喜歡這段motivation的講解,matrix factorization為什么在NNet這部分出現也理解了

關於Linear Network轉化成Matrix Factorization問題的推導,按照個人理解,我再多寫兩筆:

h(x) = W'Vx (在前面的PPT中找

    = (Vx)'W (由於h(x)是一個向量所以顛倒一下沒關系了,輸出h(x)由原來的列向量變成了行向量了,但對應位置的值不變

    = x'V'W ((AB)'=B'A', 矩陣轉置運算性質

則h(X) = X'V'W (按行補上所有的輸入xn=1...N

     = I(N) V'W (X’矩陣每一行代表一個輸入的binary vector,這里按照編號順序排布X,所以X'就是一個單位陣嘍

       = V'W (原始的Linear Network問題轉化為Basic Matrix Factorization問題了

並且,這種分解是可以加上些物理意義的:可以把每個hidden unit當成是一種隱含特征(喜劇、動作...)。V和W代表user與movie與hidden unit的關系。

下面講求解模型的方法:

最優化的問題有兩組變量,可以模仿K-means學過的alternating minimization模式:輪流最優化,即alternating least square algorithm

1)固定V(相當於user對hidden unit的權重固定):需要挨個學習Wm(m=1,...,M);學習每個Wm的時候,喂進去的是<V, Rm-th column)> n=1,...M,詳單與少了bias的linear regression

這里容易產生一個思維誤區:矩陣大部分的位置上都是空的,這些位置的值在linear regression中怎么處理呢?

想了一下,這些值根本就不在linear regression的求解范圍中(注意,只對有rating評分的那些點計算誤差

2)V與M的關系類似,學的方法也類似,不贅述

整個Alternating Least Squares的算法流程如下:

1)初始化的時候randomly一下

2)由於Ein是有下限的,所以能converge

這里,林還提了一句:Linear Autoencoder(PCA)是一種特殊的Matrix Factorization。

另一種求解Matrix Factorzation的方法,也是更常用的一種就是Stochastic Gradient Descent方法。

在最優化Ein的時候,不考慮前面的常數項,考慮后面的式子。

由於有兩個變量,因此需要分別求梯度。可以自行查閱SGD的算法,這里就是最簡單的求導,不再贅述。

這里多提一句:為啥對Vn的求導只用考慮 (rnm - Wm'Vn)²這一項呢?

因為,這里求導有兩個變量,Vn和Wm:

1)不含有Vn的項自然不用考慮了

2)含有Vn同時含有W1,...WM的項中:

  a. 如果是batch gradient,這些含有Vn的項都應該考慮(挨個求出來,再取個平均這類的

  b. 如果是stochastic gradient的方法,只需要考慮Wm這一個點即可了(前提是rnm有值),所以梯度的式子也就留下這一項了

個人感覺細節還是扣清楚好,有助於理解復雜的問題

這里有一個講梯度算法並行化的文章:http://www.superchun.com/machine-learning/parallel-matrix-factorization.html

總體的算法流程如下:

最后,林還稍稍講了一下KDD cup中的SGD使用trick:

這個trick叫time-deterministic GD : 即,在GD的最后一輪,不再用隨機選點的策略了,改用選擇時間軸上最近的幾個點。這樣對於有時間屬性的數據,可以達到更好的效果。

 


免責聲明!

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



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