「ディープラーニング・ビジネス」に対する違和感

ディープラーニング・ビジネスで「世界で勝てる感じはしない」

今月に入って、いつからかネット記事の見出しやFacebookの投稿に上記の日経XTrendへのリンクが目立っている。現在の日本のメディアでは、日本礼賛か日本落日のどちらかの記事が注目を引くということもあり、なかなかセンセーショナルな見出しである。それ以外にも、どこかの大学の特任教授による、「AIビジネスではもう儲からない」などとのFacebookへの投稿もあり、バズワードがパスワードとしての役割を終了するのが間近という雰囲気も醸し出している。

個人的には、この「ディープラーニング・ビジネス」というバズワード感いっぱいの言葉には非常に違和感を感じている。この発言したのは東京大学松尾准教授である。松尾氏はディープラーニングの第一人者ではあるが、企業側の人間ではないので、ディープラーニング自体がビジネスの対象になると考えるのも仕方がないが、そうではないと私は考える。ディープラーニング自体はデータから学習アルゴリズムだけであり、実際に価値を持つのはデータとその学習によって得られる新規機能であり、精度向上による高付加価値である。そもそも世界中のビジネスでAIが注目されているのはAI技術単体ではなく、既存のコアビジネスがAIによってどれだけ高付加価値、高度化、効率化されるかという面を有しているからである。正確に言うならば、「ディープラーニングによるブレイクスルーや、付加価値向上は、海外に比べて日本は遅れている感じがする。」と表現するのが良いのではないだろうか。

ディープラーニングという技術そのものを売り物として提供することは米国でもあまりビジネス化されていない(一部PaaSクラウドではある)。あえて言うならばディープラーニングではないがAI技術という意味ではIBMのWatsonがそれに該当するかもしれない。WatsonはAI技術のプラットフォームを提供するサービス・ビジネスである。ただし、Watonはディープラーニング以前のOld Style AIであり、IBMにとっての稼ぎどころは顧客向けにWatsonを仕立てるコンサルティングサービスである。では、米国やその他の国で話題になっているAIとビジネスとの関係は何であるのか、というと、これらの国ではAI技術は元からあるコアビジネスを高効率化したり、新サービスを支える技術して利用されているのがほとんどである。特に、AIに対する投資額が大きい、Google,Microsoft,Facebook,Amazonからもその傾向が読み取れる。

Googleは、AI技術を駆使しコアビジネスである広告表示の最適化の精度を向上させ、コンバージェントレートを上げている。また、検索機能、翻訳機能の精度向上にもAI技術を用いており、その結果としてポータルサイトとしての優位性ではダントツのトップになっている。GoogleはCloudサービスにおいても、画像解析APIや音声認識APIなど内部で活用している機能をAPIとしてサービス化しクラウドの付加価値を向上させている。

Microsoftは、WindowsへCortanaという音声認識機能を追加し、Skypeへ機械翻訳機能を追加し、PowerPointへの機械翻訳プラグイン追加など従来のコア製品群の高付加価値化にAI技術を活用している。また、次世代のコアビジネスと位置づけているAzure(クラウド)にもCognitive Servicesとして、顔認証API,音声認識API,画像認識API,など様々なAI技術を用いたサービスを追加している。

Facebookは2013年にFace.comというStartupを買収するなど顔認識技術に力を入れ、その成果がFacebook内での画像における自動顔識別機能につながっている。また、Google同様に広告表示の最適化にAI技術が活用されていると推測される。

Amazonは、従来からの機能であるユーザに対する商品レコメンド機能は代表的なAI技術の成果であり、先進的な取り組みである無人店舗AmazonGOを実現するためのカメラ画像認識や、AIスピーカーであるAmazon Echoを実現している音声認識、音声合成技術もAI技術である。

これらの例でわかるように現時点では、AI技術自体はツールであり、コアビジネスを支える重要な機能である。したがって、世界的に見れば単体でビジネスになるということは少ないと考える。

つまり、ビジネスへAI技術の導入に積極的に取り組みべきなのは、従来産業の研究開発部門なのである。これまでの技術で不可能であった問題点がAIによりブレイクスルーできる可能性があるか否かを早急に検討、投資し、自社の競争力を向上させるべきなのである。

ただし、AI研究に関する日本の優位性については様々な専門家が訴えているように危機的状況であることに変わりはない。その意味においても、ビジネスにおいて余力がある企業はコアビジネスを強化するためにもAIの研究開発に投資を集中すべきと考える。

 

TensorFlowとは

○ 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

https://www.tensorflow.org/

 

TensorBoard: Visualizing Learning

https://www.tensorflow.org/programmers_guide/summaries_and_tensorboard

 

Keras: Pythonの深層学習ライブラリ

https://keras.io/ja/