TensorFlowの概要と適用範囲を説明。最重要な基本概念であるデータフローグラフについて解説する。また、深層学習との関係や、事例、学び方についても紹介する。
ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。
TensorFlowは、グーグルが2015年に公開した機械学習用のオープンソースライブラリだ。
「すでに名前を耳にしたことがある」という読者も多いことだろう。そんな人にとってTensorFlowは、深層学習(ディープラーニングとも呼ばれる)用のフレームワークという印象が強いのではないだろうか。確かにTensorFlowの起源はニューラルネットワーク研究にあるが、TensorFlowの公式サイトには以下のように書かれており、深層学習のみではなく、より広い範囲で利用できるように設計されている。
TensorFlow is an open source software library for numerical computation using data flow graphs. ……中略…… TensorFlow was originally developed ……中略…… for the purposes of conducting machine learning and deep neural networks research, but the system is general enough to be applicable in a wide variety of other domains as well.
【訳】TensorFlowはデータフローグラフを利用した数値計算のためのオープンソース・ソフトウェア・ライブラリです。TensorFlowはもともと機械学習や深層ニューラルネットワークの研究を行う目的で開発されましたが、このシステムはとても汎用性が高く、それ以外のさまざまな領域にも適用できます。
本稿では詳細について取り扱わないが、TensorFlowの適用範囲の広さを示す例として、Edwardというライブラリを紹介しておこう。EdwardはTensorFlowの計算機構を、ベイズ推論の枠組みに応用したもので、確率的プログラミング(Probabilistic Programming)*1を実現できる。
*1 確率的プログラミングとは、確率的潜在変数を使うことで問題をより柔軟にモデル化する手法のことで、近年の機械学習コミュニティにおいて研究対象として注目されている。
上記で引用したTensorFlowの概要説明にある通り、TensorFlowはデータ・フロー・グラフ(data flow graphs)を利用して数値計算処理を実施する。データフローグラフとは、読んだそのままの通り、データの流れを示したグラフのことであるが、若干の補足をしておく。
グラフ
まずグラフについてだが、これは棒グラフや円グラフといった、数量を視覚的に表現するための図のことではない。データフローグラフにおけるグラフとは、ノード(頂点)とノードの間の連結を示すエッジ(枝)から成るデータ構造のことである。エッジに方向性があるグラフを特に有向グラフ(directed graph)と呼ぶ。
図1に例を示そう。ここにはA B C Dの4つのノード(丸)と4つのエッジ(矢印)がある。A B Cの3つのノードは互いにエッジによって連結されているが、ノードDはノードCとのみ連結している。また、エッジには方向性がある。こういったグラフが「有向グラフ」である。
データフローグラフにおいて、ノードは主に計算処理を表し、エッジはその計算処理で利用されるデータを含む処理の流れを表す。
例えば図2のデータフローグラフにおいて、x y z wというノードは「おのおのの値を定義する」という処理を表し、+ *は「おのおのの演算処理」を表す。また、グラフのエッジは処理の方向を示す。つまり、この有向グラフは、x y z wという値の定義と、それらの値を用いての(x+y)*(z+w)という計算処理を表現しているというわけだ。
データ
TensorFlowはデータフローグラフを利用した数値計算ライブラリであることは前述の通りであるが、データといっても任意のデータを指すわけではない。TensorFlowにおけるデータとは、その名前が示すようにテンソル(tensor)のことを指す。テンソルとはもともとは数学用語で、きちんとした定義も当然あるのだが、本稿では数学的な説明は行わない。
テンソルは、エンジニアにとってはなじみ深いであろう、多次元配列とよく似ている。多次元配列は複数の要素(通常は数値)を直列状、あるいは行列状、さらにその多次元拡張に並べたものであるが、テンソルも同じである。多次元配列では次元(dimension)と呼ぶが、テンソルでは階(rank)という用語を使う。テンソルに対して、単一の(配列ではない)いわゆる数値のことはスカラー(scalar)という。
図2で説明すると、x y z wはテンソルである。テンソル同士を足し合わせたり掛け合わせたりしたもの(+ や*のノードで得られる)についてもまたテンソルとなる。多次元配列同士の足し算や掛け算といった演算がどのように定義されるかは容易に決められることではないが、これらがテンソルの世界では定義されていると考えればよい。実際、TensorFlowにはテンソル同士の足し算や掛け算といった演算が関数として用意されている。
データフローグラフのメリット
TensorFlowがデータフローグラフをベースとしているのには、いくつか理由がある。データフローグラフを定義することで、次のようなメリットがある。
Copyright© Digital Advantage Corp. All Rights Reserved.