機械学習開発者が知っておくべき 5 つのディープラーニング フレームワーク

機械学習開発者が知っておくべき 5 つのディープラーニング フレームワーク

ディープラーニングには大量の計算が必要です。通常、多数のノードを持つニューラル ネットワークで構成され、各ノードには学習プロセス中に常に更新する必要がある多数の接続があります。言い換えれば、ニューラル ネットワークの各層には、同じ計算を実行する数百または数千の同一の人工ニューロンがあります。したがって、ニューラル ネットワークの構造は、同じ命令を並列に計算するように特別に設計された GPU (グラフィックス プロセッシング ユニット) によって効率的に実行できるタイプの計算に適しています。

ここ数年のディープラーニングと人工知能の急速な発展に伴い、多くのディープラーニング フレームワークが導入されてきました。ディープラーニング フレームワークは、ディープラーニング システムを GPU 上で効率的に実行することを目的として作成されました。これらのディープラーニング フレームワークはすべて、計算を実行する順序を定義する計算グラフの概念に依存しています。これらのフレームワークでは、計算グラフを構築できる言語を使用しますが、言語の実行メカニズムはホスト言語自体の実行メカニズムとは異なります。計算グラフは最適化され、ターゲット GPU 上で並列に実行できます。

この記事では、ディープラーニングの発展を牽引してきた5つの主要なフレームワークを紹介したいと思います。これらのフレームワークにより、データ サイエンティストやエンジニアは、複雑な問題に対するディープラーニング ソリューションを構築し、より高度なタスクを実行できるようになります。これらは、さまざまなテクノロジー大手によってサポートされ、互いのイノベーションを加速させる数多くのオープンソース フレームワークのうちのほんの一部です。

1. TensorFlow(Google)

TensorFlow はもともと、Google Brain チームの研究者とエンジニアによって開発されました。ディープニューラルネットワークと機械知能の研究を目的としています。 2015 年末より、TensorFlow のライブラリは GitHub で正式にオープンソース化されています。 TensorFlow は、グラフベースの計算をすばやく実行するのに役立ちます。柔軟な TensorFlow API は、GPU 対応アーキテクチャを通じて複数のデバイスにモデルを展開できます。

つまり、TensorFlow エコシステムには 3 つの主要コンポーネントがあります。

  • C++ で記述された TensorFlow API には、モデルを定義し、データを使用してモデルをトレーニングするための API が含まれています。 ユーザーフレンドリーな Python インターフェースも備えています。
  • TensorBoard は、TensorFlow 計算グラフの分析、視覚化、デバッグに役立つ視覚化ツールキットです。
  • TensorFlow Serving は、事前トレーニング済みの機械学習モデルを本番環境にデプロイするための柔軟で高性能なサービス システムです。 Serving も C++ で記述されており、Python インターフェースを介してアクセスでき、古いモードから新しいモードに即座に切り替えることができます。

TensorFlow は、学術研究や産業アプリケーションで広く使用されています。現在注目すべき用途としては、Deep Speech、RankBrain、SmartReply、On-Device Computer Vision などがあります。 GitHub プロジェクトで TensorFlow の公式のベスト使用例をいくつか確認し、モデル、例、チュートリアルを調べることができます。

実行例を見てみましょう。 ここでは、TensorFlow 上のランダム データに対して L2 損失のある 2 層 ReLU ネットワークをトレーニングします。

このコードには、計算グラフの定義とグラフの複数回の実行という 2 つの主要コンポーネントがあります。計算グラフを定義するときに、入力 x、重み w1 と w2、およびターゲット y のプレースホルダーを作成します。次に、フォワードパスで、ターゲット y の予測値と損失値を計算します (損失値は、y の実際の値と予測値の間の L2 距離です)。最後に、Tensorflow に w1 と w2 に関する勾配損失を計算させます。

グラフを構築した後、グラフを実行するためのセッションを作成します。ここでは、グラフの構築時に作成されたプレースホルダーで埋められる numpy 配列を作成し、x、y、w1、w2 の値を指定します。ネットワークをトレーニングするには、計算グラフを繰り返し実行し、勾配を使用して重みを更新し、損失、grad_w1、grad_w2 の numpy 配列を取得します。

Keras: 高レベルラッパー

ディープラーニング フレームワークは、2 つの抽象化レベルで動作します。低レベル (数学演算とニューラル ネットワーク プリミティブの実装 (TensorFlow、Theano、PyTorch など)) と高レベル (低レベル プリミティブを使用したモデルやレイヤーなどのニューラル ネットワーク抽象化の実装 (Keras)) です。

