高速微分ソートアルゴリズム、カスタムC++、CUDAのパッケージで、パフォーマンスが向上しました。

高速微分ソートアルゴリズム、カスタムC++、CUDAのパッケージで、パフォーマンスが向上しました。

[[390293]]

昨年の初め、Google は論文「Fast Differentiable Sorting and Ranking」で、O(nlogn) の時間計算量と O(n) の空間計算量を持つ初の微分可能ソート アルゴリズムを発表しました。これは、既存の方法よりも桁違いに高速です。

最近、誰かが GitHub でプロジェクトをオープンソース化しました。これは、ソフトウェア パッケージの形式で高速な微分ソートとランキングを実装したものです。このプロジェクトは数日間オンラインになり、300 以上のスターを獲得しました。

  • プロジェクトアドレス: https://github.com/teddykoker/torchsort
  • 高速微分ソートおよびランキングの論文アドレス: https://arxiv.org/pdf/2002.08871.pdf

トーチソート

Torchsort は、Blondel らによって提案された高速微分ソートおよびランキングを実装し、純粋な PyTorch で実装されています。コードの大部分は、プロジェクト「google-research/fast-soft-sort」のオリジナルの Numpy 実装からコピーされており、高速パフォーマンスのためにカスタム C++ および CUDA カーネルが使用されています。

Torchsort のインストールは非常に簡単です。一般的に使用されている pip インストール方法を使用できます。インストール コードは次のとおりです。

  1. pip インストール torchsort

CUDA 拡張機能をビルドする場合は、CUDA ツールチェーンをインストールする必要があります。 CUDA 以外のランタイム環境で docker などのアプリケーションをビルドする場合は、インストール前に環境変数「TORCH_CUDA_ARCH_LIST="Pascal;Volta;Turing"」をエクスポートする必要があります。

使い方

torchsort には、soft_rank と soft_sort という 2 つの関数があり、それぞれに、regularization (l2 または kl) (正規化関数) とregularization_strength (スカラー値) というパラメーターがあります。それぞれは、正規化の強度に応じて精度を変えながら、2D テンソルの最後の次元をソートします。

  1. 輸入トーチ
  2. トーチソートをインポートする
  3. x = torch.tensor([[ 8 , 0 , 5 , 3 , 2 , 1 , 6 , 7 , 9 ]])
  4. torchsort.soft_sort(x, 正規化の強度= 1.0 )
  5. # テンソル([[ 0.5556 , 1.5556 , 2.5556 , 3.5556 , 4.5556 , 5.5556 , 6.5556 , 7.5556 , 8.5556 ]])
  6. torchsort.soft_sort(x, 正規化の強度= 0.1 )
  7. # テンソル([[- 0 ., 1 ., 2 ., 3 ., 5 ., 6 ., 7 ., 8 ., 9 .]])
  8. トーチソート.ソフトランク(x)
  9. # テンソル([[ 8 ., 1 ., 5 ., 4 ., 3 ., 2 ., 6 ., 7 ., 9 .]])

どちらの操作も完全に微分可能であり、次のように CPU または GPU に実装できます。

  1. x = torch.tensor([[ 8 ., 0 ., 5 ., 3 ., 2 ., 1 ., 6 ., 7 ., 9 .]], requires_grad=True).cuda()
  2. y = トーチソート.soft_sort(x)
  3. torch.autograd.grad(y[ 0,0 ],x) の関数
  4. # (テンソル([[ 0.1111 , 0.1111 , 0.1111 , 0.1111 , 0.1111 , 0.1111 , 0.1111 , 0.1111 ]],
  5. # デバイス = 'cuda:0' ),)

表示例

スピアマン順位係数は、2 つの変数間の単調な相関を測定するのに非常に役立つ指標です。 Torchsort を使用して微分可能なスピアマン順位係数関数を作成し、そのメトリックに対してモデルを直接最適化することができます。

  1. 輸入トーチ
  2. トーチソートをインポートする
  3. 定義spearmanr(予測、ターゲット、**kw):
  4. pred = torchsort.soft_rank(pred, **kw)
  5. ターゲット = torchsort.soft_rank(ターゲット、**kw)
  6. pred = pred - pred.mean()
  7. pred = pred / pred.norm()
  8. ターゲット = ターゲット - ターゲット.mean()
  9. ターゲット = ターゲット / ターゲット.norm()
  10. 戻り値(予測 * ターゲット).sum()
  11. pred = torch.tensor([[ 1 ., 2 ., 3 ., 4 ., 5 .]], requires_grad=True)
  12. ターゲット = torch.tensor([[ 5 ., 6 ., 7 ., 8 ., 7 .]])
  13. スピアマン = スピアマンr(予測、ターゲット)
  14. # テンソル( 0.8321 )
  15. torch.autograd.grad(スピアマン、予測)
  16. # (テンソル([[- 5 .5470e- 02 , 2 .9802e- 09 , 5 .5470e- 02 , 1 .1094e- 01 , - 1 .1094e- 01 ]]),)

