正如在 批量標準化紙 中所解釋的,如果神經網絡的輸入是高斯的,那么訓練它就變得容易多了。這很清楚。如果你的模型輸入不是高斯的, RAPIDS 會在眨眼間把它轉換成高斯的。
高斯秩變換 是一種新的標準化技術,用于轉換輸入數據以訓練深層神經網絡。最近,我們在 預測分子競爭性質 中使用了這種技術,它很容易將 m 消息傳遞神經網絡模型 的精度提高了一個顯著的幅度。這篇博文將展示如何使用 RAPIDS cuDF 和 Chainer CuPy 實現 GPU 加速的 Gauss 秩變換,并使用 pandas 和 NumPy 替換來實現 100 倍加速 .
介紹
輸入歸一化是訓練神經網絡的關鍵。高斯秩變換的思想最早是由 邁克爾·賈勒。 在他的 塞古羅港的安全駕駛預測 挑戰的勝利解中提出的。他訓練去噪自動編碼器,并嘗試了幾種輸入標準化方法。最后,他得出這樣的結論:
我在過去發現的最棒的東西是 GaussRank ,它能直接發揮作用。這通常比標準的 mean / std 定標器或 min / max (標準化)好得多。
工作原理
有三個步驟可以將任意分布下的連續值向量轉換為基于秩的高斯分布,如圖 1 所示。

CuPy 實現非常簡單,非常類似于 NumPy 操作。實際上,只需更改導入的函數,就可以將整個進程從 CPU 移動到 GPU ,而無需任何其他代碼更改。
高斯秩變換的 CuPy 和 NumPy 實現的比較。
反變換用于從高斯變換中恢復原始值。這是展示 cuDF 與 CuPy 的互操作性 的另一個很好的例子。就像您可以使用 NumPy 和 pandas 一樣,您可以在同一個工作流中將 cuDF 和 CuPy 編織在一起,同時將數據完全保存在 GPU 上。
一個真實的例子
對于本例,我們將使用 CHAMPS 分子性質預測數據集 。這項任務是預測八種不同化學鍵類型的分子中原子對之間的 標量耦合常數 (基本真理) 。具有挑戰性的是,對于每種鍵類型,基本真值的分布都有很大的不同,均值和方差也不同。這使得神經網絡很難收斂。

因此,我們將高斯秩變換應用于訓練數據的基本事實,為所有鍵類型創建一個統一的干凈高斯分布。

在這個回歸任務中,使用 GaussRank
變換訓練數據的基本事實。
為了進行推斷,我們將反高斯秩變換應用于測試數據的預測,以便它們匹配每種鍵類型的原始不同分布。由于測試數據中目標的真實分布是未知的,因此根據訓練數據中目標變量的分布計算測試數據預測的逆變換。應該注意的是,這種逆變換只需要用于目標變量。

通過運用這一技巧 平均絕對誤差( LMAE )的對數 of our message passing neural network is improved by 18%!
請記住 GaussRank
確實有一些限制:
- 它只適用于連續變量,并且
- 如果輸入已經接近高斯分布,或者非常不對稱,則性能 MIG ht 不會得到改善,甚至變得更差。
高斯秩變換與各種神經網絡的相互作用是一個非常活躍的研究課題。
加速
我們測量變換和反變換的總時間。對于正在進行的 CHAMPS 數據集, cuDF + CuPy 在單個 NVIDIA V100 GPU 上的實現在 Intel Xeon CPU 上實現了 比 pandas + NumPy 快 25 倍 。我們生成 合成隨機數據 以進行更全面的比較。對于 10M 及以上的數據點,我們的 RAPIDS 實現比 快 100 倍。 多

結論
RAPIDS 在提供驚人的性能方面取得了長足的進步,代碼幾乎沒有變化。這篇博文展示了使用 RAPIDS cuDF 和 CuPy 作為 pandas 和 NumPy 的替代品來實現 gpu 性能改進是多么容易。如中所示 完整的筆記本 ,通過 只添加兩行代碼 ,高斯秩變換檢測到輸入張量在 GPU 上,并自動從 pandas + NumPy 切換到 cuDF + CuPy 。再簡單不過了。
?
https://gist.github.com/daxiongshu/e1a1aba2d2a31b438561ed1333543ac7#file-rank_gauss_inv-ipynb