TensorFlowで何ができるか

今話題のAIで最もよく利用されているTensorFlowについて、TensorFlowが実現していること、TensorFlowを使う際の手順、注意する事項、TensorFlowを利用した開発の現状について述べる。

シェアする

AIに関する記事には頻繁に”TensorFlow”という言葉が記載されているが、TensorFlowとはどのような技術か、簡単に利用できるのであろうか、利用にあたっても注意すべき点は何なのか、という内容について以下に示す。
Tensorflow,使い方

TensorFlowとは

TensorFlowはGoogleのAI開発チームであるGoogle Brainによって内部利用向けに開発され、その後、機械学習向けオープンソースとして公開されたライブラリである。最初の版は、2015年11月にリリースされた。TensorFlowは現在、機械学習向けライブラリでは世界中でもっとも利用されている。

TensorFlowでできること

TensorFlowで取り扱うことができる処理は、図1のTensorFlowプログラミング環境に示されているように通常の数値計算、ベクトル・マトリックス演算、データセット処理(Datasets)、ネットワーク処理(Layers)、機械学習処理(Estimators,Metrics)など様々であるが、主な目的は深層学習の処理の簡易化である。

深層学習の処理をプログラムで実装するためには、基本的には様々な処理フローをPythonなどのプログラム言語で設計、コーディングする必要がある。これらの処理は誤差関数の計算や、最適化理論に基づいた最適化アルゴリズムの実装など、その分野の専門家でなければプログラムの開発が困難なアルゴリズムによって構成されている。仮に実用的かつ様々な課題に対応するプログラムをゼロから開発するとすれば、多くの時間と経験が必要となる。TensorFlowはそれらの処理を簡単に利用可能としている。

図1.TensorFlowプログラミング環境

