| mlパック | |
|---|---|
| 初回リリース | 2008年2月1日[ 1 ] |
| 安定版リリース | 4.6.2 [ 2 ] / 2025年5月22日 |
| リポジトリ | |
| 書かれた | 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のデプロイ可能なバイナリサイズの比較を示します。一貫性を保つため、この比較では、同一のアプリケーションとそのすべての依存関係を単一のDockerコンテナ内にパッケージ化しました。
| MNIST数字認識装置 (CNN) | 言語検出 (ソフトマックス回帰) | 森林被覆タイプ分類器 (決定木) | |
|---|---|---|---|
| サイキットラーン | 該当なし | 327MB | 348MB |
| ピトーチ | 1.04GB | 1.03GB | 該当なし |
| mlパック | 1.23MB | 1.03MB | 1.62MB |
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++線形代数ライブラリで、Armadilloと同一のAPIを持ち、グラフィックス処理装置(GPU)上で計算を実行することを目的としています。このライブラリの目的は、ソースコードに小さな変更(名前空間やリンクライブラリの変更など)を加えることで、CPUとGPU間の移行を容易にすることです。mlpackは現在、GPU上でニューラルネットワークのトレーニングを提供することを目的として、部分的にBandicootをサポートしています。次の例は、同一の操作を実行する2つのコードブロックを示しています。1つ目は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は機械学習アルゴリズムの学習用最適化ツールとしてensmallenを使用しています。mlpackと同様に、ensmallenはヘッダーのみのライブラリであり、コールバック関数を用いたカスタム動作をサポートしているため、ユーザーは任意の最適化ツールの機能を拡張できます。また、ensmallenはBSDライセンスの下で公開されています。
ensmallenには、関数の種類(微分可能、偏微分可能、カテゴリカル、制約付きなど)に基づいて分類された多様な最適化ツールが含まれています。以下に、ensmallenで利用可能な最適化ツールの一部を紹介します。完全なリストについては、こちらのドキュメントウェブサイトをご覧ください。
- メモリ制限ブロイデン・フレッチャー・ゴールドファーブ・シャノ (L-BFGS)
- 勾配降下法
- フランクウルフ
- 共分散行列適応進化戦略 ( CMA-ES)
- アダビリーフ
- エイダバウンド
- アダデルタ
- アダグラッド
- アダスクエア
- アダム
- アダマックス
- AMSバウンド
- AMSGrad
- ビッグバッチSGD
- イブ
- FTML
- IQN
- カチューシャ
- 先読み
- モメンタムSGD
- ナダム
- ナダマックス
- ネステロフモメンタムSGD
- 楽観的なアダム
- QHAdam
- QHSGD
- RMSProp
- サラ/サラ+
- 確率的勾配降下法(SGD)
- 再開を伴う確率的勾配降下法(SGDR)
- スナップショットSGDR
- スモームズ3
- スパレラ
- スワット
- SVRG
- WNGrad
サポート
[編集]mlpackはNumFOCUSの財政支援を受けています。プロジェクトの開発者を支援するために、税控除の対象となる寄付をご検討ください。また、mlpackチームは毎年Google Summer of Codeプログラムに参加し、複数の学生を指導しています。
参照
[編集]参考文献
[編集]- ^ 「リリース予定の回帰パッケージの初期チェックイン · mlpack/mlpack」 . GitHub . 2008年2月8日. 2020年5月24日閲覧。
- ^ 「リリース 4.6.2」 . 2025年5月22日. 2025年5月27日閲覧。
- ^ 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 . Bibcode : 2023JOSS....8.5026C . doi : 10.21105/joss.05026 .
- ^ “Mlpack/Mlpack.jl” . GitHub . 2021年6月10日.
- ^ 「GPU加速線形代数用C++ライブラリ」 . coot.sourceforge.io . 2024年8月12日閲覧。
- ^ "ホーム" . ensmallen.org . 2024年8月12日閲覧。