存在的問題
稀疏數據下的特徵組合問題
- 類別特徵經過one-hot編碼轉換後會導致樣本特徵的稀疏性,並且會得到千萬級別甚至上億級別的特徵空間,導致特徵空間爆炸
多項式模型:
可以看出,組合的特徵的參數一共有 個,並且它們都是相互獨立的,而且在數據稀疏普遍存在的實際應用場景中,二次項參數的訓練是很困難的,因爲滿足"和都非零"的樣本是非常少的.訓練樣本的不足,很容易導致參數不準確(每個參數的訓練都需要大量的非零樣本),嚴重影響模型的性能;
- 而且這種多項式模型中任意兩個參數都是獨立的,而特徵之間的組合與label之間的相關性就會有所提高;
基於的思想
矩陣分解:
任意的 N×N 實對稱矩陣都有 N 個線性無關的特徵向量。並且這些特徵向量都可以正交單位化而得到一組正交且模爲 1 的向量。故實對稱矩陣 A 可被分解成:
其中Q爲正交矩陣,Λ爲實對角矩陣。
類似地,所有二次項參數可以組成一個對稱陣(爲了方便說明FM的由來,對角元素可以設置爲正實數),那麼這個矩陣就可以分解爲,V 的第 j列( )便是第 j維特徵()的隱向量。換句話說,特徵分量和的交叉項係數就等於對應的隱向量與對應的隱向量的內積,即每個參數 ,這就是FM模型的核心思想。
爲了求出,我們需要求出特徵分量 的輔助向量, 的輔助向量 , k 表示隱向量長度(實際應用中 ),轉換過程如下圖所示:
具體方法
由k維組成,k<<n,包含k個描述特徵的因子,二次項參數的個數減少爲個,遠少於多項式模型的參數數量.另外,參數因子化使得 的參數和 的參數不再是相互獨立的,因此我們可以在樣本稀疏的情況下相對合理地估計FM的二次項參數。具體來說, 和 的係數分別爲 和 ,它們之間有共同項。也就是說,所有包含“的非零組合特徵”(存在某個,使得)的樣本都可以用來學習隱向量,這很大程度上避免了數據稀疏性造成的影響。而在多項式模型中, 和 是相互獨立的。
這裏的是特徵的低緯稠密表達,實際中隱向量的長度通常遠小於特徵維度N。在實際的CTR場景中,數據都是很稀疏的category特徵,通常表示成離散的one-hot形式,這種編碼方式,使得one-hot vector非常長,而且很稀疏,同時特徵總量也驟然增加,達到千萬級甚至億級別都是有可能的,而實際上的category特徵數目可能只有幾百維。FM學到的隱向量可以看做是特徵的一種embedding表示,把離散特徵轉化爲Dense Feature,這種Dense Feature還可以後續和DNN來結合,作爲DNN的輸入,事實上用於DNN的CTR也是這個思路來做的。
而且隱向量可以表示之前沒有出現過的交叉特徵,假如在數據集中經常出現 <男,籃球> ,<女,化妝品>,但是沒有出現過<男,化妝品>,<女,籃球>,這時候如果用 表示<男,化妝品> 的係數,就會得到0。但是有了男特徵和化妝品特徵的隱向量之後,就可以通過來求解 < 男, 化妝品> 來求解。
時間複雜度
直觀上看,FM的複雜度是。但是,通過公式(3)的等式,FM的二次項可以化簡,其複雜度可以優化到 。由此可見,FM可以在線性時間對新樣本作出預測。
採用隨機梯度下降法SGD求解參數:
由上式可知,的訓練只需要樣本特徵非0即可,適合於稀疏數據.在每次迭代中,只需計算一次所有f的 ,時間複雜度爲. 綜上可知,FM可以在線性時間訓練和預測,是一種非常高效的模型。
優點
- 參數的數量大幅度縮減,從n×(n−1)/2降低到nk
- 向量的點積可以表示原本兩個毫無相關的參數之間的關係, 增大了特徵之間的相關性信息
- 而稀疏數據下學習不充分的問題也能得到充分解決。比如原本的多項式迴歸的參數w12的學習只能依賴於特徵x1和x2;而對參數⟨v1,v2⟩而言就完全不一樣了,它由v1和v2組成。而對於每個向量可以通過多個交叉組合特徵學習得到,比如可以由x1x2,x1x3,…學習獲得,這樣可供學習的非零樣本就大大增加了,
參考資料
[1] : https://zhuanlan.zhihu.com/p/37963267
[2] : https://blog.csdn.net/asd136912/article/details/78318563