(出典:https://www.tensorflow.org/)

近年、深層学習は急速に進展しているが、それらの基本となる技術がCNN(Convolutional Neural Networks)とRNN(Recurrent Neural Networks)である。日々、様々なアルゴリズムが開発されているが、それらはCNNまたはRNNを応用して実現されていると言っても過言ではない。リアルタイム物体検出アルゴリズムであるYOLO(You Only Look Once)はその一例である。YOLOは図2に示すように静止画または動画内に表示された物体をリアルタイムで識別するアルゴリズムである。

機能面でのCNNとRNNの大きな違いは、時間の概念の有無である。CNNは多くの画像解析で利用されており、RNNは自然言語解析や機械翻訳、文章生成で利用されている。言語関係の処理は、言葉の前後関係、つまり時間的な順序が非常に重要であり、その前後関係を考慮した学習が必要になる。TensorFlowを利用すればCNN,RNNを簡単にコーディングすることができる。

図2. YOLOによる物体識別例

(出典:https://pjreddie.com/darknet/yolo/

通常、深層学習の動作には、大きく分けて2つのフェーズがある。その第一フェーズはデータに基づく学習であり、第二フェーズは学習によって得られたモデルを利用した推論(認識、識別も含む)である。TensorFlowは両方のフェーズで利用可能であるが、ブラウザで動作するTensorFlow.jsやRaspberry Piやスマホで動作する TensorFlow Liteは既に学習が完了したモデルを利用した推論のみ、もしくは軽微な追加学習を含む推論での利用を念頭に開発されているため選択する際は注意が必要である。

TensorFlowの使い方

TensorFlowがサポートしてるOS環境は、現時点(2018年6月)では以下のOS(64-bit)環境である。
・Windows7以降のバージョン
・macOS10.12.6(Sierra) 以降のバージョン
・Ubuntu 16.04以降のバージョン
また、TensorFlowは開発言語として主にPythonをサポートしているが、その他、Java、C言語、Go言語もサポートしている。

TensorFlowには通常のPC/ワークステーション、サーバで動作するCPU版とNVIDIA社のGPU(Graphical Processing Unit:画像処理ユニット)を搭載したPC/ワークステーション、サーバでのみ動作するGPU版(さらにGoogleのCloud TPUでのみ動作するTPU版もあるが、ここでは説明を割愛する)がある。学習する内容にもよるがCPUに比較しGPUの方が数倍〜十数倍の速度で処理される。少ないデータ量での学習を実行する、または推論だけを実行する場合はCPU版でも十分だが、大量のデータでも学習を実行する場合にはGPU版を推奨する。

しかし、GPU版を動作させるためにはNVIDIA社のGPUを動作させるためのCUDA(Compute Unite Device Architecture)という環境を構築する必要があり、これは初心者には非常に難易度が高い。したがって、当初からGPU版を利用することは奨めない。学習処理のプログラムはCPU版とGPU版でほぼ差異はないため、最初にCPU版で習熟、開発、試行し本格的に大量のデータを用いた学習を実施する段階にGPU版に移行するのが最も開発効率が良い。

TensorFlowを使うためには、TensorFlowのサイト(https://www.tensorflow.org/install/)の手順にしたがって、各OS、言語に応じたTensorFlowをインストールする。ここでは、macOSにPython向けのTensorFlowをインストールする手順を例示する。Python環境を仮想化するツールによっても手順は異なるがここでは最も簡単なpipと呼ばれるPython向けパッケージ管理システムによるインストールを想定する。
Macでターミナルを起動し、以下のコマンドを実行する。

(Pythonのバージョン確認)
上のコマンドでバージョンが表示されない場合、下のコマンドを実行する
$ pip -V # for Python 2.7
$ pip3 -V # for Python 3.n
(TensorFlowのインストール)
$ pip install tensorflow # Python 2.7の場合
$ pip3 install tensorflow # Python 3.nの場合
これでインストールが完了する。(非常に簡単)

TensorFlowのインストールを完了し、利用するにあたっては、いくつかサンプルを動作させるとともにサンプルコードを変更してみることを奨める。サンプルコードの取得、仕組みを理解するためには、以下のサイトを参照する必要がある。

TensorFlow-Develop-TUTORIALS(https://www.tensorflow.org/tutorials/

上記は英語のサイトだが、MNISTについて日本語翻訳を@KojiOhkiさんがされているのでこちらを参照するのがわかりやすい。

TensorFlowチュートリアル-ML初心者のためのMNIST(翻訳)(https://qiita.com/KojiOhki/items/ff6ae04d6cf02f1b6edf

TensorFlowの動作概要を理解した後は、TensorFlowを利用した学習処理のコーディングの習得する段階になるが、TensorFlowを利用するためにはコマンド記法を習得する必要がある。簡易に利用可能になっているがそれでもTensorFlowのコマンド記法は複雑でコード量も多い。そこで、CNNやRNNに関するコマンドをまとめて簡単なコードから利用可能としたKerasというオープンソースライブラリが2015年にGoogleのエンジニアであるFrançois Cholletを中心するチームによって開発、リリースされた。

Kerasは、MXNet、Deeplearning4j、TensorFlow、CNTK、Theanoなどの主要なライブラリーの上で動作することができるインタフェース的なライブラリであり世界中で頻繁に利用されている。特に最近ではTensorFlowとの組み合わせでの利用が増えており、GitHubに公開されているTensorFlowを利用したアプリケーションコードの大部分は、Kerasでプログラムを記述しTensorFlowで動作させると言っても過言でなくほど、この組み合わせは主流になってきている。

また、2017年にGoogleのTensorFlowチームもKerasのサポートを決定しており、これら2つのライブラリーは相乗効果により更に普及することが予想される。今後は、学習処理のコーディングはKerasで実装し、処理自体はTensorFlowで実施するのが主流になると考える。Keras+TensorFlowは最強の深層学習向けライブラリである。

まとめ

TensorFlowは世界中で利用されるとともに日々進化している。TensorFlowはより簡単に深層学習を実現するために開発されたライブラリであるが、更に簡単に利用可能とするKerasというオープンソースも普及してきている。これらの相乗効果により、さらにAI開発のスピードは加速していく。


<参考>

  1. YOLO: Real-Time Object Detection
    https://pjreddie.com/darknet/yolo/
  2. An open source machine learning framework for everyone
    https://www.tensorflow.org/
  3. Keras: Pythonの深層学習ライブラリ
    https://keras.io/ja/