[譯] 從 Instagram 故事流和信息流機器學習中吸收的教訓

自從咱們在 2016 年宣佈信息流排名以來,Instagram 機器學習有了顯著的提升。咱們的推薦系統按期爲超過 10 億的用戶提供服務。咱們如今不只僅在信息流和故事流排名上使用機器學習:咱們從你關注的標籤中收集並推薦文章,將不一樣類型的內容混合在一塊兒,併爲智能應用預抓取提供動力。前端

Instagram 使用機器學習方法的全部不一樣方式都值得一貼,可是咱們想討論一些在構建機器學習流水線時獲得的一些教訓。android

模型選擇

咱們在這裏對如何建模作一些決定,這些決定對咱們頗有幫助,要麼能夠提升模型的預測能力和提供頂線改進,要麼能夠在維持精度的狀況降低低內存消耗。ios

首先咱們選擇 caffe2 做爲咱們的基礎模型框架,這意味着咱們經過這個平臺來編寫和設計模型。相比於其它選項,Caffe2 對咱們的工做流提供了明顯的優化,而且它在推理時爲每一個 CPU 週期的模型權重提供了最大空間。「堆棧佔用」在機器學習團隊中是一個很重要的度量標準,由於咱們在網絡中使用了多個 CPU 密集型統計技術(池,等)。git

咱們也使用帶有排序損失的模型和 point-wise 模型(例如對數損失)。這讓咱們在最終的價值函數中擁有更多的控制權,這樣咱們就能夠在關鍵的投入指標中進行微調。github

在覈心機器學習中,經過考慮咱們模型中的位置誤差,咱們能夠獲得一些很是好的準確性。咱們在最後的全鏈接層添加了一個稀疏位置特徵,以此避免過多的影響模型。通常來講,共同窗習稀疏嵌入是另一個有影響力的領域,它以多種方式來恰當地捕捉用戶的興趣。。後端

經過擬合高斯過程,咱們按期調整最終的價值函數,以瞭解經過一系列 A/B 測試測量的價值函數參數對頂線指標的影響。網絡

圖 1:一個咱們用來進行預測的經典模型結構的例子框架

數據新鮮度和趨勢

用戶習慣會隨着時間而改變。一樣,生態系統也會受到趨勢效應的影響(好比在超級碗這種季節性事件中)。正由於如此,數據新鮮度是很重要的。陳舊的模型不能捕捉到用戶行爲的變化或者理解新的趨勢效應。less

量化數據新鮮度的影響對咱們是有幫助的。咱們監測關鍵行爲分佈之間的 KL-散度偏移,來告知咱們的流水線的「不穩定性」。機器學習

保持咱們的模型新鮮的一個方法是有一個在線學習模型或者至少進行週期性的訓練。在這種設定中,咱們面臨的最大挑戰之一是提出一個合理的自適應學習率策略,由於咱們但願新的例子在梯度更新中仍然有用(即便對那些已經在數月的數據上進行了訓練的模型)。

新穎效應

新穎效應是咱們面臨的另一個難題。咱們常常進行 A/B 測試,在早期對照組表現出正向的做用,而且逐漸趨向於中性。

一方面,能夠明確的是,一些細微的變化能夠暫時提升參與程度。咱們相信這源於一個事實,即長期運行模型會傾向於「挖掘」的過多,而且這些測試會帶來一些新的探索領域。

這些影響的時間尺度也頗有趣。咱們已經看到了一些變化,這些變化須要持續一個多月的時間後才能趨於平穩(參與度呈上升或降低趨勢)。

另外一方面, 咱們艱難地認識到,新穎效應能夠是很微妙的,因此在推出可能會產生影響的新體驗時,應該當心控制。咱們最近進行了一次嚴重的過後分析,發現兩個容易產生新穎效應的實驗在啓動後的幾個小時內相互做用,變得很是糟糕。

雖然這並不完美,咱們如今有了一些模型能夠預測容易新穎的實驗的數量和長度。藉此咱們能夠經過減緩風險和提早終止測試來更快的進行迭代。

圖 2:在咱們運行的 A/B 測試之一上觀察新穎性

實驗(A/B)小影響

大規模機器學習和 A/B 測試有許多不一樣的複雜性。除了上述提到的新穎性以外,咱們也面臨統計學上的問題。想象一下有 10 個排名工程師每人啓動一個新的測試 everyday:頗有可能這其中的一些測試提升了參與度指標,這頗有統計意義。

最重要的是,這些實驗中的一些可能只是爲了一些特定目標的用戶,所以這個測量結果不是對全部用戶起到一樣的重要性的。這就使得測試結果很難評估。

咱們當前的最佳實踐是在工程師的迭代速度和咱們啓動的變化置信區間之間作出權衡。在咱們批准進行 A/B 測試以前,這些最佳實踐須要在大量用戶中進行嚴格的複製。

學習做爲影響和科學方法

根據定義,機器學習是一種隨機過程。當咱們進行性能評估時,咱們的工程師和科研人員根據在穩定項目上的傳統軟件工程師來進行校準。作全部正確的事情都是有可能的,可是在底線方法方面會讓人失望。

