推薦系統的模型如何調參?
推薦系統的模型應該如何調參?哪些超參數(如:learning rate, batch size, embedding size, regularization)更加重要?
謝邀,個人覺得重要程度排序如下:
- learning rate。這個值很重要,太大了會不收斂,太小了會學的太慢(讓你以為它不收斂)。最優值從1e-4到1e-1的數量級都碰到過,原則大概是越簡單的模型的learning rate可以越大一些。
- regularization。最普遍的是L2-norm,重要性在不同的模型裡面也不一樣。印象中最優值從1e-8到1e-4數量級都有,這個值其實也取決於你的代碼里L2是怎麼實現的,比如embedding matrix的L2有沒有除以batch size等。
- embedding size,感覺大部分推薦系統的演算法對embedding size都不是太敏感,甚至有時候一位數都足夠了(主要取決於數據的稀疏程度)。大部分情況下,8~32的embedding size可能是比較好的選擇,如果你是按照2的冪進行調參的話。
- batch size,更多的是影響演算法的運行速度,batch size越大,速度越快,但效果會有所下降。小規模數據集(100萬條以下interaction)的batch size大概在幾十到幾百比較合適,大規模數據集裡面,有時候你不得不把batch size設大一點(幾萬),不然跑起來實在太慢了。
- dropout,感覺沒有太大的用處,除非你的模型裡面dense layer很多且很大。
- epoch,沒什麼可以調的,看到指標例如AUC下降了且沒有回升的跡象就可以停了,或者直接寫個early stopping就可以。
沒有做過推薦系統但是最近在幫太子爺寫課程大作業,遭遇了很煩心的調參問題不請自來答一下。做的是簡單的帶監督的圖像分類問題,用的keras。學習率決定了這個模型能不能訓起來,數據增強決定了這個模型能不能上90,(手動微笑臉)調了兩天的參val acc和acc一直差15%以上,萬念俱灰上了imagedategenerator,神奇的好了……
然後dropout效果真的不好,上bn的時候不要上l2正則,不要問我為什麼…batchsize和epoch這種值一般你也不會設的很誇張的…
最後。我覺得調參也是神學…沒什麼道理可言,沒什麼經驗借鑒,就自己瘋狂試就行了…
斗膽回答。拿我實際的經驗來說,learning rate調起來效果最明顯,0.01-0.001之間吧,其次是embedding size,個人覺得根據實際算力,一般10就夠了,幾十也行。然後是正則係數和優化演算法。
我在做股票模型,說一些經驗之談,learning rate>dropout>sample weight >l1l2> optimal method 。
調學習率learning rate
最關鍵的是lr,再有就是畫出loss曲線,基本就可以看出來問題
實踐證明只調 learning rate 基本能解決80%的調參需求,其他的和普遍經驗值相差不大就行了。
推薦閱讀: