TensorFlow

用語集のトップページへ
Google は、2015年11月に機械学習のためのフレームワークをオープンソースで公開し、TensorFlow と名付けました。CPU、GPU、GPU クラスタでの深層学習、ニューラルネットワーク、一般的な数値計算をサポートしています。TensorFlow の最大の利点はそのコミュニティにあり、多くの開発者、データサイエンティスト、データエンジニアがオープンソースの開発に貢献しています。TensorFlow の現在のバージョンは、リリースノートとともに GitHub で確認できます。TensorFlow は、現在使用されている AI エンジンの中でも人気のあるライブラリの 1 つです。
 最も普及している人工知能(AI)エンジン

TensorFlow とは

TensorFlow は、数値計算、大規模な機械学習、深層学習、その他の統計および予測分析のワークロードに利用されるオープンソースライブラリです。このような技術は、開発者が機械学習モデルをより迅速かつ容易に実装することを可能にします。データの取得、規模に応じた予測の提供、将来の学習結果の洗練といったプロセスを支援するためです。

では、TensorFlow は具体的にどのようなことをするのでしょうか。手書きの数字の分類、画像認識、単語の埋め込み、自然言語処理(NLP)などのための深層ニューラルネットワークのモデルを学習し、実行できます。TensorFlow ライブラリに含まれるコードを任意のアプリケーションで使用することで、これらのタスクを学習させることができます。

TensorFlow のアプリケーションは、従来の CPU(中央演算処理装置)でも GPU(深層学習により適したグラフィックス処理装置)でも実行可能です。TensorFlow は Google が開発したものなので、機械学習のジョブを高速化するために Google が独自に設計した TPU(テンソル処理装置)上でも動作します。

また、TensorFlow は何の言語で書かれているのだろう?と疑問に思うかもしれません。TensorFlow は、フレームワークを用いてアプリケーションを構築するためのフロントエンド API として Python を採用していますが、実際には C++ や Java など複数の言語のラッパーが用意されています。すなわち、使用する言語やプラットフォームに関係なく、機械学習モデルの学習とデプロイを迅速に行うことができます。

TensorFlow のモデル開発に関する FAQ はこちらをご覧ください。

TensorFlow の歴史

Google は、2015 年に TensorFlow を Apache 2.0 ライセンスで初めて公開しました。前身は DistBelief という Google のクローズドソースのフレームワークで、深層学習の実装のテストベッドとして提供されていました。

Google の最初の TPU は 2016 年に詳細が公開され、TensorFlow と組み合わせて社内で使用され、同社のアプリケーションやオンラインサービスの一部を動かしています。これには、Google の検索アルゴリズム「RankBrain」や、地図技術「Street View」が含まれます。

2017 年初頭、Google は、TensorFlow バージョン 1.0.0 をリリースしました。その 1 年後には、第 2 世代の TPU を Google Cloud Platform のユーザーに提供し、独自の機械学習モデルのトレーニングや実行に利用できるようにしました。

Google は、2019年10月に最新版である TensorFlow 2.0 をリリースしました。ユーザーからのフィードバックをもとに、フレームワークにさまざまな改良を加え、より使いやすくしました。例えば、モデルの学習には、比較的シンプルな Keras API を使用するようになりました。

TensorFlow のクリエーター

周知のとおり、Google は TensorFlow を開発し、現在もそのフレームワークを所有し、保守を続けています。TensorFlow は、機械知能の主要分野を発展させ、深層学習の理論的理解を促進するための基礎研究を行う Google Brain の研究者チームによって作られたものです。

Google Brain チームは、TensorFlow を Google 自身のコンピューティングインフラに依存せず動作するように設計しましたが、大企業の支援を受けることで多くのメリットを得ています。Google は、このプロジェクトの迅速な開発に資金を提供するだけでなく、長年にわたって TensorFlow を改良し、導入や利用が容易になるように努めてきました。

Google が TensorFlow をオープンソースのフレームワークにしたのは、AI の開発を加速させることが目的です。コミュニティに根ざしたプロジェクトにすることで、全てのユーザーが技術の向上に貢献し、利益を共有できます。

TensorFlow の仕組み

TensorFlow は、さまざまな機械学習や深層学習(またはニューラルネットワーク)のモデルやアルゴリズムを組み合わせ、共通のインターフェースによって便利に使用できるようにします。

開発者は、数学的操作を表す計算ノードによってデータフローのグラフを作成できます。ノード間の接続はそれぞれ多次元のベクトルや行列を表し、テンソルと呼ばれるものを作成します。

Python は TensorFlow のフロントエンド API を提供しますが、実際の数学演算は Python では行われず、高性能な C++ バイナリが裏側で演算を実行しています。Python は、これらの演算間のトラフィックを指示し、高水準のプログラミング抽象化によってそれらをまとめてフックします。

TensorFlow アプリケーションは、iOS や Android デバイス、ローカルマシン、クラウド上のクラスタなど、CPU や GPU(Google Cloud を使用している場合は Google のカスタム TPU)と同様に、都合に合わせてほぼ全てのターゲット上で実行可能です。

TensorFlow には、高レベルと低レベルの 2 種類の API のセットが含まれています。Google は、データパイプラインの開発やアプリケーションのプログラミングの簡略化に高レベルの API を推奨していますが、アプリケーションのデバッグや実験には低レベルの API(TensorFlow Core と呼ばれます)が便利です。

TensorFlow の用途

TensorFlow は、データサイエンティスト、統計学者、予測モデルの開発者などのユーザーが、高度な分析アプリケーションを開発・実行するプロセスを効率化するために設計されています。

さまざまな業種や規模の企業が、プロセスの自動化や新しいシステムの開発に広く利用しており、特にニューラルネットワークのような非常に大規模な並列処理アプリケーションに有効なフレームワークです。また、自動運転車の実験や試験にも使用されています。

当然のことながら、TensorFlow の生みの親である Google も、検索エンジンの情報検索能力の向上や、メールの自動返信生成、画像分類、光学文字認識などのアプリケーションに活用しています。

TensorFlow の利点の 1 つは、抽象化の仕組みを提供することで、開発者はアプリケーションの全体的なロジックに集中でき、細かい部分はフレームワークがその役割を担います。また、TensorFlow アプリのデバッグやイントロスペクションを必要とする開発者にとっても都合の良いことです。

TensorBoard 可視化スイートは、インタラクティブな Web ベースのダッシュボードを備えており、グラフの実行方法を調査したりプロファイリングしたりすることができます。また、グラフ全体を単一の不透明なオブジェクトとして作成して一度に評価するのではなく、各グラフ操作を個別にかつ透過的に評価・修正できるイーガー実行モードも用意されています。

Databricks Runtime for Machine Learning には TensorFlowTensorBoard が含まれており、これらのライブラリは他のパッケージをインストールせずに利用できます。

では、TensorFlow の使い方を見てみましょう。

TensorFlow のインストール方法

詳しい説明とチュートリアルは、tensorflow.org に記載されています。ここでは、基本的なことをご紹介します。

システム要件:

  • Python 3.7 以上
  • pip 19.0 以降(manylinux2010 対応、TensorFlow 2 は pip の新バージョンが必要)
  • Ubuntu 16.04 以降(64 ビット)
  • macOS 10.12.6(Sierra)以降(64 ビット)(GPU 非対応)
  • Windows 7 以降(64 ビット)

ハードウェア要件:

  • TensorFlow 1.6 からバイナリに AVX 命令が使用されており、古い CPU では動作しない可能性があります。
  • GPU サポートには CUDA® 対応カードが必要です。(Ubuntu、Windows)

1. Python の開発環境をインストール

Python の環境が既に設定されているかどうかを確認します。

python3 - -version

pip3 - -version

これらのパッケージが既にインストールされている場合は、次のステップに進んでください。

インストールされていない場合は、Python、pip パッケージマネージャ、venv をインストールしてください。

仮想環境でない場合は、python3 -m pip を利用してコマンドを実行します。これにより、システムの pip ではなく、Python の pip をアップグレードして使用するようになります。

2. 仮想環境の構築(推奨)

Python の仮想環境は、パッケージのインストールをシステムから切り離すために使用されます。

3. TensorFlow の pip パッケージのインストール