Keras は、バックエンド ライブラリ (TensorFlow または Theano のいずれか) をラップするラッパーです。つまり、バックエンドとして TensorFlow を使用した Keras を使用している場合、実際には TensorFlow コードを実行していることになります。 Keras はニューラル ネットワーク技術のユーザーを対象としており、データ サイエンスを実践するユーザーに適しているため、細かい部分の多くを処理します。簡単かつ迅速なプロトタイピングを可能にし、複数のニューラル ネットワーク アーキテクチャをサポートし、CPU/GPU 上でシームレスに実行されます。

この例では、前の例と同様にニューラル ネットワークをトレーニングします。まず、モデル オブジェクトを一連のレイヤーとして定義し、次にオプティマイザー オブジェクトを定義します。次に、モデルを構築し、損失関数を指定して、単一の「フィット」曲線でモデルをトレーニングします。

2. テアノ(モントリオール大学)

Theano は、CPU または GPU のいずれかで実行できる高速数値計算用の別の Python ライブラリです。これは、モントリオール大学のモントリオール学習アルゴリズム グループによって開発されたオープン ソース プロジェクトです。最も優れた機能としては、GPU の透過的な使用、NumPy との緊密な統合、効率的な記号微分化、速度/安定性の最適化、広範なユニット テストなどがあります。

残念なことに、Youshua Bengio (MILA ラボの責任者) は、2017 年 11 月に、Theano の保守や開発を今後は積極的に行わないことを発表しました。その理由は、Theano が長年にわたって導入してきたイノベーションのほとんどが、現在では他のフレームワークに採用され、完成されているからです。ご興味があれば、オープンソース ライブラリに貢献することもできます。

Theano は多くの点で TensorFlow に似ています。それでは、同じバッチと入力/出力サイズを使用してニューラル ネットワークをトレーニングする別のコード例を見てみましょう。

まず、Theano シンボリック変数 (TensorFlow プレースホルダーに似ています) を定義しました。フォワードパスでは予測と損失を計算し、バックワードパスでは勾配を計算します。次に、データと重みに基づいて損失、スコア、勾配を計算する関数をコンパイルします。最後に、この関数を複数回実行してネットワークをトレーニングします。

3. PyTorch (Facebook)

Pytorch は学術研究者の間で非常に人気があり、比較的新しいディープラーニング フレームワークです。 Facebook AI Research グループは、前身の Torch で発生した問題の一部に対処するために pyTorch を開発しました。プログラミング言語 Lua の人気が低いため、Torch は Google TensorFlow のような急速な発展を経験することは決してないでしょう。そのため、PyTorch は、多くの研究者、開発者、データ サイエンティストにすでに馴染みのあるオリジナルの Python 命令型プログラミング スタイルを採用しています。また、動的な計算グラフもサポートしており、時系列データや自然言語処理データを扱う研究者やエンジニアにとって魅力的な機能です。

これまでのところ、PyTorch を最もうまく活用しているのは Uber です。同社は、PyTorch をバックエンドとして使用する汎用確率プログラミング言語である Pyro を構築しました。 PyTorch の動的微分化と勾配構築機能は、確率モデルにおける確率的操作に非常に役立ちます。

PyTorch には 3 つの抽象化レベルがあります。

  • Tensor: 命令型のndarrayですが、GPU上で実行されます
  • 変数: 計算グラフ内のノード。データと勾配を格納する。
  • モジュール: ニューラルネットワーク層。状態または学習可能な重みを保存できます。

ここでは、テンソルの抽象化レベルに焦点を当てます。 PyTorch テンソルは numpy 配列に似ていますが、GPU 上で実行できます。計算グラフや勾配、ディープラーニングといった概念は組み込まれていません。ここでは、PyTorch Tensors を使用して 2 層ネットワークを適合します。

ご覧のとおり、最初にデータと重みのランダム テンソルを作成します。次に、順方向伝播中に予測と損失を計算し、逆方向伝播中に勾配を手動で計算しました。また、重みごとに勾配降下法のステップ サイズも設定しました。最後に、関数を複数回実行してネットワークをトレーニングします。

4. トーチ(NYU / Facebook)

次に、Torchについてお話しましょう。これは、Facebook のオープンソースの機械学習ライブラリ、科学計算フレームワーク、および Lua プログラミング言語に基づくスクリプト言語です。幅広いディープラーニングアルゴリズムを提供しており、Facebook、IBM、Yandex などの企業でデータストリーミングによるハードウェアの問題を解決するために使用されています。

