ディープラーニングのエコシステム
ディープラーニングとPythonのエコシステムの発展は目覚ましいです。
Pythonのディープラーニングライブラリの2大巨頭となった
- TensorFlow
- PyTorch
は、それぞれPythonでの利用を主に想定して、多様なツールが日々開発されています。
Pythonには、
- シンプルな構文
- 2021年時点で整備されている豊富なフレームワーク、ライブラリ
といった強力な強みがあり、ディープラーニングに用いられるプログラミング言語の筆頭です。
一方で、広く使われるようになったからこそ改善点も見つかってきており、
- 最適な実行速度を実現したい
- ソフトウェア開発と合わせたDevOps、MLOpsの点から多様なプログラミング言語でディープラーニングを試したい
などのニーズから、他のプログラミング言語でディープラーニングに取り組むケースも見られます。
今日は、
- Java
- Julia
- Swift
の3つのプログラミング言語から見たディープラーニング環境を紹介します。
JavaやJVM言語
Javaは、汎用プログラミング言語として長年広く使われてきました。
Java仮想マシンで動作するJVM言語と合わせてソフトウェア開発をはじめとしてJava広く用いられています。
JavaやJVM言語のディープラーニング環境としては、DeepLearning4Jが広く知られています。
Javaには、DeepLearning4J以外の環境も複数あります。
Deep Java Library
Deep Java Library(DJL)は、2019年に公開されたJavaのディープラーニング用ライブラリです。
ディープラーニングで豊富なエコシステムを持つPythonに比べて、Javaのディープラーニングエコシステムは十分ではない。
多くのJavaユーザーがディープラーニング環境にアクセスできるようにしたい、ということがDJL開発のミッションだとされています。
サイトには、学習のためのリソースが豊富に用意されています。
チュートリアルでは、ニューラルネットワーク構築の解説を読みつつ、最初の機械学習モデルを試すことができます。
サンプルから、
- 画像分類
- 物体検知
- 姿勢推定
- 言語モデル
などの例を確認することができます。
その他のJavaとJVM言語向けのディープラーニングライブラリ
- DeepLearning4J(DL4J)
- Deep Java Library(DJL)
がJava向けのディープラーニングライブラリとして知られていますが、それ以外にもあります。
Dagli
Dagliは、LinkedInが2020年に公開したJava向けの機械学習ライブラリです。
Dagliを使用することで、JavaやJVM言語でニューラルネットワークを用いた機械学習に取り組むことができます。
Apache MXNet
MXNetはディープラーニングのフレームワークであり、
プログラミング言語Python、Scala、Julia、Clojure、Java、C++、R、Perlをサポートしています。
そのため、JavaやScalaといったJVM言語でMXNetを用いて、ディープラーニングに取り組むことができます。
Julia
Juliaは、2012年にはじめて公開された比較的新しいプログラミング言語です。
2021年1月時点まででは、計算科学や数値解析の場面で比較的使用されている印象です。
Juliaで使用できるディープラーニング環境は、先に紹介したApache MXNet、Flux以外にもあります。
ここでは、Genを紹介します。
Genは、Juliaで構築された汎用の確率的プログラミングシステムです。
確率的プログラミング(Probabilistic programming; PP)というのは、プログラミングのパラダイムの1つで、確率モデルを取り扱うのに適したプログラミング手法であるとされています。
確率的プログラミングを用いることで、
- 統計的モデルの取り扱い
- 機械学習やディープラーニングの研究開発
がより円滑になると期待されています。
Genは、ディープラーニングにとどまらないAI開発のためのツールとされていますが、
確率モデルをGenで書くチュートリアルに加え、
- GenTFというTensorFlowプラグイン
- GenPyTorchというPyTorchプラグイン
があります。
確率的プログラミングでのディープラーニングや機械学習への取り組みは、TensorFlowやPyTorchといったライブラリの利用に比べるとまだそれほど普及していない印象ですが、
などが注目されていることもあり、徐々に利用が広がっていると言えるかもしれません。
Swift
Swiftは、2014年に発表されたプログラミング言語です。
Swiftと言えば、アップルのOS上で動くアプリケーション開発に用いられるというイメージを持っている人は多いと思います。
最近、Swift周りでのディープラーニング、機械学習環境が徐々に整備されてきています。
ここでは、
を紹介します。
Swift for TensorFlowと微分可能プログラミング
Swift for TensorFlow(S4TF)は、2018年に発表されました。発表されてからまだそれほど時間は経っていませんが、少しずつ注目を集めている印象です。
その理由は色々と考えられますが、ここでは微分可能プログラミングとの関係を見たいと思います。
先ほど、確率的プログラミングとディープラーニング、機械学習について紹介しました。
微分可能プログラミングというプログラミングパラダイムも、ディープラーニングと関係があります。
微分可能プログラミング(Differentiable Programming)は、簡単に言えば、自動微分といった技術によりプログラムを微分していくことができる手法です。
ディープラーニングに取り組む際には、多くの場合、微分計算が必要です。
そのため、微分機構を取り扱いやすくするプログラミングパラダイムである、微分可能プログラミングが、ディープラーニングの領域で期待されています。
Swift for TensorFlowでは、微分可能プログラミングを用いてディープラーニングに取り組むことができます。
Swift for TensorFlowには様々な機能がありますが、微分可能プログラミングを主要な強みとして打ち出しています。
公式サイトから、
などのリソースを参照できます。
Core MLとソフトウェア開発
Core MLは、機械学習のフレームワークです。
Core MLを使うことで、アプリ開発にディープラーニングを組み込みやすくなります。
Core MLには、
- ディープラーニングのモデルを作成する(Create ML)
- 作成済みモデルをCore ML用に変換する(Core MLコンバータ)
- Core ML用に変換された様々なモデルを使用する
などの機能があります。
モデルの作成については、
- 画像モデル
- テキストモデル
- 音声モデル
などいくつかのケースでの作成方法を確認できます。
Core ML用に変換済みの使用可能モデルには、
- 画像識別
- 物体検知
- 姿勢推定
- 言語モデル
など多様なものがあります。
ディープラーニングに取り組むときの新しい選択肢
複数のプログラミング言語でのディープラーニングへの取り組みは、
- いろいろな研究結果
- 目新しい開発
など研究開発におけるブレイクスルーをもたらす可能性があると思います。
今日紹介した
- Deep Java Library(DJL)
- JuliaのGen
- Swift for TensorFlow(S4TF)
などは、公開されてからまだそれほど時間が経過していません。
今後のディープラーニングの環境で、
Python × TensorFlow、PyTorch
とともに、ディープラーニングのエコシステムとして発展していく可能性はあります。
DJL、GenやS4TFに興味が出た場合は、一度試してみるのもいいのではないでしょうか。
コメント