ベンチマーク

torchsort と fast_soft_sort はどちらも時間計算量が O(n log n) で、組み込みの torch.sort と比較してオーバーヘッドが若干追加されます。 Numba JIT のバッチ サイズが 1 の場合 (左の図を参照)、fast_soft_sort のフォワード パスは Torchsort CPU カーネルとほぼ同じパフォーマンスを発揮しますが、バックワード パスは依然として一部の Python コードに依存しているため、パフォーマンスが大幅に低下します。

さらに、torchsort カーネルはバッチ処理をサポートしており、バッチ サイズが大きくなるにつれて fast_soft_sort よりも優れたパフォーマンスが得られます。

トーチソート CUDA カーネルは、2000 未満のシーケンス長では優れたパフォーマンスを発揮し、非常に大きなバッチに拡張できます。将来的には、CUDA カーネルがさらに最適化され、組み込みの torch.sort に近いパフォーマンスが実現される可能性があります。

<<:  2025年までに音声認識市場は267億9000万ドルに達する

>>:  NLP を上手に使いこなすには、適切な「武器」が必要です。GLUE で 1 位にランクされている武器をご存知ですか?

ブログ    
ブログ    
ブログ    
ブログ    

推薦する

...

...

人工知能の継続的な発展により、ロボットが人間に取って代わり、あらゆる労働を行うようになるのでしょうか?

[[385749]]写真はロボット最近、メディアの報道によると、人類の生存を脅かすと言われる米国の...

自動運転の運用設計領域(ODD)に関する記事

2021年4月30日、SAEはJ3016「運転自動化分類」の第4版をリリースしました。これは、201...

機械学習と人工知能の未来について語る

[[258702]] [51CTO.com クイック翻訳] 機械学習 (ML) と人工知能 (AI)...

マイクロソフトCEOナデラ氏:世界は人工知能に関して幅広い合意を形成しつつある

マイクロソフトのCEOサティア・ナデラ氏は1月17日(現地時間)の火曜日、人工知能に関して世界中でコ...

IDC: 企業の AI ソリューションへの支出は 2021 年に 3,420 億ドルに達すると予想

[[417110]] IDCの世界人工知能市場に関する最新の半期追跡レポートによると、世界のAI市場...

30分で独自のディープラーニングサーバーを作成する

新しいプロジェクトを始めるたびに、私はディープラーニング マシンを何度も何度も作成していることに気づ...

Google 数学 AI が Nature に発表: IMO 金メダルの幾何学レベル、定理証明は呉文軍の 1978 年の法則を上回る

Google DeepMindが再びNatureを出版、AIのAlphaシリーズが力強く復活、数学レ...

最初の壮大な統合事前トレーニング済みモデル! BEVGPT: 予測、意思決定、動作計画を統合します。

この記事は、Heart of Autonomous Driving の公開アカウントから許可を得て転...

...

私、シュシュもVRヘッドセットを持っています!コーネル大学の研究者らがマウスの頭蓋骨を開き、脳と行動の没入型研究を行っている。

最近、マウスの世界でも仮想現実の時代が到来しました。はい、すべての人間が VR ヘッドセットを持って...

MITの中国人博士課程学生がChatGPTをJupyterに移行し、自然言語プログラミングをワンストップソリューションに

この記事はAI新メディアQuantum Bit(公開アカウントID:QbitAI)より許可を得て転載...

自動運転の実用化にはまだいくつかのハードルがある

ここ数年、世界的な自動運転はまだ発展途上であったとすれば、各国の政策の推進により、自動運転に関する最...

追加データなしで、ImageNetで初めて87.1%の精度を達成した。Yan ShuichengのチームはVOLOをオープンソース化した。

[[407987]]過去 10 年間、コンピューター ビジョン認識タスクは畳み込みニューラル ネッ...