PyTorch の直接の祖先である Torch は、PyTorchg と多くの C バックエンドを共有しています。 3 つの抽象化レベルを持つ PyTorch とは異なり、Torch にはテンソルとモジュールの 2 つの抽象化レベルしかありません。 Torch テンソルを使用して 2 層ニューラル ネットワークをトレーニングするコード チュートリアルを試してみましょう。

最初に、多層ニューラル ネットワーク モデルと損失関数を構築しました。次に、重みを受け取り、重みの損失/勾配を生成するバックトレース関数を定義します。関数内では、フォワードパスでの予測と損失、およびバックワードパスでの勾配を計算します。最後に、このバックトラッキング関数をオプティマイザーに繰り返し渡して最適化します。

5. カフェ(カリフォルニア大学バークレー校)

Caffe は、表現力、スピード、思考のモジュール性を兼ね備えたディープラーニング フレームワークです。バークレー人工知能研究グループとバークレービジョンアンドラーニングセンターによって開発されました。カーネルは C++ で書かれていますが、Caffe には Python と Matlab のインターフェースがあります。これは、フィードフォワード分類モデルのトレーニングや微調整に役立ちます。研究ではあまり使用されていませんが、コミュニティの貢献者によって証明されているように、モデルの展開には依然として人気があります。

Caffe を使用してニューラル ネットワークをトレーニングおよび微調整するには、次の 4 つの手順を実行する必要があります。

  1. データの変換: データ ファイルを読み取り、クリーンアップして、Caffe が使用できる形式で保存します。データの前処理と保存を行う Python スクリプトを作成します。
  2. モデルを定義する: モデルはニューラル ネットワークの構造を定義します。 CNN アーキテクチャを選択し、.prototxt 拡張子を持つ構成ファイルでそのパラメータを定義します。
  3. ソルバーを定義する: ソルバーはモデルの最適化を担当し、勾配降下法の実行方法に関するすべての情報を定義します。ソルバー パラメータは、.prototxt 拡張子を持つ構成ファイルで定義します。
  4. モデルのトレーニング: モデルとソルバーの準備ができたら、ターミナルから caffe バイナリを呼び出してモデルをトレーニングします。モデルをトレーニングすると、拡張子が .caffemodel のファイルにトレーニング済みのモデルが保存されます。

Caffe のコードは紹介しませんが、Caffe のホームページでチュートリアルを確認できます。一般的に、Caffe はフィードフォワード ネットワークや既存のネットワークの微調整に非常に役立ちます。コードを書かなくても簡単にモデルをトレーニングできます。 Python コードを使用せずにモデルをデプロイできるため、Python インターフェースは非常に便利です。欠点は、新しい GPU レイヤーごとに C++ カーネル コードを記述する必要があることです (Caffe 下)。そのため、大規模なネットワーク(AlexNet、VGG、GoogLeNet、ResNetなど)の構築は非常に困難になります。

どのディープラーニングフレームワークを使用すべきでしょうか?

Theano は開発されなくなり、Torch は多くの人が馴染みのない言語である Lua で書かれ、Caffe はまだ成熟の初期段階にあるため、TensorFlow と PyTorch がほとんどのディープラーニング実践者に好まれるフレームワークになっています。どちらのフレームワークも Python を使用していますが、いくつかの違いがあります。

  • PyTorch はインターフェースがよりすっきりしており、特に初心者にとって使いやすいです。コードのほとんどは、ライブラリと格闘するのではなく、直感的に記述されています。対照的に、TensorFlow には、小さくて目立たないライブラリのより複雑なコレクションがあります。
  • ただし、TensorFlow にはさらに多くのサポートと、非常に大規模で活気のある役立つコミュニティがあります。つまり、TensorFlow には PyTorch よりも多くのオンライン コース、コード チュートリアル、ドキュメント、ブログ投稿があるということです。
  • とはいえ、新しいプラットフォームである PyTorch には、まだ完成していない興味深い機能が数多くあります。しかし、わずか 1 年余りで PyTorch がこれほどの成果を達成したことは驚くべきことです。
  • TensorFlow はよりスケーラブルで、分散実行との互換性が非常に優れています。 GPU のみのシステムから、リアルタイムの試行錯誤に基づく高度な分散強化学習を伴う非常に大規模なシステムまで、あらゆるものをサポートします。

