iT邦幫忙

2022 iThome 鐵人賽

DAY 25
0
AI & Data

親手打造推薦系統系列 第 25

Day25 - NFM 是怎麼做到一體成型又兼顧廣度與深度? - 親手打造推薦系統

  • 分享至 

  • xImage
  •  

昨天提到 DeepFM ,是一個 Deep&Wide 的變型,但本質上仍是兩個網路的合併。那是否有一個深度學習的架構,不用做合併,又可以解決廣度和深度的問題呢?

NFM(Neural Factorization Machines)就是一個這樣的架構。它就是一體成型,不需要再做合併。在訓練上也不必分開訓練,在訓練上變得簡單很多。

基本思路

原始的 FM 公式是

https://ithelp.ithome.com.tw/upload/images/20221010/20152556HSqD8FAzi7.png

若後面二階交叉項我們把它用另一個函數取代,就可以改寫成

https://ithelp.ithome.com.tw/upload/images/20221010/20152556XGdWLtNrya.png

因為深度學習網路可以逼近任何函數,所以 f(x) 可以用一個深度學習網路來完成。在 NFM 裡,這個網路是以下這樣:

https://ithelp.ithome.com.tw/upload/images/20221010/20152556Kt61VxtJTi.png

由圖可知,每個向量 xi 都會做embedding,最後得到 vi。

然後 這些 embedding 後的 k 維向量,就會進到 Bi-interaction Pooling 裡,做特徵交叉。

那 Bi-interaction Pooling 是怎麼做的?

NFM 的作者定義 Bi-interaction Pooling 用以下式子來做:

https://ithelp.ithome.com.tw/upload/images/20221010/20152556Adz8Nv7nPQ.png

白話文說明就是,把每個非0的特徵將它和embedding相乘後,得到 k 維向量,再把所有的向量兩兩做元素積操作(element-wise product)。

什麼是向量的元素積呢?就是把兩個相同維度的向量,將他們對應的維度相乘,最後還是得到相同維度的向量,這就是元素積。

https://ithelp.ithome.com.tw/upload/images/20221010/20152556RA1vruSlfK.png

當上面說到兩兩做元素積操作的向量都拿到後,就把它們全部加起來,這就成為 Bi-interaction Pooling 的輸入,之後再接多個全連接層處理。

小結

NFM 可以想成底層是FM,上層是DNN,若說 Deep&Wide 架構是併聯的話,那 NFM 就是一種串連架構。

這串連架構中間用了 Bi-interaction Pooling ,使得兩個網路變成一個整體,可以以完整的正向和反向傳播訓練,這樣才可以利用 FM 的Wide 的記憶力,又可以用到 DNN 的Deep優勢。

參考資料

NFM 原始論文: Neural Factorization Machines for Sparse Predictive Analytics


上一篇
Day24 - DeepFM 和 Deep&Wide 比較,有什麼改進? - 親手打造推薦系統
下一篇
Day26 - item2vec 用 embedding 技術做 ItemCF 的方法 - 親手打造推薦系統
系列文
親手打造推薦系統30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言