當前位置:
首頁 > 知識 > 阿里開源首個DL框架,新型XDL幫你搞定大規模稀疏數據

阿里開源首個DL框架,新型XDL幫你搞定大規模稀疏數據

機器之心原創

作者:思源、邱陸陸

12 月 21 日,阿里巴巴旗下的大數據營銷平台阿里媽媽開源了其應用於自身廣告業務的演算法框架 X-Deep Learning(XDL)。該框架非常擅長處理高維稀疏數據,對構建推薦、搜索和廣告系統非常有優勢。此外,阿里還配套發布了一系列官方模型,它們都是阿里在實際業務或產品中採用的高效模型。

在 XDL 開源前夕,機器之心採訪了其團隊的四位主要負責人:

靖世,研究員,阿里媽媽定向廣告技術團隊負責人兼阿里媽媽演算法平台負責人

見獨,資深技術專家,阿里媽媽工程平台技術負責人

懷人,資深演算法專家,阿里媽媽演算法平台深度學習方向負責人兼定向廣告排序演算法團隊負責人

樂迪,資深技術專家,阿里媽媽大數據計算與機器學習平台的工程架構負責人

「高維稀疏數據的數據處理、模型計算以及在線服務一直是深度學習應用於業界的一個核心挑戰區。作為一個真實在廣告業務下解決過大量技術問題的團隊,我們為了解決這些問題提出了大量的方法。阿里媽媽第一代的 基於深度學習的 CTR 模型研製與大規模線上部署都是 XDL 支撐的,我們將其中對業界有貢獻的部分提供給用戶,希望做出對大家有增量的東西。」靖世這樣描述 XDL 開源的初衷。

而現有框架在處理高維稀疏數據的「痛點」究竟在哪裡?使用的模型有什麼不同?更加具體的,XDL 框架如何使用?如何與現有框架及模型結合?XDL 團隊為機器之心的讀者做了詳細的解答。

XDL 項目地址:https://github.com/alibaba/x-deeplearning

高維稀疏數據怎麼搞?

其實最早的時候,阿里巴巴深度模型的研發也是在嘗試已有的框架,例如 Caffe、TensorFlow和 MXNet 等。但當時阿里巴巴發現已有框架在生產化方面有很多局限,首先第一個是大規模稀疏數據的處理能力,其次是如何實現結構化數據。

大規模稀疏數據體現在搜索、推薦和廣告等任務上,例如某系統一共有 10 億的商品量,那麼用戶是不是訪問過每一個商品就是一維特徵。因此,表徵用戶的特徵維度就可能有 10 億維,而只有訪問過的商品才有值「1」,未訪問過的商品全為「0」,這也就是高維稀疏的意義。這樣的結構和傳統機器學習一個特徵矩陣加一列標註很不一樣,因此也就需要特定的框架高效處理。

除了用戶的稀疏表徵,商品同樣也是稀疏的,它們可能有各種各樣的特徵,例如顏色、形狀、圖像和名稱等。在一般的推薦系統中,樣本都是平鋪的,例如一個用戶點擊了商品 1 和商品 2。那麼樣本 1 為(用戶,商品 1)、樣本 2 為(用戶,商品 2),這種平鋪的數據是非常低效的,因此 XDL 對於大規模稀疏數據有一個結構化的過程。這種結構化會將實體與實體之間的複雜關係進行關聯化,並繼續投入到計算中,因此 XDL 整體就是一個結構化的計算流。

其實 XDL 團隊在處理大規模高維數據後,發現整個計算模式可以進一步提升,以前的張量計算流也許可以使用結構化的計算流代替。可能讀者對數據結構化還是缺少了一種直觀感受,如下圖所示為簡單的數據結構化。其中左邊的樣本是傳統平鋪的訓練數據,而右邊的樹型結構化會大大降低存儲需求。

圖示:如上圖所示左邊為平鋪的數據,其一個用戶配一個商品(Item)就為一個樣本,用於表徵用戶的高維特徵需要重複使用。而箭頭右邊樹型結構化的數據會節約很大的存儲成本,它同樣表示三個獨立的樣本。