最も重要なのは、TensorFlow は定義と実行であり、グラフ構造内で条件と反復を定義して実行するということです。一方、PyTorch は「実行時に定義」され、グラフ構造は順方向計算中にその場で定義されます。つまり、TensorFlow は静的計算グラフを使用し、PyTorch は動的計算グラフを使用します。動的グラフベースのアプローチは、動的ニューラル ネットワークなどの複雑なアーキテクチャに対して、より使いやすいデバッグ機能とより優れた処理能力を提供します。静的グラフベースのアプローチは、モバイル デバイスに簡単に展開でき、より多様なアーキテクチャに簡単に展開でき、事前にコンパイルすることもできます。

したがって、PyTorch は趣味や小規模プロジェクトの高速プロトタイピングに適していますが、TensorFlow は、特にクロスプラットフォームや組み込みの展開を考慮すると、大規模な展開に適しています。 TensorFlow は長年の試練に耐え、今でも広く使用されています。より大規模なプロジェクト向けに、より多くの機能と優れたスケーラビリティを備えています。 PyTorch は学習しやすくなってきていますが、TensorFlow のようなオールインワンの統合はありません。これは、迅速に実行する必要がある小規模プロジェクトには最適ですが、本番環境への展開には最適ではありません。

[[228102]]

画像クレジット: Jamie StreetonUnsplash

最後に

上記のリストは、より有名なフレームワークのほんの一部であり、そのほとんどは Python をサポートしています。ここ数年で、DeepLearning4j (Java)、Apache の MXNet (R、Python、Julia)、Microsoft CNTK (C++、Python)、Intel の Neon (Python) など、複数の新しいディープラーニング フレームワークがリリースされました。それぞれのフレームワークは、異なる人々によって異なる目的で開発されているため、異なります。概要を把握しておくと、次のディープラーニングの課題を解決するのに役立ちます。使いやすさ(アーキテクチャと処理速度の観点から)、GPU サポート、チュートリアルとトレーニング資料の可用性、ニューラル ネットワーク モデリング機能、サポートされている言語はすべて、最適なオプションを選択する際に重要な考慮事項となります。

<<:  ビッグデータマイニング機械学習人工知能ベン図戦争

>>:  産業用 IoT が人工知能の時代へ

ブログ    
ブログ    
ブログ    

推薦する

バイリアン・スマートが2021 NIDIアジェンダ中国新小売・デジタルイノベーションサミットに出席

6月22日、2021NIDIアジェンダ中国新小売・デジタルイノベーションサミットが上海で盛大に開催さ...

ついに誰かが教師あり学習を明確にした

01 教師あり学習とは何か教師あり学習を行うには、コンピューターが学習できるラベルが付いたサンプル...

ディープラーニングコンパイラについて知っておくべきこと

[[409589]]ディープラーニングはここ 10 年ほどで急速に発展し、業界では多くのディープラー...

人工知能の知られざる歴史: 目に見えない女性プログラマーたち

この 6 部構成のシリーズでは、AI の人類史を探り、革新者、思想家、労働者、さらには小規模なトレー...

待望のAIは人工知能か、それとも人工的な愚かさか?

[[399557]]人工知能という言葉が初めて世間の注目を集めたのは、1956 年にダートマス大学...

人工知能の時代に著作権はどのように機能するのでしょうか?

今日、私たちはあらゆるツールを利用でき、AI を使って望むものを何でも作成する自由と力を持っています...

60年ぶり! AI が新しい抗生物質の最初のバッチを発見し、MIT の主要な研究が Nature に掲載されました。人類はスーパーバグとの戦いに希望を持っている

60年間、人類は抗生物質の研究において大きな進歩を遂げていません。しかし、このギャップはAIによって...

インダストリー4.0: ロボットがやってくる

Robotics as a Service は、産業用 IoT (IIOT) 内でますます注目を集め...

必要なのはこれら3つの機械学習ツールだけです

多くの機械学習技術は、急速に概念実証から人々が日常的に頼りにする重要なテクノロジーの基盤へと移行して...

スマートロボットについて知っておくべきことすべて

スマートロボットは、タスクをより効率的かつ正確に実行し、生産性を向上させ、人的エラーを削減するように...

Apple Store 店員から機械学習エンジニアへ: AI を学び始めた経緯

機械学習エンジニアの職は、AI 博士号取得者だけのものではありません。インターネット上の公開コースや...

...

...

人工知能は科学研究に革命を起こす力を持っている

人工知能 (AI) は、コンピューター サイエンス、数学、心理学、言語学などの分野が関わる学際的な分...