次のいずれかを選択し、PyPI から TensorFlow のパッケージをインストールします。

  • tensorflow:CPU と GPU をサポートした最新の安定版(Ubuntu と Windows)
  • tf-nightly:Preview build (unstable)Ubuntu と Windows 版は、GPU をサポートしています。
  • tensorflow==1.15:TensorFlow 1.x の最終バージョン

最後にインストールが正しく行われているかを確認します。コード内で TensorFlow をインポートし、API がテンソルを返せば、TensorFlow のインストールは成功です。

注:インストール方法によって、TensorFlow Python パッケージの URL が要求される場合があります。指定する値は、利用している Python のバージョンに依存します。

TensorFlow のアップデート方法

TensorFlow のアップグレードは、環境に依存せず、パッケージマネージャ pip を利用することで簡単に行うことができます。

前提条件:

  • Python 3.6 - 3.9 がインストールされ、設定されている。
    ※ 起動前に Python のバージョンを確認してください。
  • TensorFlow 2 がインストールされている。
  • pip パッケージマネージャのバージョンが 19.0 以上である。
    ※ pip のバージョンを確認し、必要であればアップグレードしてください。
  • コマンドライン、ターミナルまたはノートブック環境にアクセスできる。

TensorFlow を新しいバージョンにアップグレードするには、次のことを行います。

1. ターミナルを開きます。

2. 現在インストールされている TensorFlow のバージョンを確認します。

pip3 show tensorflow

このコマンドは、バージョンなどのパッケージに関する情報を表示します。

3. 以下のコマンドで TensorFlow をバージョンアップします。

pip3 install - -upgrade tensorflow==<バージョン>

Python のリリースと互換性のあるバージョンを選択していることを確認してください。ノートブック環境では、次のコマンドを実行し、完了後にカーネルを再起動します。

!pip install - -upgrade tensorflow==<バージョン>

これにより、古いバージョンが依存関係とともに自動的に削除され、新しいバージョンがインストールされます。

4. 次のコマンドを実行して、バージョンを確認します。

pip3 show tensorflow

TensorFlow Lite

2017 年、Google は TensorFlow の新バージョンとして「TensorFlow Lite」を発表しました。TensorFlow Lite は、組み込み機器やモバイル機器での利用に最適化されています。オープンソース、プロダクトレディ、かつクロスプラットフォームの深層学習フレームワークで、事前学習された TensorFlow モデルを特別な形式に変換し、速度やストレージを最適化します。

あらゆるシナリオで適切なバージョンを使用するためには、TensorFlow を使うべきタイミングと TensorFlow Lite を使うべきタイミングを知っておく必要があります。例えば、高性能な深層学習モデルを、ネットワーク環境が整っていない場所に展開する必要がある場合、TensorFlow Lite を使用してファイルサイズを小さくすることになります。

エッジデバイス用のモデルを開発する場合、使用するスペースを最小限に抑え、低帯域幅のネットワークでのダウンロード速度を向上させるために、軽量である必要があります。そのためには、モデルのサイズを小さくしたり、レイテンシを改善するといった最適化が必要ですが、TensorFlow Lite は量子化と重みのプルーニングによってそれを実現します。

TensorFlow Lite で得られたモデルは、Android や iOS のスマートフォン、Raspberry Pi をはじめとするマイコンの Linux ベースの組み込み機器といったエッジデバイスにおいて、低遅延で推論できるように軽量化されています。また、TensorFlow Lite は、エッジでの推論実行に重要なスピード、精度、消費電力の最適化のために、いくつかのハードウェアアクセラレータを使用しています。

TensorFlow の Dense レイヤー

Dense レイヤーは、浅いニューラルネットワークのモデル作成と深いニューラルネットワークのモデル作成の両方に使用されます。人工ニューラルネットワークは、ニューロンのシステムで構成された脳のようなアーキテクチャで、特定のルールでプログラムされるのではなく、大量に与えられたデータによって学習できます。

深層学習では、未加工データの入力からより高度な特徴を抽出するために複数の層を使用します。複数の層で構成されるネットワークをスタック型ニューラルネットワークと呼びます。これらの各層は、データからの入力と、入力を増幅または減衰させる重みと呼ばれる係数のセットを結合するノードで構成されています。