在 Instagram 上,咱們熱衷於堅持科學的實驗方法。即便 A/B 測試不會直接致使產品發佈,咱們也能夠常常利用它在將來提供有趣的產品洞察力。

這也防止了在訓練流水線中進行超參數隨機遍歷以尋找局部最優解的糟糕的科學模式。咱們如今稱這種模式爲「人類梯度降低」。有了這一點,咱們須要在啓動測試以前驗證原則假設。

做爲一個機器學習工程師,咱們並不是僅僅盯着特徵看,咱們還想要學習。每一個實驗都有其特定的輸出,咱們並非隨機遊走。

正則化

混合不一樣類型的內容是咱們面臨的另一個挑戰。例如,一個視頻和一張照片有不一樣可能操做的分佈。例如你能夠想象「喜歡」一張照片和「評論」一張照片或者「完成」一部視頻是三種不一樣的行爲,而且有着不一樣的分佈(如喜歡比評論更常見,等)。

簡單來講,它就像是對照片用 P[喜歡](一個觀衆喜歡這個照片的機率)和對視頻 P[完成](一個觀衆觀看一部視頻超過其 X% 長度的機率)來進行排序同樣。當咱們想要合併這個列表來完成對觀衆的最終排序時,機器學習工程師就處在一個很爲難的位置。

咱們經過擬合一個映射來解決這個問題,即從一個價值函數分佈(如 P[喜歡])映射到一個合理的分佈如高斯分佈。在那樣的輸出空間中,列表如今是可比較的,而且咱們能夠清楚的說出一部份內容優於另一部分。

圖 3:咱們的價值模型在歸一化前的對數分數,分佈很不均勻

迭代速度 - 離線分析

咱們添加適當的後驗框架已經太晚了。對很是大規模且有影響的機器學習系統來講,工程師和科研人員真的須要去打開模型而且仔細的理解他們實驗產生的效果。在沒有可靠的工具下這是很難作到的。咱們開發了一個重播工具來接收你想要測試的新模型/排名配置,而且輸出一組有用的測量結果來幫助理解你的改變對整個生態系統的影響。

咱們的目標是儘可能減小在線實驗,儘量減小給用戶暴露糟糕的實驗結果的風險而且加速咱們的迭代速度。

圖 4:咱們的離線分析工具在模型指標上的表現(每一個點表示了一個不一樣的訓練模型)

工具和基礎設施

全部大規模系統都須要嚴格的基礎設施,幸運的是,在 Instagram 中咱們有一個穩定的機器學習基礎設施團隊(他們最初創建了反饋排名並從其分離出來)。全部模型推理、特徵提取、訓練數據生成和監控都由其基礎設施負責。

沒必要去擔憂規模問題,全神貫注於統計模型對咱們工程師而言是最有效的提升之一。最重要的是,機器學習基礎團隊建立了工具讓咱們更加深刻的理解咱們的模型,從而幫助咱們提升用戶體驗。

個性化

另一個有利的特徵是精調咱們的最終價值函數的能力。將咱們的模型做爲輸入,添加咱們的業務邏輯,而後返回每一個媒體的最終得分。個性化價值函數兼具了有效性和複雜性。咱們選擇對那些從咱們的推薦系統中獲益較少的用戶羣體進行高層次的啓發式分析,並專門爲他們調整價值函數。

另外一個顯示早期結果的個性化策略是在一些用戶親和力模型中進行因子分解。試圖量化一個用戶與其餘用戶/內容類型之間的親和力有多大,這有助於咱們專門爲觀衆定製和適應咱們的功能。

價值模型

最後,咱們有了咱們的價值模型:公式化描述,它將不一樣的信號組合成一個分數,而且合併咱們的業務邏輯。這是一個複雜的代碼,產品啓發法知足統計預測。

過去這些年經過調整這個價值模型,咱們看到了顯著的增加。咱們常用高斯處理和貝葉斯優化來跨越模型的超參數空間,而且找到一個適合咱們的區域。有一篇在這裏詳細的描述了這個過程。

圖 5:咱們怎樣調節不一樣的歸一化價值模型而且測量不一樣的影響程度

後記

咱們但願對咱們的機器學習管道和咱們面臨的問題的總結是有幫助的。在將來的文章中,咱們將更深刻的討論上述的一些問題。

不管咱們是在預測用戶行爲,構建內容理解卷積神經網絡,仍是建立潛在的用戶模式,這些課程都有助於咱們減小錯誤並更快地迭代,這樣咱們就能夠不斷地爲 Instagram 上的每一個人改進機器學習!

若是你很高興應用機器學習技術爲咱們的全球化社區提供價值,咱們一直在尋找更多優秀的人才來加入咱們

若是發現譯文存在錯誤或其餘須要改進的地方,歡迎到 掘金翻譯計劃 對譯文進行修改並 PR,也可得到相應獎勵積分。文章開頭的 本文永久連接 即爲本文在 GitHub 上的 MarkDown 連接。


掘金翻譯計劃 是一個翻譯優質互聯網技術文章的社區,文章來源爲 掘金 上的英文分享文章。內容覆蓋 AndroidiOS前端後端區塊鏈產品設計人工智能等領域,想要查看更多優質譯文請持續關注 掘金翻譯計劃官方微博知乎專欄

相關文章
相關標籤/搜索