天天看點

Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow

Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow

随着過去幾年來深度學習庫和軟體創新的蓬勃發展,研究機器學習是一個激動人心的時刻。大多數機器學習的庫都是從相當專業的計算代碼演變而來的,這些計算代碼一般用于解決大密集度問題,例如為稀疏模型提供邊緣支援的基于神經網絡的圖像分類通用架構。

靈活性。我們希望資料科學家能夠在完全自主的情況下輕松地運作和疊代他們的模型。是以我們用d語言寫了vectorflow。d語言是一種并不難學的現代系統語言,它具備快速的編譯器和函數程式設計功能,為初學者提供了類似python的使用體驗,但在運作時通常具有多個數量級的性能提升,同時讓經驗豐富的開發人員能夠利用其優秀的模闆引擎、編譯時功能和低級别特性(c接口、内聯彙編器、手動記憶體管理、自動向量化等等)。vectorflow沒有任何第三方的依賴,進而簡化了其部署。它提供了一個基于回調的api,可輕松接入自定義的損失函數來進行訓練。

稀疏感覺。在設計稀疏資料庫與淺層架構庫的過程中,運作時瓶頸往往是在io方面:例如,與大密集度矩陣上的卷積層不同,其運作每一行的操作極少。vectorflow能夠盡可能地避免在正向與反向傳遞過程中的記憶體複制或配置設定操作。矩陣向量操作同時擁有稀疏與密集兩種實作方式,其中密集型是simd向量化的。vectorflow還提供了一種在處理稀疏輸出梯度時進行稀疏反向傳遞的方式。

io未知。如果是io綁定,那麼根據定義,訓練器的運作速度由io層的速度決定。vectorflow對底層資料模式的要求非常寬松(僅需提供一個具有“features”屬性的行疊代器),以便可以根據資料源編寫高效的資料擴充卡,以及在使用同一程式設計語言的時候避免任何預處理或資料轉換步驟。這樣,你就能根據資料來移動代碼,而不是根據代碼移動資料。

在項目啟動後的幾個月裡,我們看到了很多基于該庫的用例,同時也有多個研究項目及生産系統開始利用vectorflow進行因果推論、生存回歸、密度估算和推薦排名算法。事實上,我們正在使用 vectorflow對netflix首頁的部分使用者體驗進行測試。vectorflow也被包含在netflix機器學習從業者所使用的基礎執行個體内的預設工具箱中。

Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow

利用此回調進行訓練,我們可以輕松比較這三種模型:

模型 1:基于小型稀疏特征的線性模型(需要學習約 500 個參數)

模型 2:基于大型稀疏特征的線性模型(需要學習 100 萬個參數)

模型 3:基于稀疏特征的淺層神經網絡(需要學習 1000 萬個參數),訓練資料量翻倍

Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow
Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow

這裡的資料源是存儲在s3上的一個hive表,其中的列式資料格式是parquet。另外,我們通過将該資料流傳入c4.4xlarge執行個體并建構記憶體内訓練集的方式進行直接訓練。結果如下所示:

Netflix開源面向稀疏資料優化的輕量級神經網絡庫Vectorflow

文章原标題《introducing vectorflow》,作者:benoît rostykus, netflix technology,譯者:夏天,審校:主題曲哥哥。

繼續閱讀