推荐系统笔记:无任何限制的矩阵分解
1 非稀疏矩陣的矩陣分解
????????假設我們有各個條目均有值的觀測矩陣R,我們希望用低維矩陣U,V的乘積來近似它。目標方程如下:
?2 稀疏矩陣的矩陣分解
? ? ? ? 我們用S記錄所有有值的(i,j)點對
? ? ? ?預測矩陣的每一個條目如下計算:
?????????
? ? ? ? 那么此時觀測矩陣和預測矩陣每一個條目的差距為
?????????
?此時,目標方程為(只考慮觀測矩陣有數值的那些條目):
2.1 梯度下降解法?
? ? ?我們可以使用梯度下降來計算J的偏微分
? ?
?
我們把這些偏微分拼成一個向量,這個向量的維度是 mk+nk維,記這些偏微分組成的向量為
與此同時,我們記這些偏微分對應的U和V的條目組成的 mk+nk維向量維
于是我們有如下的更新方程:
?
??
梯度下降方式如下:
我們也可以直接用矩陣運算的方式來實現梯度下降
首先構造偏差矩陣(其中R中 沒有數值的那些條目對應的E 為0)
?然后我們可以用如下方式更新U,V矩陣
?
2.1.2 SGD?
????????從上面我們不難發現,更新是評級矩陣中觀察條目的誤差的線性函數。
????????更新可以通過其他方式執行,將其分解為與單個觀察到的條目(而不是所有條目)中的錯誤相關聯的更小的組件。
? ? ? ? 換言之,每一次更新我不是要看到所有S中的(i,j),然后再更新;我看到一個(i,j),就利用它所蘊涵的信息進行更新
?????????我們可以在R中一次隨機觀察到一個條目,并只更新因子矩陣中相關的2·k項,而不是全部(m·k + n·k)項
?
? ? ? ? 記表示u的第i行,那么我們有:
?????????
?????????
?
????????在實際應用中,SGD的收斂速度比2.1中的方法快,但2.1中的方法 收斂趨勢更平穩。?
????????這是因為在后一種情況下,U和V的條目是同時更新的,使用的是所有觀察到的條目,而不是單個隨機選擇的觀察到的條目。
????????這種隨機梯度下降的噪聲近似有時會影響解的質量和收斂的平滑性。一般情況下,當數據量非常大且計算時間是主要瓶頸時,采用隨機梯度下降法SGD更好。
????????在其他“折衷”方法中,使用了小批量(mini-batch——,其中使用觀察到的條目的子集來構造更新。它在解決方案質量和計算效率之間提供了權衡。
3 初始化
????????另一個問題是如何初始化。例如,可以將矩陣的每一項初始化為(?1,1)中的小數字。
????????然而,初始化的選擇會影響最終解決方案的質量。
????????可以使用一些啟發式方法來提高質量。例如,可以使用一些簡單的基于svd的啟發式方法來創建一個近似的初始化。?(這個會在基于SVD的推薦系統中介紹)
4 正則化
????????當評級矩陣R是稀疏的且觀測到的條目相對較少時,另一種問題出現了。
? ? ? ??在這種情況下,打分數據會很少,這會導致過擬合。(當訓練數據有限時,過擬合也是分類中常見的問題。)
????????解決這個問題的一種常見方法是使用正則化。正則化減少了模型過度擬合的趨勢,代價是在模型中引入了一定的偏差。
????????正則化的思想是不讓U和V中的系數值太大,以促進模型穩定性。?
? ? ? ? 于是在之前目標函數的基礎上,新增了這一個正則項
? ? ? ? 這是一種標準的方法,在許多形式的分類和回歸中都使用了它。參數λ一般是非負的,它控制正則化項的權值
? ? ? ? 還是和之前一樣,于是正則化的目標函數可以寫成
?
?同樣可以采用梯度下降進行優化
?
用矩陣形式可以寫成(E也是有觀測數值的地方有值,沒有觀測數值的地方為0)
?
可以發現這時候U和V的系數 1-αλ 在每一步縮小了 U和V的參數,這就是正則化的作用
同樣地,也可以采用 SGD進行優化:
?
用向量形式表示,則有:
?5?增量潛在成分訓練?Incremental Latent Component Training
一種變體是增量地訓練潛在成分
????????我們首先用SGD訓練所有q=1時候的,(也就是U的第一列和V的第一列),不斷迭代直至收斂?
? ? ? ? 等和?收斂完成后?,我們計算這兩個向量相乘得到的矩陣
?
? ? ? ? 然后我們更新觀測矩陣R’=R-,之后對q=2做同樣的操作
?
? ? ? ? 如此往復,直到q=k
?
? ? ? ? 然后我們將這k個求出來的矩陣相加,就是我們用增量潛在成分訓練得到的預測矩陣
????????得到的方法提供了所需的矩陣分解,因為總的秩k分解可以表示為k個秩1分解的和:
????????
?由于一次優化的變量較少,這種方法可以使收斂速度更快、更穩定
6?交替最小二乘
? ? ? ? SGD是一種有效的優化方法。另一方面,它對初始化和選擇步長的方式都相當敏感。其他優化方法包括使用交替最小二乘(ALS),它通常更穩定
? ? ? ? ALS的思路如下:
? ? ? ? (1)固定U,我們通過將這個問題作為一個最小二乘回歸問題來求解V的每n行。
????????比如我們想求解V的第j行,那我們就希望去最小化這是一個的一個最小二乘問題,其中所有的我們目前視為定值常量
? ? ? ? 于是V中的條目都可以使用最小二乘法來進行求解
? ? ? ? 由于不同條目之間的最小二乘問題是互相獨立的,因此可以并行計算
? ? ? ? (2)同樣的方法,固定V,求解U
? ? ? ? 迭代(1)(2)兩步,直至收斂
?
?7 使用用戶和條目偏差
????????一種無約束MF的變體能夠了解用戶和商品偏好。
????????為了討論的目的,假設評級矩陣是以均值0為中心的,預處理步驟是從所有條目中減去整個評級矩陣的整體平均μ。利用潛因子模型預測條目后,將μ值加回預測值作為后處理步驟。
????????因此,在本小節中,我們將簡單地假設評級矩陣R已經以這種方式居中,忽略預處理和后處理步驟。
????????與每個用戶i相關聯,我們有一個變量oi,它表示用戶對商品評級的一般偏差。例如,如果用戶i是一個慷慨的人,他傾向于給所有的物品打分,那么變量oi將是一個正的量。另一方面,對于一個壞脾氣的人來說,oi的值是負的,因為他對大多數項目的評價都是負面的。
????????同樣,變量pj表示項目j評級的偏差。高度喜歡的項目(如票房大片)的pj值往往更大(正),而幾乎所有人都不喜歡的項目的pj值則為負值。
? ? ? ? 這里所說的模型的工作是以數據驅動的方式來學習oi和pj的值。
????????和原始MF的主要不同是,預測矩陣的第(i, j)個條目的一部分由oi + pj組成,另一部分由潛在因素矩陣乘積的第(i, j)個條目組成。因此,條目(i, j)的評分預測值由下式給出:
????????
? ? ? ? 于是誤差項可以寫成
?
于是整體的目標函數可以改寫成?
?????????結果表明,這個問題與無約束矩陣分解的區別只是很小的程度。
????????我們可以增加因子矩陣的大小來合并這些偏差變量,而不是對用戶和商品使用單獨的偏差變量oi和pj。
????????我們需要為每個因子矩陣U和V增加兩列,以創建大小分別為m × (k + 2)和n × (k + 2)的更大的因子矩陣。
????????每個因子矩陣的后兩列是特殊的,因為它們對應于偏置分量。具體地說,我們有
這樣的話,我們進行的時候就會得到?
?
于是我們修改后的目標方程可以寫成:
?
?????????由于問題表述方式的微小變化,只需對梯度下降法進行相應的微小改變。(只是V的第k+1列,U的第k+2列必須永遠為1,不進行更新)
? ?
?????????7.1 有效的原因
????????一個自然的問題是,為什么這種方法比無約束矩陣分解執行得更好。
????????在因子矩陣的最后兩列上添加約束只會降低全局解的質量,因為現在是在更小的解空間上尋找最優解。
????????然而,在許多情況下,添加這些約束會使解決方案產生偏差,同時減少過擬合。
????????換句話說,這種直觀約束的添加通常可以提高學習算法對不可見條目的通用性,即使某些觀測條目的誤差可能更高。
????????當用戶或項目觀察到的評級數量很少時,這特別有用。偏見變量為評級添加了一個組件,它對用戶或項目都是全局的。當可用的數據有限時,這種全局屬性非常有用。
????????作為一個具體的例子,考慮這樣一種情況:用戶僅為少量的項目(1或2)提供評級。在這種情況下,許多推薦算法,如基于鄰居的方法,都不能為用戶提供可靠的預測。另一方面,項目偏差變量的(非個性化)預測將能夠給出合理的預測。畢竟,如果一部特定的電影在全球范圍內是票房大片,那么相關用戶也更有可能欣賞它。偏差變量也將反映這一事實,并將其納入學習算法。
7.2 只使用用戶和項目偏差
????????事實上,已經證明只使用偏差變量(即k = 0)通常可以提供相當好的評級預測。
????????這意味著很大一部分評級可以用用戶打分的慷慨程度和物品的受歡迎程度來解釋,而不是用戶對物品的任何特定的個性化偏好。
????????因此,只有用戶和物品的偏差被學習,并且通過將用戶i和物品j的偏差相加,可以預測出(i,j)條目的baseline評級。
????????可以使用這樣的baseline評級來輔助任何現成的協同過濾模型。在應用協作過濾之前,可以簡單地從評級矩陣的第(i, j)個有數值條目中減去相應的Bij。這些值在后處理階段被添加回預測值。減去之后的評級矩陣就只是用戶對于特定商品的個性化評價了。
? ?
總結
以上是生活随笔為你收集整理的推荐系统笔记:无任何限制的矩阵分解的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pytorch笔记 torch.clam
- 下一篇: 推荐系统笔记:基于SVD的协同过滤