文 / nyc 演算法與優化研究團隊研究員 hossein bateni 和軟體工程師 kevin aydin
解決大規模優化問題通常始於圖分割,這就意味著需要將圖的頂點分割成聚類,然後在不同的機器上處理。我們需要確保聚類具有幾乎相同的大小,這就催生了均衡圖分割問題。簡單地說,我們需要將給定圖的頂點分割到 k 個幾乎相等的聚類中,同時盡可能減少被分割切割的邊數。這個 np 困難問題在實踐中極其困難,因為適用於小型例項的最佳逼近演算法依賴半正定規劃,這種規劃對更大的例項來說不切實際。
這篇博文介紹了我們開發的分布式演算法,這種演算法更適合大型例項。我們在 wsdm 2016 **中介紹了這種均衡圖分割演算法,並且已將這種方法運用到 google 內部的多個應用中。我們最近發表的 nips 2017 **通過理論與實證研究詳細介紹了這種演算法。
通過線性嵌入實現均衡分割 我們的演算法先將圖的頂點嵌入到一條直線中,然後按照線性嵌入順序,以分布式方式處理頂點。我們檢查了各種方式來查詢初始嵌入,並應用四種不同的技術(例如區域性交換和動態規劃)獲取最終分割。最佳初始嵌入基於 「親和聚類」。
親和層次聚類 親和聚類是一種基於 borůvka 經典最大開銷生成樹演算法的凝聚型層次圖聚類。與上面討論的一樣,這種演算法是我們均衡分割工具的關鍵部分。它首先會將每個頂點置於各自的聚類中:v0、v1,依此類推。然後在每次迭代中,從每個聚類中選擇開銷最高的邊,以便包含更大的合併聚類:在第一輪中包含 a0、a1 和 a2 等,在第二輪中包含 b0 和 b1等,依此類推。合併集合會自然生成乙個層次聚類,並產生葉頂點(一度頂點)的線性序。下圖說明了這一點,底部數字對應於頂點的順序。
與之前工作的比較 在將這種演算法與(分布式)均衡圖分割中的之前工作進行比較時,我們側重於 fennel、spinner、metis,以及近期一種基於標籤傳播的演算法。我們報告了在多個公共社交網路和大型專屬地圖圖表中取得的結果。對於 twitter 關注關係圖,我們看到比之前的結果(ugander 和 backstrom 等人於 2013 年取得)有 15-25% 的一致改進,而對於 livejournal 圖,我們的演算法也僅僅在 k = 2 時稍遜於 fennel 的結果,除此之外均優於其他所有演算法。
下表顯示了在 twitter 圖中通過不同演算法為各種 k 值(聚類數量)獲得的切割邊百分比。括號中的數字表示大小失衡係數:即最大與最小聚類大小的相對差異。這裡的 「普通親和聚類」 表示我們演算法的第乙個階段,在這個階段中,我們僅構建了層次聚類,沒有對切割執行進一步處理。請注意,這已經可以與之前的最佳結果(顯示在下表的前兩列中)相媲美了,在切割更少的邊的同時獲得完美(因而更好的)平衡(即,0% 失衡)。**中的最後一列包含我們的演算法在進行後期處理之後的最終結果。
應用 我們將均衡圖分割運用到多個應用中,包括 google 地圖駕駛路線、網頁搜尋服務後端,以及為實驗性設計尋找實驗組。例如在 google 地圖中,世界地圖圖表儲存在多個分片中。與可以在乙個分片內處理的查詢相比,跨越多個分片的導航查詢的開銷明顯更大。利用**中介紹的方法,我們可以通過將分片失衡係數從 0% 增大至 10% 的方式減少 21% 的跨分片查詢。
如我們的**中所述,對真實流量的實時實驗顯示,與希爾伯特嵌入基準技術相比,我們的切割優化技術將多分片查詢的數量減少了 40%。這反過來又會降低響應查詢時的 cpu 使用率。在未來的博文中,我們將討論這項工作在網頁搜尋服務後端中的應用,在這個用例中,均衡分割已經幫助我們設計了乙個具有快取感知能力的負載平衡系統,大大降低了我們的快取未命中率。
大規模需求協作的挑戰與思路
網際網路公司的典型業務場景下,乙個需求會涉及到運營 產品 前端 後端 資料 測試等不同部門的配合,乙個需求正常情況下都需要拆解成多個模組,而其中的一些模組可能還涉及到其他模組的功能,導致需求完成的子目標比預期的多很多,需求的管理工作就會變得特別困難。一 前端支援,當前公司有了固定的元件,但並不能完全...
大規模機器學習流程的構建與部署
文章講的是大規模機器學習流程的構建與部署,現在有許多的機器學習演算法實現是可以擴充套件到大資料集上的 其中包括矩陣分解 svm 邏輯回歸 lasso 等等 實際上,機器學習專家們很樂於指出的一點是 如果你能把機器學習問題轉化為乙個簡單的數值優化問題,你就幾近成功了。當然,現實的問題是,很多機器學習專...
四層負載均衡與七層負載均衡
1 四層負載均衡與七層負載均衡區別 個人理解 網路七層協議包括,應用層 第七層 表示層,會話層,傳輸成 第四層 網路層,資料鏈路層,物理層。所謂的七層和四層負載均衡就是指基於哪一層做的負載均衡。nginx反向 就是一種七層負載均衡,可以通過使用者的請求url來進行劃分 lvs就屬於四層負載均衡,是基...