從 Instagram 故事流和資訊流機器學習中吸取的教訓

  • 2020 年 10 月 29 日
  • AI
大家元旦快樂,今天分享一篇我首發於掘金翻譯的文章,我會不定期的分享一些比較優秀的英文文章,並進行翻譯,歡迎關注本號喲~
  • 原文地址://instagram-engineering.com/lessons-learned-at-instagram-stories-and-feed-machine-learning-54f3aaa09e56
  • 原文作者:Thomas Bredillet(//instagram-engineering.com/@thomasbredillet)
  • 譯者:silver
自從我們在 2016 年宣布資訊流排名以來,Instagram 機器學習有了顯著的提高。我們的推薦系統定期為超過 10 億的用戶提供服務。我們現在不僅僅在資訊流和故事流排名上使用機器學習:我們從你關注的標籤中收集並推薦文章,將不同類型的內容混合在一起,並為智慧應用預抓取提供動力。
Instagram 使用機器學習方法的所有不同方式都值得一貼,但是我們想討論一些在構建機器學習流水線時得到的一些教訓。

模型選擇

我們在這裡對如何建模做一些決定,這些決定對我們很有幫助,要麼可以提高模型的預測能力和提供頂線改進,要麼可以在維持精度的情況下降低記憶體消耗。
首先我們選擇 caffe2 作為我們的基礎模型框架,這意味著我們通過這個平台來編寫和設計模型。相比於其它選項,Caffe2 對我們的工作流提供了明顯的優化,並且它在推理時為每個 CPU 周期的模型權重提供了最大空間。「堆棧佔用」在機器學習團隊中是一個很重要的度量標準,因為我們在網路中使用了多個 CPU 密集型統計技術(池,等)。
我們也使用帶有排序損失的模型和 point-wise 模型(例如對數損失)。這讓我們在最終的價值函數中擁有更多的控制權,這樣我們就可以在關鍵的投入指標中進行微調。
在核心機器學習中,通過考慮我們模型中的位置偏差,我們可以得到一些非常好的準確性。我們在最後的全連接層添加了一個稀疏位置特徵,以此避免過多的影響模型。一般來說,共同學習稀疏嵌入是另外一個有影響力的領域,它以多種方式來恰當地捕捉用戶的興趣。。
通過擬合高斯過程,我們定期調整最終的價值函數,以了解通過一系列 A/B 測試測量的價值函數參數對頂線指標的影響。
圖 1:一個我們用來進行預測的經典模型結構的例子

數據新鮮度和趨勢

用戶習慣會隨著時間而改變。同樣,生態系統也會受到趨勢效應的影響(比如在超級碗這種季節性事件中)。正因為如此,數據新鮮度是很重要的。陳舊的模型不能捕捉到用戶行為的變化或者理解新的趨勢效應。
量化數據新鮮度的影響對我們是有幫助的。我們監測關鍵行為分布之間的 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 上的每個人改進機器學習!

往期回顧

推薦理論(1):推薦系統的今天與明天

推薦理論(2):協同過濾基礎-基於鄰域的方法

推薦理論3:協同過濾進階之SVD家族