○ TensorFlowとは
TensorFlowはGoogleのAI開発チームであるGoogle Brainによって内部利用向けに開発され、その後、機械学習向けオープンソースとして公開されたライブラリである。最初の版は、2015年11月にリリースされた。それ以前にリリースされた他の機械学習向けオープンソースライブラリにはCaffe、Torch7、Chainerなどがあるが、TensorFlowは現在、世界中でもっとも利用されていると言うことができる。
○ TensorFlowでできること
深層学習の処理をプログラムで実装するためには、基本的には以下の処理フローをPythonなどのプログラム言語で設計、コーディングする必要がある。
【処理フロー概要】 | |
1 | ネットワークの接続、階層の定義 |
2 | ネットワーク入力層へのデータ入力 |
3 | ネットワークの重み線形和の計算 |
4 | 種々の非線形活性化関数の計算 |
5 | 出力と教師データから成る種々の誤差関数値の計算 |
6 | 種々の最適化アルゴリズムを用いた重み値修正量の計算 |
7 | 重み値の更新 |
これらの処理は誤差関数の計算や、最適化理論に基づいた最適化アルゴリズムの実装など、その分野の専門家でなければプログラムの開発が困難なアルゴリズムによって構成されている。仮に実用的かつ様々な課題に対応するプログラムをゼロから開発するとすれば、多くの時間と経験が必要となる。
通常、深層学習の動作には、大きく分けて2つのフェーズがあり、その第一フェーズはデータに基づく学習であり、第二フェーズは学習によって得られたモデルを利用した推論(認識、識別も含む)である。TensorFlowは両方のフェーズで利用可能であるが、ブラウザで動作するTensorFlow.jsやRaspberry Piやスマホで動作するTensorFlow Liteは既に学習が完了したモデルを利用した推論のみ、もしくは軽微な追加学習を含む推論での利用を念頭に開発されているため選択する際は注意が必要である。
TensorFlowで取り扱うことができる処理は、通常の数値計算、ベクトル・マトリックス演算、機械学習処理など様々であるが、本来の目的は深層学習の処理の簡易化である。近年、深層学習は急速に進展しているが、それらの基本となる技術がCNN(Convolutional Neural Networks)とRNN(Recurrent Neural Networks)である。日々、様々なアルゴリズムが開発されているが、それらはCNNまたはRNNを応用して実現されていると言っても過言ではない。TensorFlowはCNN,RNNを簡単に実現することができる。
機能面でのCNNとRNNの大きな違いは、時間の概念の有無である。CNNは多くの画像解析で利用されており、RNNは自然言語解析や機械翻訳、文章生成で利用されている。言語関係の処理は、言葉の前後関係、つまり時間的な順序が非常に重要であり、その前後関係を考慮した学習が必要になる。
○ 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を使うためには、サイト(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にはTensorBoardと呼ばれる学習状況の可視化ツールがある。TensorBoardはデータフローの可視化や学習の履歴(損失関数の変化など)の可視化、途中過程で生成される画像や音声の表示を行うことができる。これにより、学習モデルの最適化やパラメーターチューニングに対するヒントが得られる。 深層学習は、大量のデータを利用し繰り返し学習処理を行うことで、それらのデータが網羅する事象について識別、認識、生成が可能になる技術である。よって、結果を得るためにはWebや業務系システムの処理時間と比較して長時間が必要となる。従来は途中結果を逐次画面またはログファイルに出力し、多くの数値データの変化をスクロール等で視認し、学習が順調か、過学習等により中断すべき状態になっていないかを確認していた。しかし、TensorBoardにより、ファイルとして出力された内部ログを別処理で可視化できるため、学習曲線が逐次グラフ表示され一目瞭然になるので非常に効率的である(図1)。また、ブラウザからアクセスとなるため、設定によってリモートのPCやスマホからも途中経過を確認することも可能である。
図1.TensorBoardによる学習曲線表示
機械学習向けライブラリーを利用するためにはそれぞれのライブラリーのコマンド記法を習得する必要がある。簡易に利用可能になっているがコマンド記法は複雑でコード量も多い。そこで、CNNやRNNに関するコマンドをまとめて簡単なコードから利用可能としたKerasというオープンソースライブラリーが2015年にGoogleのエンジニアであるFrançois Cholletを中心するチームによって開発、リリースされた。Kerasは、MXNet,Deeplearning4j、TensorFlow、CNTK、Theanoなどの主要なライブラリーの上で動作することができるインタフェース的なライブラリーであり世界中で頻繁に利用されている。特に最近ではTensorFlowとの組み合わせでの利用が増えており、Githubに公開されているTensorFlowを利用したアプリケーションコードの大部分が、Kerasでプログラムを記述しTensorFlowで動作させると言っても過言でなくほど、この組み合わせは主流になってきている。また、2017年にGoogleのTensorFlowチームもKerasのサポートを決定しており、これら2つのライブラリーは相乗効果により更に普及することが予想される。
<参考>
An open source machine learning framework for everyone
TensorBoard: Visualizing Learning
https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard
Keras: Pythonの深層学習ライブラリ