TensorFlow 2.0 のリリースでは、Keras と呼ばれる深層学習 API が採用されています。Keras は、TensorFlow 上で動作し、さまざまなニューラルネットワークのアーキテクチャや目的に応じたプリビルドレイヤーを提供します。Dense レイヤーはプリビルドレイヤーの 1 つで、各ニューロン(ノード)がその前の層の全てのニューロンから入力を受け取るため、深い接続があることを意味します。

Dense レイヤーは通常、生成するベクトルの次元変更、回転、拡大縮小、平行移動に使用されます。前の層の特徴を全て組み合わせて特徴を学習する機能を備えています。

TensorFlow と Python の違い

TensorFlow はオープンソースの機械学習フレームワークであり、Python は人気のプログラミング言語の 1 つで、TensorFlow にも使用されています。TensorFlow の推奨言語は Python ですが、C++ や JavaScript も使用可能です。

Python は、大小さまざまなプロジェクトで、プログラマーの簡潔で論理的なコードを支援することを目的に開発されました。Web サイトやソフトウェアの構築、タスクの自動化、データ分析などによく利用されます。そのため、初心者でも比較的簡単に TensorFlow を習得できます。

TensorFlow がサポートする Python のバージョンは何か、というのは有用な質問です。TensorFlow のリリースによっては、特定のバージョンの Python にしか対応していないものがあり、2.0 では Python 3.7 から 3.10 までが対象です。TensorFlow をインストールする前に、必ず要件を確認してください。

PyTorch と TensorFlow

機械学習のフレームワークは、TensorFlow だけではありません。類似したライブラリとして PyTorch のような、同じニーズの多くをカバーする他の選択肢が数多くあります。では、実際に TensorFlow と PyTorch はどう違うのでしょうか?

PyTorch と TensorFlow は、どちらも Python 深層学習環境のために技術系企業が開発し、人間に近い精度が要求されるコンピュータが実世界の問題を解決するのに役立つフレームワークのうちの 2 つに過ぎません。PyTorch と TensorFlow の決定的な違いは、コードの実行方法です。PyTorch は、Python とより密に統合されています。

これまで見てきたように、TensorFlow は堅牢な可視化機能、プロダクション向けのデプロイメントオプション、モバイルプラットフォームのサポートなどを備えています。PyTorch はそれほど確立されたものはありませんが、そのシンプルさと使いやすさに加え、動的な計算グラフや効率的なメモリ使用で人気を博しています。

TensorFlow と Pytorch のどちらが優れているかという質問については、何を実現したいかによります。AI 関連の製品を作ることが目的なら TensorFlow、研究志向の開発者なら PyTorch が向いていると言われています。PyTorch はプロジェクトを短期間で立ち上げるのに適していますが、TensorFlow はより大規模なプロジェクトや、より複雑なワークフローに対応できる堅牢な機能を備えています。

TensorFlow を活用している企業

TensorFlow の Web サイトによると、TensorFlow は Google だけでなく、他にも多くの有名企業が利用しています。Airbnb、コカ・コーラ、eBay、インテル、クアルコム、SAP、Twitter、Uber、Snapchat 開発会社の Snap Inc.、スポーツコンサルティング会社の STATS LLC などが含まれます。

TensorFlow を活用している企業
 

TensorFlow の代替フレームワーク


1. DataRobot

DataRobot は、クラウドベースの機械学習フレームワークです。機械学習モデルを導入し、高度な AI アプリケーションを作成することで、企業がデータサイエンス能力を拡張できるように設計されています。

このフレームワークでは、R、Python、Spark、H2O、VW、XGBoost などのオープンソースのモデリング技術を利用し、モデルを最適化することが可能です。DataRobot は、予測分析を自動化することで、データサイエンティストやアナリストがより正確な予測モデルを作成できるよう支援します。

各モデルを構築するための最適な機能、アルゴリズム、パラメータを提供するライブラリは増え続けています。さらに、自動アンサンブルにより、ユーザーは特徴抽出とデータ準備のために複数のアルゴリズムと事前構築されたプロトタイプを簡単に検索して組み合わせることができます。トライ&エラーの推測は必要ありません。

2. PyTorch

Facebook のチームが開発し、2017 年に GitHub.com でオープンソース化された PyTorch は、新しい深層学習フレームワークの 1 つです。先に述べたように、ハードウェアアクセラレーションによるコンポーネントや、design-as-you-go のためのインタラクティブな開発モデルなど、TensorFlow との類似点がいくつかあります。

