0
雷鋒網 AI 開發者按:在去年 1 月,Uber 推出了一種與模型無關的機器學習可視化調試工具——Manifold,它可以讓模型迭代過程更易于操作,并能夠提供更多的信息;同時,該工具也被 Uber 用來識別機器學習模型中的一些問題。
官方表示,大多數開發者通常會將 20% 的精力放在構建初始的工作模型上,而將 80% 的精力用來提高模型性能,即機器學習模型開發 20/80 分配法則,這也體現出調試機器學習模型的困難。因此,為了讓開發者能夠更好的利用 Manifold 帶來的高效率,日前 Uber 宣布,他們將 Manifold 作為開源項目發布。

傳統上,數據科學家在開發模型時,他們使用匯總分數,例如:對數損失、曲線下面積(AUC)和平均絕對誤差(MAE)來評估每個候選模型。盡管這些指標提供了有關模型執行情況的直觀數據,但它們并未傳達有關模型執行不佳的原因以及如何改善模型性能的大量信息。因而,模型構建者傾向于依賴反復試驗和誤差來決定如何改善模型。
對數損失:
http://wiki.fast.ai/index.php/Log_Loss
曲線下面積:
https://stats.stackexchange.com/questions/132777/what-does-auc-stand-for-and-what-is-it
平均絕對誤差:
為了讓模型迭代過程更加可操作,并能夠提供更多的信息,Manifold 應運而生,它是一個用于機器學習性能診斷和模型調試的可視化工具。Manifold 是一個獨立的 Web 工具和 Python 包,它有 3 個主要優勢:
模型無關性;
模型性能評估的可視化分析,超越了模型性能匯總統計,以此來提高準確性;
將可視化分析系統和標準模型訓練計算分開的能力,幫助更快和更靈活進行模型開發;

來源:Uber
Manifold 利用可視化分析技術讓機器學習開發者能夠超越總體指標檢測模型無法精準預測的數據子集;它還通過揭示性能表現較好和較差數據子集之間的特征分布差異,來說明模型性能表現不佳的潛在原因。
此外,它還可以顯示對于每一個數據子集,一些候選模型將有怎樣的預測準確性差異,從而為一些高級處理(如模型集成)提供數據根據。
隨著機器學習越來越成為相關業務不可分割的部分,提供使模型更透明且易于理解工具就顯得更加重要,這一工具可以使得開發者能自信自如地使用機器學習生成的預測。但考慮到機器學習模型本質上是不透明的復雜性,則需要通過新興的機器學習可視化來解決這個問題。
以前的機器學習可視化方法通常包括:直接可視化內部結構或模型參數和受底層算法約束的設計,但這可能導致無法擴展到可以處理更大范圍內的通用用例。

來源:Uber
為了應對這個挑戰,Manifold 在設計之初則考慮到了機器學習模型服務,并從分類和回歸模型開始入手;這也使得該工具可以通過揭示數據子集之間的特征分布差異為機器學習模型開發黑盒提供更高的透明度。
同時,借助 Manifold 的設計,開發者也顛覆了傳統機器學習模型的可視化,無需檢查模型,而是直接通過以下方式檢查各個數據點:
識別影響模型性能的數據段,以及這些數據如何影響模型的性能;
評估這些數據段的聚合特征,以便識別某些模型行為背后的原因。
Manifold 界面包括兩個部分,分別是性能比較視圖和特征屬性視圖。其中,性能比較視圖,由帶有小提琴編碼的多路圖組成,用于比較模型和數據段之間的性能;

Manifold 性能比較視圖的可視編碼由 x 軸和 y 軸以及顏色組成,x 軸表示用戶選定的性能指標,而 y 軸表示數據段,顏色表示模型。曲線高度顯示了在每個數據段上每個模型的性能分布 來源:Uber
而特征屬性視圖,由兩套特征分布直方圖構成,用于比較兩個選定數據段的特征。

特征屬性視圖的可視編碼包含 x 軸(特征值范圍)和 y 軸(數據點的個數)以及顏色(數據段組)。根據兩個數據段組的分布差異對特征進行排序 來源:Uber
Manifold 通過以下三個步驟幫助用戶發現模型需要改進的區域:
比較 首先,給定一個具有一個或多個機器學習模型輸出的數據集,Manifold 比較并突出顯示模型或數據子集之間的性能差異。
切片 該步驟允許用戶根據模型性能選擇感興趣的數據子集以便進行進一步的檢查。
屬性 然后,Manifold 突出顯示所選數據子集之間的特征分布差異,幫助用戶找到性能結果背后的原因。

該可視化原型顯示了數據空間中的模型性能,根據其性能(x 軸)和其中一個特征的值(y 軸)定位每個數據點 來源:Uber
開發者希望通過可視化原型顯示了數據空間中的模型性能,根據其性能(x 軸)和其中一個特征的值(y 軸)定位每個數據點,但該方法存在 3 個主要挑戰:
因為有太多的點,無法清楚地識別模式;需要通過抽離或減少點來揭示模式;
難以確定哪些特征對于 y 軸最有價值,以便識別出相關模式;
隨著模型數量的增加,不同模型之間的比較變得更難;
為了提前解決這些問題,開發者實現了一些聚合 / 簡化操作;即:不單獨表示每個數據點,而是把它們組成子集。在開發中,無需使用 y 軸來編碼特定特征的值,而是使用了表示不同數據子集的分類軸。該方法演變成了最終的性能圖表,并具有兩個顯著的優點:
基本相似的數據點不會重復出現在圖表上,只突出顯示最主要的高層差異;
因為減少了圖表中各種形狀的數量,所以可以在同一圖表中繪制不同的模型,以更好地加以比較;
而在工具的「性能比較」視圖中顯示模式的關鍵,在于把測試數據集分成子集。在 Manifold 中,子集是基于一個或多個性能列的聚類算法自動生成的,于每個模型,具有相似性能的數據被分到同一個組中(因為該算法確保模型 X 的性能對于子集 Y 中不同的數據點是一致的)。下圖則說明了這個過程:

