| 初回リリース | 2008年2月1日[1] |
|---|---|
| 安定版リリース | 4.5.0 [2]
/ 2024年9月18日 |
| リポジトリ |
|
| 書かれた | C++、Python、Julia、Go |
| オペレーティング·システム | クロスプラットフォーム |
| 利用可能 | 英語 |
| タイプ | ソフトウェアライブラリ 機械学習 |
| ライセンス | オープンソース( BSD ) |
| Webサイト | mlpack.org |
mlpackは、機械学習と人工知能のためのC++で書かれた無料のオープンソースのヘッダーのみのソフトウェアライブラリであり、 Armadilloライブラリとensmallen数値最適化ライブラリ上に構築されています。 [3] mlpackは、スケーラビリティ、速度、使いやすさに重点を置いています。その目的は、シンプルで一貫性のあるAPIによって初心者ユーザーが機械学習を可能にすると同時に、C++言語の機能を活用して熟練ユーザーに最大のパフォーマンスと最大の柔軟性を提供することです。[4] mlpackは、依存関係が最小限の軽量な展開インフラストラクチャも備えているため、組み込みシステムやリソースの少ないデバイスに最適です。対象ユーザーは科学者とエンジニアです。
これはBSD ライセンスの下で配布されるオープンソース ソフトウェアであり、オープンソース ソフトウェアとプロプライエタリ ソフトウェアの両方の開発に役立ちます。リリース 1.0.11 以前はLGPLライセンスの下でリリースされました。このプロジェクトは、ジョージア工科大学と世界中の貢献 によってサポートされています。
特徴
古典的な機械学習アルゴリズム
mlpack には、教師あり学習パラダイムの分類や回帰からクラスタリングや次元削減アルゴリズムまで、実際の問題を解決するために使用される幅広いアルゴリズムが含まれています。以下は、mlpack がサポートするアルゴリズムとモデルの非網羅的なリストです。
- 協調フィルタリング
- 決定木(1 レベルの決定木)
- 密度推定ツリー
- ユークリッド最小全域木
- ガウス混合モデル(GMM)
- 隠れマルコフモデル(HMM)
- カーネル密度推定(KDE)
- カーネル主成分分析(KPCA)
- K平均法クラスタリング
- 最小角回帰(LARS/LASSO)
- 線形回帰
- ベイズ線形回帰
- ローカル座標コーディング
- 局所性感知ハッシュ(LSH)
- ロジスティック回帰
- 最大カーネル探索
- ナイーブベイズ分類器
- デュアルツリーアルゴリズムによる最近傍探索
- 近隣コンポーネント分析(NCA)
- 非負行列分解(NMF)
- 主成分分析(PCA)
- 独立成分分析(ICA)
- ランク近似最近傍法(RANN)
- 単純最小二乗線形回帰(およびリッジ回帰)
- スパースコーディング、スパース辞書学習
- ツリーベースの近傍探索(全k近傍、全k最遠近傍)、kdツリーまたはカバーツリーを使用
- ツリーベースの範囲検索
GRU、LSTM構造のクラス テンプレートが利用できるため、ライブラリはリカレント ニューラル ネットワークもサポートします。
バインディング
R、Go、Julia、[5] Pythonへのバインディングがあり、ターミナルを使用したコマンドラインインターフェイス(CLI)へのバインディングもあります。そのバインディングシステムは他の言語にも拡張可能です。
強化学習
mlpack には、C++ で実装されたいくつかの強化学習 (RL) アルゴリズムと一連の例が含まれており、これらのアルゴリズムは例ごとに調整したり、外部シミュレータと組み合わせたりすることができます。現在、mlpack は以下をサポートしています。
- Q学習
- ディープ デターミニスティック ポリシー グラディエント
- ソフト俳優評論家
- ツインディレイドDDPG(TD3)
デザインの特徴
mlpack には、エッジ AI や IoT ドメインなどの特殊なアプリケーションに特に適したさまざまな設計機能が含まれています。C++ コードベースにより、センサーとのシームレスな統合が可能になり、エッジでの直接的なデータ抽出とデバイス上の前処理が容易になります。以下では、これらの環境での mlpack の機能を強調する特定の設計機能セットの概要を示します。
依存関係の数が少ない
mlpack は依存性の低いライブラリで、ソフトウェアを簡単に導入するのに最適です。mlpack バイナリは静的にリンクでき、最小限の労力であらゆるシステムに導入できます。Docker コンテナの使用は必須ではなく、推奨されていません。導入予定のハードウェアの種類に応じて、ensmallen と Armadillo または Bandicoot のみが必要なため、リソースの少ないデバイスに適しています。mlpack は、モデルのシリアル化に Cereal ライブラリを使用します。その他の依存性もヘッダーのみで、ライブラリ自体の一部です。
バイナリフットプリントが低い
バイナリ サイズに関して言えば、mlpack メソッドは他の一般的なライブラリに比べてフットプリントが大幅に小さくなります。以下では、mlpack、PyTorch、scikit-learn のデプロイ可能なバイナリ サイズの比較を示します。一貫性を確保するために、この比較では同じアプリケーションとそのすべての依存関係が 1 つの Docker コンテナー内にパッケージ化されました。
Tensorflow Liteなどの他のライブラリも存在しますが、これらのライブラリは通常、ニューラル ネットワークの推論やトレーニングなどの 1 つの方法に特化しています。
例
以下は、mlpack を使用して決定木モデルをトレーニングし、それを分類に使用する簡単な例です。もちろん、Load 関数を使用して独自のデータセットを取り込むこともできますが、ここでは API を示します。
// ランダムな数値データで決定木をトレーニングし、テスト データでラベルを予測します。
// すべてのデータとラベルは均一ランダムです。10 次元データ、5 クラス。
// 実際のアプリケーションでは、data::Load() 呼び出しまたは同様のものに置き換えます。
arma :: matデータセット( 10 , 1000 , arma :: fill :: randu ); // 1000 ポイント。
arma ::行< size_t >ラベル=
arma :: randi < arma :: Row < size_t >> ( 1000 、arma :: distr_param ( 0 、4 ));
arma :: mat testDataset ( 10 , 500 , arma :: fill :: randu ); // 500 個のテスト ポイント。
mlpack :: DecisionTree tree ; // ステップ 1: モデルを作成します。
tree.Train ( dataset , labels , 5 ); // ステップ2: モデルをトレーニングします。
arma :: Row < size_t >予測;
tree . Classify ( testDataset , predictions ); // ステップ 3: ポイントを分類します。
// テスト予測に関する情報を出力します。
std :: cout << arma :: accu ( predictions == 2 ) << " クラスとして分類されるテストポイント "
<< "2." << std :: endl ;
上記の例は、API 設計のシンプルさを示しており、人気のPythonベースの機械学習キット ( scikit-learn ) に似ています。私たちの目標は、ユーザーのために API と分類や予測などの主要な機械学習機能を簡素化することです。より複雑な例は、メソッドのドキュメントを含む例リポジトリにあります。
バックエンド
Armadillo は mlpack で使用されるデフォルトの線形代数ライブラリで、機械学習アルゴリズムに必要な行列操作と演算を提供します。Armadillo は効率性とシンプルさで知られています。ヘッダーのみのモードでも使用でき、リンクする必要があるライブラリはOpenBLAS、IntelMKL、またはLAPACK のいずれかだけです。
バンディクート
Bandicoot [6]は科学計算用に設計された C++ 線形代数ライブラリで、グラフィックス処理装置 (GPU)で計算を実行することを目的として Armadillo と同一の API を持っています。このライブラリの目的は、ソースコードに小さな変更 (名前空間の変更やリンクライブラリの変更など) を加えることで、CPU と GPU 間の移行を容易にすることです。mlpack は現在、GPU 上でニューラルネットワークのトレーニングを提供することを目的として、Bandicoot を部分的にサポートしています。次の例は、同一の操作を実行する 2 つのコードブロックを示しています。最初のものは Armadillo コードで CPU 上で実行され、2 つ目は OpenCL 対応 GPU または NVIDIA GPU (CUDA バックエンドを使用) 上で実行できます。
名前空間arma を使用します。
マットX 、Y ;
X.ランドゥ(10、15 );
Y.ランドゥ(10,10 );
マットZ = 2 *ノルム( Y ) * ( X * X.t ( ) - Y ) ;
名前空間coot を使用します。
マットX 、Y ;
X.ランドゥ(10、15 );
Y.ランドゥ(10,10 );
マットZ = 2 *ノルム( Y ) * ( X * X.t ( ) - Y ) ;
小さくする
ensmallen [7]は非線形数値最適化のための高品質C++ライブラリであり、線形代数にArmadilloまたはbandicootを使用し、機械学習アルゴリズムのトレーニング用の最適化を提供するためにmlpackによって使用されます。mlpackと同様に、ensmallenはヘッダーのみのライブラリであり、コールバック関数を使用してカスタム動作をサポートし、ユーザーが任意の最適化の機能を拡張できるようにします。さらに、ensmallenはBSDライセンスの下で公開されています。
ensmallen には、関数の種類 (微分可能、部分微分可能、カテゴリ、制約など) に基づいて分類されたさまざまなオプティマイザーが含まれています。以下に、ensmallen で使用できるオプティマイザーの一部を示します。完全なリストについては、このドキュメント Web サイトを確認してください。
- 限定メモリ Broyden–Fletcher–Goldfarb–Shanno (L-BFGS)
- 勾配降下法
- フランクウルフ
- 共分散行列適応進化戦略 ( CMA-ES )
- アダビリーフ
- アダバウンド
- アダデルタ
- アダグラッド
- アダスクエア
- アダム
- アダマックス
- AMSバウンド
- AMSGrad
- ビッグバッチSGD
- イブ
- FTML
- 翻訳
- カチューシャ
- 先読み
- モメンタムSGD
- ナダム
- ナダマックス
- ネステロフモメンタムSGD
- 楽観的なアダム
- QHAdam
- 品質保証
- RMSProp
- サラ/サラ+
- 確率的勾配降下法 SGD
- 再開を伴う確率的勾配降下法 (SGDR)
- スナップショット SGDR
- スモームス3
- スパレラ
- スワット
- SVRG
- WNGrad
サポート
mlpack は NumFOCUS によって財政的に後援およびサポートされています。プロジェクトの開発者を支援するために、税控除の対象となる寄付を検討してください。さらに、mlpack チームは毎年Google Summer of Codeプログラムに参加し、数人の学生を指導しています。
参照
参考文献
- ^ 「リリース予定の回帰パッケージの初期チェックイン · mlpack/mlpack」。2008年2月8日。 2020年5月24日閲覧。
- ^ 「リリース 4.5.0」。2024年9月18日。 2024年9月22日閲覧。
- ^ Ryan Curtin; et al. (2021). 「柔軟な数値最適化のためのensmallenライブラリ」. Journal of Machine Learning Research . 22 (166): 1–6. arXiv : 2108.12981 . Bibcode :2021arXiv210812981C.
- ^ Ryan Curtin; et al. (2023). 「mlpack 4: 高速なヘッダーのみの C++ 機械学習ライブラリ」. Journal of Open Source Software . 8 (82): 5026. arXiv : 2302.00820 .
- ^ “Mlpack/Mlpack.jl”. 2021年6月10日.
- ^ 「GPU 高速化線形代数用 C++ ライブラリ」。coot.sourceforge.io 。2024年 8 月 12 日閲覧。
- ^ “ホーム”. ensmallen.org . 2024年8月12日閲覧。
外部リンク
- 公式サイト
- GitHubの mlpack
