Skip to main content
QUICK REVIEW

[論文レビュー] DiffSharp: Automatic Differentiation Library

Atılım Güneş Baydin, Barak A. Pearlmutter|arXiv (Cornell University)|Nov 24, 2015
Parallel Computing and Optimization Techniques参考文献 12被引用数 5
ひとこと要約

DiffSharp は、F# で実装された、前向きおよび逆向きの AD モードをサポートする、機械学習向けの高性能な自動微分(AD)ライブラリであり、タグによる任意のネスティングと線形代数プリミティブも備えています。最小限のオーバーヘッドで正確な勾配、ヘッセ行列、ヤコビ行列、方向微分を計算可能であり、BLAS/LAPACK バックエンドを活用し、将来の GPU アクセeleration をサポートしています。

ABSTRACT

In this paper we introduce DiffSharp, an automatic differentiation (AD) library designed with machine learning in mind. AD is a family of techniques that evaluate derivatives at machine precision with only a small constant factor of overhead, by systematically applying the chain rule of calculus at the elementary operator level. DiffSharp aims to make an extensive array of AD techniques available, in convenient form, to the machine learning community. These including arbitrary nesting of forward/reverse AD operations, AD with linear algebra primitives, and a functional API that emphasizes the use of higher-order functions and composition. The library exposes this functionality through an API that provides gradients, Hessians, Jacobians, directional derivatives, and matrix-free Hessian- and Jacobian-vector products. Bearing the performance requirements of the latest machine learning techniques in mind, the underlying computations are run through a high-performance BLAS/LAPACK backend, using OpenBLAS by default. GPU support is currently being implemented.

研究の動機と目的

  • 現代の機械学習ワークロードに特化した、柔軟で高性能な AD ライブラリを提供すること。
  • ハイパーグラデント計算などの高度な最適化手法を可能にするために、前向きおよび逆向き AD モードの任意のネスティングをサポートすること。
  • 高階関数と合成を重視する、関数型 API を提供して、合成的なモデル構築を促進すること。
  • AD 機能と効率的な線形代数演算を統合し、計算オーバーヘッドを最小限に抑えること。
  • コンパイル時コード変換とスパarsity の活用による、将来の GPU アクセレレーションとパフォーマンス最適化をサポートすること。

提案手法

  • 機械精度での微分計算を実現するため、AD 対応の線形代数プリミティブとオペレータオーバーロードを用いる。
  • ネストされた AD 計算における摂動の混同を防ぐために、タグメカニズムを採用する。
  • 高性能な BLAS/LAPACK 操作を実現するため、OpenBLAS と統合し、非 BLAS 操作についてはカスタム並列実装を提供する。
  • 勾配、ヘッセ行列、ヤコビ行列、方向微分、マトリクスフリー積を含む、関数型 API を公開する。
  • F# のコードクォーテーションを活用し、将来的にコンパイル時ソース変換に基づく AD を実現し、ランタイム オーバーヘッドを低減する。
  • 将来、CUDA を介して GPU 拡張を計画し、グラフ彩色と圧縮技術を用いてマトリクスのスパarsity を活用する。

実験結果

リサーチクエスチョン

  • RQ1機械学習における、効率的かつ安全なネスト構成での自動微分の組み合わせは、どのように実現できるか?
  • RQ2逆向きおよび前向き AD モードを用いた高階微分およびヤコビ行列の計算において、どのようなパフォーマンス的オーバーヘッドが生じるか?
  • RQ3一等級の微分プリミティブを備えた関数型プログラミングのアプローチは、よりモジュラーで合成可能な機械学習モデルの構築を可能にするか?
  • RQ4高性能で拡張性のあるライブラリにおいて、AD を線形代数演算と効果的に統合する方法は何か?
  • RQ5実世界の機械学習ワークロードにおいて、特にスカラーおよびベクトル値関数に対して、AD の実用的パフォーマンス特性はどのようなものか?

主な発見

  • ヘルムホルツエネルギー関数における逆モード AD のオーバーヘッド係数 ωr は、独立変数の数 n が増加するにつれて、2 に漸近的に近づく。
  • 勾配計算において、計算オーバーヘッドが限定的であり、典型的な関数では ωr ≤ 3 となる「安価な勾配の原則」と整合的である。
  • タグベースの微分により、前向きおよび逆向き AD の任意のネスティングが、摂動の混同なしに実現可能である。
  • 関数型 API により、最適化アルゴリズム、ニューラルネットワーク、確率的モデルの簡潔で合成可能な実装が可能である。
  • OpenBLAS との統合および要素演算のカスタム並列実装により、パフォーマンスが向上している。
  • 将来的に F# のコードクォーテーションを活用したコンパイル時変換により、さらにランタイム オーバーヘッドが低減され、ユーザーのコードが簡素化される見込みである。

より良い研究を、今すぐ始めましょう

論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。

クレジットカード登録不要

このレビューはAIが作成し、人間の編集者が確認しました。