Gmailでメールのやりとりをしていると、メールの内容に関連する広告が表示されたり、ECサイトで最近欲しいと思って検索していた商品がオススメとして表示されたりすることがあります。
まるで誰かに自分の行動や言動が監視されているかのようで、この機能が導入された当初はユーザーからの反感を買うこともありましたが、最近では、自分の買い物の傾向を理解してオススメ商品を紹介してくれる便利な機能、と好意的に取られることも増えているそうです。
もちろん、誰かがあなたのメールや買い物履歴を覗いて、あなたが好きそうなものを紹介してくれているわけではありません。これらは機械学習によるものです。
また写真に写っているものが猫なのか、とんかつなのか、ラーメンなのか、人間なのか、神社の鳥居なのか、はたまたペットボトルなのかを識別し、タグ付けしたり、分類したりをアシストしてくれる機能なども、機械学習によるものです。
Gmailなどのグーグルのサービスで使われているのは、グーグルが開発したTensorFlow(テンソルフロー)と呼ばれる機械学習のソフトウェアライブラリです。この数年でグーグル翻訳の機械翻訳の精度が飛躍的に向上したのも、TensorFlowの貢献が大きいそうです。
機械学習やAIに興味がある方、あるいはIT業界の方であれば聞いたことがある方も多いかもしれません。
この記事では、TensorFlowがいったいどんなものなのか、どんな用途で使われているのか、について解説してみたいと思います。
TensorFlowは、OSS(オープンソースソフトウェア)の一つで、2015年にGoogleが開発した機械学習のソフトウェアライブラリです。
まずは上記のTensorFlowの紹介動画(英語)をご覧ください。
動画によると、TensorFlowはグーグルの機械学習の主力ツールとして活用されています。例えば、Gmailにはスマートリプライという機能があり、メールの文脈を理解し、返信する内容を予測することができます。これもTensorFlowによって可能となった機能の1つです。
本来であれば、ソースコードには作者の著作権があり、勝手に配布をすることはできません。しかし、オープンソースは作者が第三者による使用を基本的には制限なく許可していることを前提としているので、著作権の侵害を気にすることなく誰でも自由に使うことができます。誰でも使える、という意味では著作権フリーの画像や音源、パワポ資料などでお目にかからない日はほぼないいらすとやのイラストなどのフリー素材をイメージするとわかりやすいかもしれません。
公式サイトには下記のように書かれています。
TensorFlow™ は、データフローグラフを使用して数値計算を行うためのオープンソースソフトウェアライブラリです。グラフ内のノードは数値演算を表し、グラフのエッジはノード間でやり取りされたデータの多次元配列(テンソル)を表します。柔軟性の高いアーキテクチャが採用されているため、単一のAPIを使用して、デスクトップ、サーバーまたはモバイル端末の1つ以上の CPU またはGPUに計算機能をデプロイすることができます。TensorFlow は本来、Google のマシンインテリジェンス研究組織内の Google Brain チームに参加している研究者やエンジニアが機械学習や高度なニュートラル ネットワークの研究用に開発したものでしたが、このシステムは汎用性が高く、他の領域にも幅広く適用することができます。
が、このままだとなかなか理解することが難しいので、もう少し簡単に説明をしていきます!
TensorFlowを理解するために、まずはTensor(テンソル)について軽く触れていきます。
テンソルと言うのは、線形的な量または線形的な幾何概念を一般化したもので、基底を選べば、多次元の配列として表現できるようなもの(参考:Wikipedia)として世界的に有名なので知らない人はほとんどいないと思います(冗談です)が、この一文を読んで意味がわかる人もほとんどいないと思いますので、説明します。
Tensorの意味を調べると、多次元配列と出てきます。
読んで字のごとく配列が多くの次元に渡っている、ということを意味しています。機械学習に慣れている人であれば多次元配列と聞いてすぐにピンとくるかもしれませんが、そうでない人にとってはこれでもまだちんぷんかんぷんではないでしょうか。
まずもっともなシンプルな配列を図で示すと、
配列、というよりもxやyといった「値」が一つだけポツンと存在している状態になります。
そして、この値がいくつか集合した一次元配列を図で示すと、こんな感じです。
値が横つながりに配列されています。これだけ見ても、へえー、って感じかと思いますので次をご覧ください。
二次元配列はというと、
こんな感じです。今度は、縦と横の両方向に展開されています。これで、一次元と二次元の違いと見るとなんとなくイメージがつくかと思います。
そして三次元配列が
こんな感じです。今度は、縦横高さがあり、より立体的に展開されています。
データや情報が処理される状況を、水が流れていく様子に重ねてイメージしてもらうとわかりやすいかと思いますが、多くの水を流そうとした場合、図01のように1×5=5にパス(通り道)が分かれていた方が、1つしかないよりも多くの水を短時間で流せますよね?
そして、それよりも図02のように5×5=25と25通りのパスがあった方がより短時間で多くの水を流すことができます。
そして、それをさらに複雑化させたのが図03で、この図では5x5x5=125、と125にパスが分かれています。なので処理速度で言うと、
図01 < 図02 < 図03
となり、図01と図03では処理速度が25倍も差があり、その分複雑な処理が可能になる、というイメージが掴めますでしょうか?(実際はそこまで単純な計算ではない場合がほとんどだと思いますが。。。)
三次元くらいまでは図で説明できるのですが、それ以降は図を使った説明ができません。しかし、データ処理を行う数式的には例えば、十五次元などに次元数を増やしていくことが可能です。
ここでは、多次元配列の情報を流れるようにまとめて処理することができることができる、というのがテンソルの特徴である、となんとなく理解してもらえればそれで十分かと。
TensorFlowの特徴は、
といった処理に対してテンソルを用いている点が挙げられます。テンソルを使う長所は前述した通りです。
また、データフローグラフを構築して処理することを想定してつくられている点も特徴の1つです。
データフローグラフとは、データの流れ(フロー)を定義した「グラフ」で、どういう順番でデータが処理されるのかが定義されています。簡単に言えば、通常であれば計算などの処理は順番に行われますが、テンソルフローでは分散しながら並列で処理することが可能です。
つまりかつては、何工程も経て処理しなければいけなかったものでも、1つのOSSによって処理ができるようになった、というがTensorFlowの特徴です。
次はどんなサービスにTensorFlowが利用されているのかを見てみましょう。
TensorFlowが使われているサービス多岐に渡り、
などに使われています。
TensorFlowでは、分散処理が行えるために、ビッグデータを扱うことができます。そのために今後も様々なサービスに使われるのではないかと言われています。
もしも、TensorFlowを使ってみようと思ったら、公式からのインストールをして始めてみましょう。
TensorFlowを使ってみるための日本語のチュートリアルをお探しであれば、下記の動画がオススメです。
テンソルとは何か?TensorFlowとは一体どういうものなのかについてこの記事では説明してきましたがいかがだったでしょうか?
大量のデータの処理ができるTensorFlowですが、その優秀さゆえに問題点もあるそうです。それは高性能なハードウェアが必要である、という点です。なので、個人で莫大な量のデータを分析して、活用というのはどこまで実用性があるのかはわかりませんが、その一方で、個人で非常に興味深い使い方をしている方もいらっしゃいます。例えば、静岡県湖西市で農業を営む小池誠さんはきゅうりの等級判定をTensorFlowを使った機械学習によって行う、という試みをしています。
TensorFlowは非常に拡張性が高く、何に使うかはまさにアイデア次第です。今後、TensorFlowを思いがけない方法で活用する事例が多く登場してきそうですね。
TensorFlowのYouTubeチャンネルなどもあり、#AskTensorFlowのハッシュタグを使ってSNS経由で質問をすることも可能となっており、コミュニティーも充実していきているので、興味を持った方は、ぜひチャレンジしてみてください!
(桑折和宗)
メルマガ登録をしていただくと、記事やイベントなどの最新情報をお届けいたします。
30秒で理解!インフォグラフィックや動画で解説!フォローして『1日1記事』インプットしよう!