損失函數(shù)推導(dǎo)公式以及如何推導(dǎo)
目錄:
- 原因:為何要推導(dǎo)這些公式
- 舉例:根據(jù)文章來說明這個(gè)推導(dǎo)的必要性
- 分析:如何推導(dǎo)添加用戶相似度的公式
- 存在的問題
1. 原因
首先解釋說一下原因冯凹,接著分析要如何推導(dǎo)加了用戶相似度的兩個(gè)矩陣的計(jì)算方式(待解決)舀寓。
- ALS 的修改模型不僅僅是輸入一條損失函數(shù)的公式辆沦,然后輸入數(shù)據(jù)就能直接跑起來模型的友瘤。
- 模型的更新是要根據(jù)損失函數(shù)修改推導(dǎo)后導(dǎo)出的公式來重新編寫代碼。
- 眾所周知眯亦,ALS 是一個(gè)交替最小二乘法,需要先固定用戶矩陣或者項(xiàng)目矩陣中的其中 1 個(gè)般码,然后計(jì)算另一個(gè)矩陣的妻率,最終得到兩個(gè)最優(yōu)解矩陣。而如何計(jì)算另一個(gè)矩陣辦法或者公式我們目前需要計(jì)算板祝。
- 因此宫静,我們要根據(jù)損失函數(shù)來推導(dǎo)出這兩個(gè)矩陣(用戶矩陣和項(xiàng)目矩陣),是如何在固定一個(gè)矩陣的情況下來計(jì)算更新另一個(gè)矩陣的券时。
- 以上就是我們需要從損失函數(shù)推導(dǎo)公式的原因孤里。
接下來,按照知乎文章中的損失函數(shù)推導(dǎo)公式過程以及代碼來舉例說明整個(gè)過程
2. 舉例說明
舉例說明一下文章中的 ALS 算法的推導(dǎo)過程橘洞,和配套代碼的含義
2.1 文章中的 ALS 損失函數(shù)
首先是損失函數(shù)捌袜,下面是知乎文章中的 ALS 模型的損失函數(shù):
這個(gè)是損失函數(shù)。
2.2 推導(dǎo)的過程
由于 ALS 算法的流程是先固定 1 個(gè)矩陣炸枣,然后求另一個(gè)矩陣的虏等。然而現(xiàn)在的問題是“不知道是如何計(jì)算另一個(gè)矩陣”,也就是不知道另一個(gè)矩陣的計(jì)算公式适肠。因此我們需要來推導(dǎo)這個(gè)另一個(gè)矩陣的計(jì)算公式霍衫。
由損失函數(shù)推導(dǎo)出用戶矩陣 和項(xiàng)目矩陣 的計(jì)算公式,那么推導(dǎo)的過程主要分 3 步:
- 對(duì)損失函數(shù)求 的一階偏導(dǎo)數(shù)侯养,得到結(jié)果如下:
- 然后再令一階偏導(dǎo)數(shù)等于0 敦跌,即等式左邊項(xiàng)為 0 ,得到了用戶矩陣 逛揩,結(jié)果如下:
- 同理柠傍,可證得項(xiàng)目矩陣 的計(jì)算公式
2.3 推導(dǎo)的公式在代碼上的應(yīng)用
下面截取了 ALS 算法的代碼中核心部分
- 含義
- 這段代碼的內(nèi)容是按照上面推導(dǎo)出來的携兵、用來計(jì)算兩個(gè)矩陣 U 和 I 的公式設(shè)計(jì)出來的。
- 作用
- 輸入數(shù)據(jù)后通過調(diào)用該方法搂誉,最終計(jì)算得到 U 和 I 的兩個(gè)矩陣徐紧。
for i in range(max_iter):
if i % 2:
# U = (I * I_transpose) ^ (-1) * I * R_transpose(需要修改以下函數(shù))
items = self.item_matrix
self.user_matrix = self._items_mul_ratings(
items.mat_mul(items.transpose).inverse.mat_mul(items),
ratings
)
else:
# I = (U * U_transpose) ^ (-1) * U * R(需要修改以下函數(shù))
users = self.user_matrix
self.item_matrix = self._users_mul_ratings(
users.mat_mul(users.transpose).inverse.mat_mul(users),
ratings_T
)
這兩段代碼是ALS中用戶矩陣 和項(xiàng)目矩陣 ,默認(rèn)情況下的計(jì)算公式(未優(yōu)化前)。我們的工作是需要重新計(jì)算這個(gè)兩個(gè)值并级。
3. 如何處理加了相似度的損失函數(shù)
為什么要重新計(jì)算呢拂檩?因?yàn)樵械膿p失函數(shù)更改了以下內(nèi)容。
3.1 加了相似度的損失函數(shù)
首先需要先了解加了用戶相似度的損失函數(shù)是怎樣的嘲碧。
加了相似度的損失函數(shù)如下稻励,這是在論文中截取到的:
這個(gè)損失函數(shù)的參數(shù)解釋如下:
- 其中 是正則化參數(shù), 表示用戶 與用戶 之間的相似度愈涩, 表示用戶的外向好友望抽,即相似度較高的朋友。
3.2 推導(dǎo)步驟
這是原來的推導(dǎo)步驟履婉,但我覺得圈出來的部分錯(cuò)了煤篙,我把圈出來的部分改為:
3.3 推導(dǎo)過程參考文章
推導(dǎo)過程參考文章:
文章從下圖開始詳細(xì)介紹了 ALS 算法的推導(dǎo)過程
存在的問題
跑完代碼后,發(fā)現(xiàn)加了相似度后毁腿,MSE提高了辑奈。
有可能有以下原因:
1.加了一些未知的矩陣的原因。因?yàn)楦恍┢渌哪P蛯?duì)比已烤,我們不難發(fā)現(xiàn)ALS的跑出來的MSE比其他的模型高一點(diǎn)鸠窗。因?yàn)锳LS本身的原因。ALS是通過固定求出V胯究,再固定V求出稍计,不停的重復(fù),直到收斂或達(dá)到最大迭代次數(shù)裕循。而這些固定的矩陣因?yàn)槎际俏粗远际请S機(jī)生成的。我覺得這可能就是ALS得出來的MSE比其他模型高的原因费韭。
2.我們加了相似度后就不止兩個(gè)未知矩陣了(加的方法是直接矩陣相加茧球,公式6),每多出一個(gè)相似用戶就會(huì)多出一個(gè)未知矩陣星持。假設(shè)我們選擇5個(gè)最相似的用戶和5個(gè)最不相似的用戶抢埋,那么就會(huì)多出10個(gè)未知矩陣。為了求出V或者督暂,對(duì)于這些多出來的矩陣揪垄,我們都是采用隨機(jī)生成的方法。而這可能也是為什么加了相似度MSE會(huì)升高的原因逻翁。