1. 從物理意義出發的觀點
什麼是推薦系統。以電影推薦為例,就是對於一部電影,我們預測某個使用者對一部電影的評分。
我們用如上所示符號來表示。值得注意的是,很有可能使用者沒有給某電影打分,此時 r(i,j)=0 。
這裡需要理清:
對於一個電影,我們需要找到一些特徵空間 X 來衡量這個電影;
對於一個使用者,我們需要找到一些參數 h(x)=wTx 來預測使用者對這部電影的評分。
然而問題是:我們既沒有 X 也沒有對於使用者i的 wi ,也就是說這兩者都需要學習。
使用如下符號:
我們假定對於電影的特徵向量已經確定,也即所有的 x(i) 已知,來學習 θ(j) :
現在反過頭來看,其實我們對電影的特徵向量一無所知。如果假定所有的 θ(j) 已知,來學習 x(i) :
這一個過程與K-Means訓練過程類似,給定一個初始的θ,然後開始訓練: θ0→x0→θ1→x1....→
這裡又與K-Means有所不同,因為K-Means是combination-number最佳化問題;而我們這裡的最佳化問題很簡單,可以同時進行:
此時我們再來重新看給出的y資料:
還是有點小問題,如果某一個使用者沒有給任何電影打分:
根據我們的學習過程:代價函數的第一項為0。如果要最小化代價函數,那麼此使用者的 θ=0 ,也就是說:對於任何的電影,我們將會預測其評分為0——不向該使用者推薦任何電影。這樣做可以嗎。可以,但不是很好。我們理應向任何一個使用者推薦電影。怎麼推薦。
如果大多數人認為這個電影很好,那麼這個電影可能真的非常好。——將對某一電影的所有評分求一個均值。
可以使用如下的均值歸一化過程:
用 Y−μ 來學習,最後預測的結果是 θTx+μ 。 2. 從抽象計算出發的觀點
對於電影推薦系統,我們獲得的資料是什麼呢。假設用 nu 個使用者, nm 部電影, r(i,j) 表示使用者j是否給使用者i評分,其對應的分數是 y(i,j) 。那麼我們的資料是 (x(j)=j,y=y(i,j)) 亦或者是 (x(j)=j,y=(y(1,j)),...,?,...y(nm,j))T) 。(畢竟我們的推薦系統以使用者為中心,而不是以電影為中心——當然以電影為中心,資料也也可以用同樣的方式解析)。
我們知道輸入x代表的是使用者的ID,並沒有實際意義,我們稱之為抽象特徵。
我們要設計一個特徵轉換的函數φ,來將抽象特徵轉換——這個函數具體是什麼我們不關心(這類似於自動編碼器)。然後學習一個預測函數h,使得 h(ϕ(x))≈y 。
自動編碼器使用一個線性模型,假設預測函數也是一個線性模型,那麼整個模型就是一個兩層的網路。
假設將x進行binary vector 編碼,那麼這個網路就是 nu−d−nm 結構
其中 Vd∗nu,Wnm∗d ,則有 h(x)=WVx
根據代價函數,我們知道我們要尋找W,V使得 Y≈VTWT
然後轉向使用alternating optimization技術來解決最佳化問題。
3. 小結
無論如何,電影的特徵向量的長度還是需要我們自己來指定。
我們在訓練過程中,可以考慮實際問題來定製解決方案,例如此問題中:越是最近時間段的資料,權重越大。