1. 程式人生 > >基於PyTorch重寫sklearn,《現代大資料演算法》

基於PyTorch重寫sklearn,《現代大資料演算法》

HyperLearn是一個基於PyTorch重寫的機器學習工具包Scikit Learn,它的一些模組速度更快、需要記憶體更少,效率提高了一倍。

專為大資料而設計,HyperLearn可以使用50%以下的記憶體,並在某些模組上執行速度提高50%以上。將支援GPU,並且所有模組都是並行化的。

專案作者Daniel Han-Chen,畢業於澳大利亞新南威爾士大學,專注於AI、NLP和無監督機器學習的推薦和匹配演算法。

基於HyperLearn,作者展示瞭如何讓很多機器學習演算法更快、更高效。

其中一些很酷的演算法:

 ●  最小二乘法/線性迴歸的擬合時間相比sklearn減少70%,記憶體使用減少50%

 ●  由於新的並行演算法,非負矩陣分解的擬合時間相比sklearn減少50%
 ●  Euclidean演算法/餘弦相似度演算法加快40%
 ●  LSMR迭代最小二乘法時間減少50%
 ●   新的Reconstruction SVD演算法——使用SVD來估算丟失的資料,比mean imputation方法好約30%
稀疏矩陣運算速度提高50%——並行化
 ●  RandomizedSVD,速度加快20%~30%
 ●  New Incremental SVD和Incremental Eig,RandomizedSVD / Truncated SVD

 ●  等等

專案地址:

https://github.com/danielhanchen/hyperlearn

並且,作者寫了一本電子書:Modern Big Data Algorithms,介紹了12個新演算法以及一些更新的演算法:

86103c1378b6e0f6c2655cd7d8c0ab82c40aa540

紅色:新演算法;綠色:更新的演算法;藍色:即將釋出

讓我們先大致看一下“奇異值分解”(SVD)這一章,這是最重要的演算法之一。SVD將PCA、線性迴歸、嶺迴歸、QDA、LDA、LSI、推薦系統、壓縮演算法、L2 distance等多種演算法聯絡在一起,可以說是機器學習中最重要的演算法了。

a965e0e22315cf7a097444a6eee9e517dd77ac55

提速50%+,RAM使用減少50%+

提速50%+,RAM使用減少50%+,GPU支援的重寫Sklearn,使用Statsmodels組合新的演算法。

HyperLearn完全用PyTorch, NoGil Numba, Numpy, panda, Scipy 和 LAPACK編寫,映象主要是Scikit Learn。HyperLearn還嵌入了統計推斷方法,可以被想Scikit Learn語法(model.confidence_interval_)一樣呼叫。

71c4273362958accefa77d062b9e0864b7698845

速度/記憶體的比較

54b55b0a446c3929570c703409f982a315197372

時間表示Fit + Predict的時間。RAM(mb) = max( RAM(Fit), RAM(Predict) )

以下是N = 5000,P = 6000時的初步結果:

951a9b8bad2ecbe785e4e1191a79c0b861728560

關鍵方法和目標

 ●  令人尷尬的並行迴圈
 ●  速度提升50%+,精簡50%+
 ●  為什麼Statsmodels有時會慢得讓人無法忍受?
 ●  使用PyTorch的深度學習模組
 ●  程式碼量減少20%+,更清晰的程式碼
 ●  訪問舊演算法和令人興奮的新演算法

1. 令人尷尬的並行迴圈

 ●  包括記憶體共享,記憶體管理
 ●  通過PyTorch和Numba的CUDA並行性

2. 50%+ Faster, 50%+ Leaner

 ●  矩陣乘法排序:
https://en.wikipedia.org/wiki/Matrix_chain_multiplication
 ●  Element Wise矩陣乘法將複雜度從O(n^3)降低到O(n^2): https://en.wikipedia.org/wiki/Hadamard_product_(matrices)
 ●  將矩陣運算簡化為Einstein Notation: https://en.wikipedia.org/wiki/Einstein_notation
 ●  連續評估一次性矩陣操作以減少RAM開銷。
 ●  如果p >> n,則可能分解X.T優於分解X.
 ●  在某些情況下,應用QR分解SVD可能會更快。
 ●  利用矩陣的結構來計算更快(例如三角矩陣,Hermitian矩陣)。
 ●  計算 SVD(X),然後獲得pinv(X) ,有時比單純計算pinv(X)更快

3. 為什麼Statsmodels有時會慢得讓人無法忍受?

 ●  對線性模型的置信度、預測區間,假設檢驗和擬合優度檢驗進行了優化。
 ●  儘可能使用 Einstein Notation和Hadamard Products。
 ●  僅計算需要計算的內容(計算矩陣對角線,而不是整個矩陣)。
 ●  修復Statsmodels在符號、速度、記憶體方面的問題和變數儲存上的缺陷。

4. 使用PyTorch的深度學習模組

 ●  使用PyTorch建立Scikit-Learn

5. 程式碼量減少20%+,更清晰的程式碼

 ●  儘可能使用 Decorators和Functions。
 ●  直觀的中層函式名稱,如(isTensor,isIterable)。
 ●  通過hyperlearn.multiprocessing輕鬆處理並行

6. 訪問舊演算法和令人興奮的新演算法

 ●  矩陣補全演算法——非負最小二乘法,NNMF
 ●  批相似性隱含狄利克雷分佈(BS-LDA)
 ●  相關回歸(Correlation Regression)
 ●  可行的廣義最小二乘法FGLS
 ●  Outlier Tolerant Regression
 ●  多維樣條迴歸(Multidimensional Spline Regression)
 ●  廣義MICE
 ●  使用Uber的Pyro進行貝葉斯深度學習


原文釋出時間為:2018-11-19

本文作者:Daniel Han-Chen

本文來自雲棲社群合作伙伴新智元,瞭解相關資訊可以關注“AI_era”。

原文連結:基於PyTorch重寫sklearn,《現代大資料演算法》