XDL 團隊表示在淘寶原來的信息流廣告里,他們需要 300 台以上的機器才能支持模型訓練一次。但是這種結構化數據大大簡化了數據的表示,因此整個數據集減少了一百倍以上的硬碟存儲,計算速度也提升了十多倍。因此最後本來需要幾百台機器的模型訓練,可以精簡到十台機器左右就能完成訓練。

最後,除了數據結構化,模型同樣也可以結構化。因為當阿里巴巴開始探索將圖像、文本和語音等信息加到推薦等系統時,他們會發現這些信息和其它信息又是一個複雜的結構化關係,因此他們開始將模型的分布也結構化。首先數據根據結構關係可以分布在不同的機器上,而這些結構同樣可以將計算分配到不同的機器上。所以將模型的計算與數據的結構耦合在一起,它們間的計算量和通訊傳輸量都能有效降低。

所以以上幾點是 XDL 整個的脈絡,XDL 團隊表示它主要在三個層面上對通用框架有比較大的提升:

首先是對大規模稀疏性數據的建設;

其次是結構化的計算流;

最後在結構化的計算流基礎上,模型的分布也需要結構化。

當然,這些都是 XDL 團隊在實踐中的探索,它們也並沒有完美處理各種高維稀疏的情況。但是經過阿里巴巴業務上的檢驗,整個框架和配套開源的推薦/廣告/搜索演算法都被被證明非常有效。也許通過開源社區的共同參與,高維稀疏數據的處理能更高效。

用於解決不完全信息下的開放問題的模型

「圖像、語音、文本,都是在完全信息下定義的封閉問題。而互聯網領域裡的機器學習是不完全信息下的開放問題。」靖世概括道。「圖像像素已經表徵了所有信息,模型能力如果達到極限,就應該能夠判定圖像中有什麼東西,獲取目標信息。而在互聯網領域,可選數據非常多。以電商為例,除了 item 級別的表徵之外,商品圖像、詳情頁信息、評論……都是可以引入的相關數據,但即使囊括所有可得的相關數據,其合集仍然不是完全信息。」

而模型的意義,就是能夠從數據中找到特定的規律,既能夠擬合現有數據,又能夠有一定的推廣性。從業務的角度出發,找規律的過程中用到的「數據」,應該是平台能夠充分利用所有可得的信息,無論它是以何種形式呈現的。而如何將儘可能多的、類別各不相同的信息引入到模型中,就是 XDL 著重解決的一個問題。

用於廣告、推薦、搜索這樣任務中的模型,可能乍一看很「簡單」:它們不會像單純的視覺模型一樣有數以百計的層數,也不會像純粹的 NLP 模型一樣用模型結構跨越漫長的時間步,幾層的模塊、全連接的模塊在系統里都會很常見。然廣告等領域模型的其複雜性正是體現在其「複合」這一特點上。

當模型的輸入數據異構特性非常明顯的時候,稀疏數據需要做嵌入、時序的數據需要過LSTM模塊捕捉時序關係、圖像數據需要逐層卷積抽象不同粒度的特徵,串聯多種特徵轉化為其他網路可接受的輸入後,還要進行統一的稠密的計算。不同網路的聯動,乃至進一步到系統層面,樣本的 I/O 問題,數據流水線的優化工作、訓練階段機器之間頻繁的大量的參數交換等等問題,都是沒有相應框架就做不了的。

因此,任務與數據形態的不同,看起來是帶來了一個演算法問題,其實是導致最大的變動出現在框架。樂迪舉了個例子,「模型結構複雜了之後,其內部的前向與後向計算的迭代就很難用標準化的方式去做了,批規模的安排、超參的設計與反饋速率,都會極大影響迭代過程。TensorFlow 劃分了 ps(parameter server)和 worker,但是 worker 不會再切分。我們的模式可以把模型任意地切分,每一部分都可以選擇不同的迭代速率等參數,從而讓整個複雜網路的訓練變得非常高效。」