所有的數據點收集自每個模型,根據實際情況評估后給出性能度量 來源:Uber

左側:性能指標作為在 Manifold 中運行的聚類算法的輸入。右側:用戶可以調整集群參數來探索數據集中的模式 來源:Uber
由于生成 Manifold 可視化涉及一些密集的數值計算(聚類、KL 發散),計算性能不足會拖慢用戶界面的渲染,影響到整個用戶體驗。因此,Manifold 使用了 Python 并利用其 DataFrame 處理和機器學習庫(如 Pandas 和 Scikit-Learn)實現所有重量級的計算。
Pandas:
Scikit-Learn:
但由于依賴 Python 后端會降低了 Manifold 的靈活性,難以實現組件化,這也成了在將 Manifold 和企業機器學習生態系統集成時的一個缺點。因此,除了 Python 計算外,Manifold 用 GPU 加速器添加了第 2 個用戶工作流,該 GPU 加速器是用更加靈活的 JavaScript 編寫而得。下圖展示了兩個工作流如何與 Manifold 集成的過程:

Manifold 由 3 個不同的部分組成:數據源、后端和前端 來源:Uber
用戶可通過 2 種方式使用 Manifold,即:通過 Python 包或 npm 包(通過網頁)。由于代碼可重用性和模塊化對兩個工作流的共存至關重要,因此,Python 和 JavaScript 代碼庫也被組織成了 3 個不同的功能模塊:
數據轉換器,一種將來自其他內部服務(如 Michelangelo)的數據格式轉換為 Manifold 內部數據表示格式的功能;
計算引擎,一種負責運行聚類和其他數據密集計算的功能;
前端組件,Manifold 可視化分析系統(其 Python 包使用了 JavaScript 前端組件的內置版本)的用戶界面。
與 Python 相比,處理數據密集計算對 JavaScript 計算引擎來說是個挑戰。為了讓開發者看到有意義的模式,需要大約計算 1 萬個數據記錄(「行」)。除了其他操作,KL 發散的聚類和計算需要在前端進行,這可能會造成速度瓶頸。根據測試結果,開發者在更新性能比較視圖中的簇數量時,使用純 JavaScript 實現的計算可能需要 10 多秒時間。
因此,我們把 TensorFlow.js 作為線性代數實用庫來實現我們的 k 均值聚類和 KL 發散計算。因為這種類型的計算可以被矢量化,從而可以利用 WebGL 加速,所以更新同樣數量的簇的任務可以在不到 1 秒的時間里完成,超過原來性能的 100 倍。
通過組件化并將其包含在 npm 包中,Manifold 具有更好的靈活性,既可以用作獨立服務,也可以集成到其他機器學習系統(如 Michelangelo)中。
因為大多數用于機器學習的可視化工具需要額外的計算處理,超過了模型訓練后端具備的計算處理能力,所以在把它們與其它機器學習系統集成在一起可能很復雜且不可擴展。Manifold 針對這種情況提出了解決方案,通過在可視化分析系統中分開處理訓練模型所需的計算,可以進行更快的迭代,并得到了更簡潔直觀的數據接口。
在 Manifold 的第一個開源版本中,Uber 添加了各種特性,使模型調試比內部迭代更容易。版本 1 的特性包括:
通用二進制分類和回歸模型調試的模型無關性支持。開發者將能夠分析并比較各種算法類型的模型,使他們能夠辨別不同數據切片的性能差異。
對表格特征輸入的可視化支持,包括數字、類別和地理空間特征類型。 利用每個數據切片的特征值分布信息,用戶可以更好地了解某些性能問題的潛在原因,例如,模型的預測損失與其數據點的地理位置和分布之間是否存在相關性。

Manifold 新的升級包括對地理空間特征的可視化支持 來源:Uber
與 Jupyter Notebook 集成。Manifold 接受作為 Pandas DataFrame 對象的數據輸入,并在 Jupyter 中呈現該數據的可視化效果。由于 Jupyter Notebook 是數據科學家和機器學習工程師使用最廣泛的數據科學平臺之一,因此這種集成讓用戶得以能夠在不中斷正常工作流的情況下分析他們的模型。

Manifold 的 Jupyter Notebook 集成接受作為 Pandas DataFrame 對象的數據輸入,并在 Jupyter Notebook UI 中呈現可視化效果 來源:Uber
基于每個實例預測損失和其他特征值的交互式數據切片和性能比較。 用戶將能夠根據預測損失、基準真相(Ground Truth)或其他感興趣的特征對數據進行切片和查詢。這個特性將使用戶能夠通過通用的數據切片邏輯快速驗證或拒絕其假設。
目前,Manifold 的開源版本提供了 npm 軟件包版本,而對于 Jupyter Notebook 的綁定,則提供了一個 Python 包版本。要開始使用 Manifold,請按照 GitHub Repo 中的文檔進行操作并在本地安裝,或者查看 Uber 的演示網站。
原文地址:
https://eng.uber.com/manifold-open-source/
Manifold 詳細介紹:
https://eng.uber.com/manifold/
Manifold 論文地址:
雷鋒網 AI 開發者 雷鋒網
雷峰網原創文章,未經授權禁止轉載。詳情見轉載須知。