また、PyTorch は Python の非同期実行のネイティブサポートを利用することで、パフォーマンスを最適化しています。ビルトインのダイナミックグラフを有していることや、TensorFlow よりも強力なコミュニティがあることが利点です。

しかし、PyTorch は学習したモデルを直接オンラインでデプロイするフレームワークを提供しておらず、本番環境では API サーバーが必要です。また、可視化のためにはサードパーティである Visdom が必要で、その機能はかなり限定されています。

3. Keras

Keras は、ユーザーフレンドリーでモジュール化され、簡単に拡張できるように設計された高水準のオープンソースのニューラルネットワークライブラリです。Python で書かれており、複数のバックエンドのニューラルネットワーク計算エンジンをサポートしています。ただし、主要な(そしてデフォルトの)バックエンドは TensorFlow で、その主要なサポーターは Google です。

TensorFlow の Keras 高レベル API については既に述べましたが、Keras も Theano の上で動いています。ニューラルネットワークのレイヤー、コスト関数、オプティマイザ、初期化スキーム、活性化関数、正則化スキームなど、モデル作成時に組み合わせることができる多くのスタンドアロンなモジュールを備えています。

Keras は、幅広いプロダクションデプロイメントオプションをサポートし、複数の GPU と分散学習を強力にサポートします。しかし、コミュニティによるサポートは最小限であり、通常、小規模なデータセットに使用されています。

4. MXNet

Apache MXNet は、オープンソースの深層学習ソフトウェアフレームワークで、深層ニューラルネットワークの定義、学習、幅広いデバイスへのデプロイに使用されています。AWS における深層学習フレームワークの最高峰として、Amazon に採用された実績があります。

複数の GPU と複数のマシンでほぼリニアにスケールアップできるため、高速なモデル学習が可能で、かつシンボリックプログラミングと命令型プログラミングを混在させて最大の効率と生産性を実現する柔軟なプログラミングモデルをサポートしています。

MXNet は、Python、C++、Scala、R、JavaScript、Julia、Perl、Go といった複数のプログラミング言語 API をサポートしています。ただし、ネイティブ API は TensorFlow ほどタスクアグレッシブではありません。

5. CNTK

CNTK は、Microsoft Cognitive Toolkit とも呼ばれ、グラフ構造を使ってデータの流れを一連の計算手順として記述する、統一された深層学習ツールキットです。TensorFlow と同じですが、学習や導入はそれほど簡単ではありません。

ニューラルネットワークを作ることに大きくフォーカスしており、それに係るタスクを迅速に処理できます。CNTK では、順伝播型ニューラルネットワーク、畳み込みネットワーク(CNN)、リカレントニューラルネットワーク(RNN/LSTM)といった一般的なモデルタイプを簡単に実現し、組み合わせることができます。

CNTK は幅広い API(Python、C++、C#、Java)を持ち、Python、C#、C++ プログラムにライブラリとして組み込むことも、独自のモデル記述言語(BrainScript)を用いてスタンドアロンの機械学習ツールとして使用することも可能です。64 ビット Linux または 64 ビット Windows OS をサポートします。

注:2.7 バージョンは CNTK の最後のメインリリースであり、新しい機能開発の予定はありません。

TensorFlow を使うべきか

TensorFlow には、多くのメリットがあります。オープンソースの機械学習フレームワークは、優れたアーキテクチャをサポートしており、さまざまなプラットフォームで計算フレームワークを容易にデプロイできます。Google の評判の良さもあり、いくつかの大手企業が TensorFlow を採用して人工知能のタスクを実行しています。

一方、TensorFlow の実装の詳細によっては、完全に決定論的なモデル学習結果を得ることが困難な場合もあります。しかし、開発チームは、ワークフローにおける決定論に影響を与える制御を増やすことを検討しています。

TensorFlow の導入はシンプルです。特に、TensorFlow by Databricks は、Databricks Runtime for Machine Learning を介してすぐに統合できるため、簡単に始めることができます。クラスタを数秒で立ち上げることができ、低レベルおよび高レベルの API を幅広く利用できます。

関連リソース


用語集のトップページへ