「像八爪魚套八爪魚。」靖世打了個比方。這樣的模型的體量通常十分驚人,見獨表示,阿里的場景下,模型的參數規模通常會到達幾十億甚至上百億,內部應用的模型已經有千億規模出現。

和 XDL 一起開源的就有一些阿里媽媽實際在用的、驗證過有用的「八爪魚」模型,在 xdl-algorithm-solution 文件夾里,首批就公開了六個模型,其中包括利用圖像信息幫助點擊率預估的 DICM 以及以預估 CTR 為約束刻畫用戶興趣的 DIEN。

CrossMedia Network (論文中具體指 Deep Image CTR Model,DICM),旨在幫助精準展示廣告系統為每次投放請求選擇收益最大化的廣告。CrossMedia Network 主要利用圖像信息,包括用於展示和點擊的廣告圖像(Ad image)和用戶點擊過的商品組成的用戶行為圖像(User behavior images)。利用這兩類信息,結合原有 ID 特徵,DICM 模型對於每個廣告展示樣本的點擊或未點擊的二元判別,進而轉化為點擊率預估。

Deep Interest Evolution Network(DIEN) 模型主要用於定向廣告排序中的 CTR(點擊率)預估階段,應用於阿里媽媽定向廣告各大產品中。傳統的點擊率預測演算法通常直接將用戶歷史行為表示用戶興趣,DIEN 提出了興趣抽取和和興趣演化兩個模塊,在興趣提取模塊用 auxiliary loss 約束模型找到能夠推測出後續的行為的隱層表達,在興趣演化模塊用GRU模塊根據不同的預估目標商品構建不同的興趣演化路徑。

除了框架、模型之外,XDL 也有提供數據和服務的打算:

「很多測試用戶反映模型跑不起來,那我們內部也整理了一些覺得對業界比較有用的數據,在保護用戶隱私的前提下,打算以公開數據集的形式發布出來。這個體量對於阿里的業務本身來說可能已經很小了,但是相信對於研究者使用框架跑一些演算法驗證還是很有幫助的。但是真實數據的規模是非常龐大的,比如我們在某個場景只抽出了 1% 的數據出來,大小仍然有 50 G 的規模。」

而懷人也提到,當結構複雜後,在線預估也會遇到瓶頸:「我們也正在探索根據數據前向計算所需算力的分布,用不同的硬體來做對應的計算,最終做到全局最優化。」在未來,XDL 也計劃在訓練框架之外,進一步開源高性能在線推理服務引擎,將超大規模模型參數的分散式存儲、分散式計算問題也一併解決。

XDL 的 使用姿態

對於開發者而言,最關心的可能是 XDL 如何使用,以及它能幫助我們獲得怎樣的提升。想像一下,如果我們已經費了九牛二虎之力構建出一個 TensorFlow 深度模型,然而最終發現它在高維稀疏數據下效率很低。那麼我們該如何將這個模型遷移到 XDL,並利用其數據結構化與模型結構化的優勢進行高效訓練?

XDL 團隊表示他們在文檔上會有一個完整的示例,如果我們寫了一個完整的 TensorFlow 模型,那麼基本上模型定義部分就不需要修改了,我們只需要在外圍寫大概十來行的分散式驅動代碼就行。增加了 XDL 的分散式驅動後,單機的 TensorFlow 模型就能分散式運行,並具備 XDL 面向高維稀疏數據的大規模並行能力。

靖世表示,其實我們可以認為 XDL 構建了一個大型高維分散式計算圖,我們可以將 TensorFlow 構建的靜態計算圖嵌入到 XDL 分散式計算圖中。然後在大型計算圖中,TensorFlow 構建的子圖可以調用對應的框架,並完成計算。所以說如果模型已經進入到密集的運算及架構設計上,那麼其實我們可以將這個子圖包裝一下並嵌入到 XDL 中。

此外,值得注意的是數據格式,XDL 團隊表示輸入數據流是根據框架定義的規範和格式,我們需要根據這些格式來準備數據。但是當數據流進入到單機上的稠密網路時,所有數據結構會自動轉化為 TensorFlow 內部的數據格式,我們可以按照 TensorFlow 那樣的格式定義後面各種各樣的網路。雖然 XDL 定義了新的數據結構,用戶必須按照經優化的模板定義數據結構,但這樣統一的格式可以避免保存、部署和遷移等遇到的大量問題,也能獲得更多的性能提升。

總的而言,在使用 XDL 構建大型分散式計算圖後,分散式數據流也需要按照格式定義才能傳入該計算圖。隨後我們可以將自己用 TensorFlow 構建的計算圖嵌入到 XDL 計算圖中,且當 XDL 數據流傳輸到該獨立的子計算圖時,它會轉化成對應深度學習框架的數據格式,並調用對應的後端完成計算。

TensorFlow 嵌入實例

在 XDL 的使用示例中,其展示了如何結合密集型特徵和稀疏性特徵,並完成聯合訓練。其中密集型特徵可能是圖像或語音等數據,而稀疏性特徵可能是用戶和商品之間的訪問關係。這就相當於將 TensorFlow 模型嵌入到 XDL 中,並承擔密集型特徵運算,而 XDL 本身會處理稀疏性特徵。

在這個示例中,模型包含一路密集型特徵 (deep0) 以及兩路稀疏性特徵 (sparse[0-1]),稀疏性特徵通過Embedding計算生成兩個 8 維密集型向量,並與本來的密集型特徵拼接後執行 4 層全連接層運算,並最後得出模型損失。

代碼地址:https://github.com/alibaba/x-deeplearning/wiki/%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B

首先是讀取數據,我們可以定義讀取器,並配置線程數和批量數等讀取等設定。因為數據格式是有規範的,所以我們可以像使用 Pandas 讀取 CSV 那樣簡單地抽取不同類型的數據,包括稀疏的訪問記錄和密集的圖像數據等。

隨後我們需要定義模型,這裡可以分為兩路,即稀疏和稠密。其中稀疏數據可以藉助 XDL 構建稠密的特徵向量,這有點類似於構建 NLP 中的詞嵌入向量,它在保留用戶和商品等信息的情況下儘可能為密集計算提供便利。

在構建嵌入向量後,它就應該與前面密集型特徵拼接在一起並完成第二路的稠密計算。這裡僅使用三層全連接網路作為示例,但是我們可以根據需要完成各種複雜的神經網路。此外,由於已有的框架在這些計算上非常有優勢,因此我們可以直接導入 TensorFlow 等框架,並將密集型計算分配給它們,這正相當於將子計算圖嵌入到了 XDL 分散式計算圖中。

最後,我們只要定義最優化器與對應的訓練過程就行了,當然損失函數等訓練信息也需要在這一部分定義。如下所示,值得注意的是,這裡是直接運行 XDL 定義的計算圖,並不用管嵌入的 TensorFlow 計算圖是什麼樣的。此外由 TrainSession 可見,XDL 採用的也是一種靜態計算圖。

當然,這可能只是最簡單的一種用法,模型的計算主要集中在單機後面的密集型網路中。但是 XDL 其實還是構建了一個分散式計算圖的,它可以理解為多個不同的單機節點構成的複雜網路。其中不同表示我們可以構建很多子網路,這些子網路可以使用 XDL 構建一個更龐大的深度學習網路。這種高級應用其實在業務中很常見,因為搜索、推薦和廣告等場景需要的系統通常都非常大。當然如果只需要 XDL 高性能的分散式訓練,我們可以僅簡單地嵌入單個計算圖。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器之心 的精彩文章:

Jeff Dean的激蕩人生:我和Sanjay在同一台電腦上寫代碼
體素科技:2018年,演算法驅動下的醫學影像分析進展

TAG:機器之心 |