2017年11月27日月曜日

【人工知能調査】機械学習のWebAPI

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

前回の調査で、自分で機械学習アプリを作ってみたい場合はGoogleの機械学習ライブラリ「TensorFlow(テンソルフロー)」がオススメとなりました。




しかしながら、やっぱり結構難しいんですよね。。。
勉強期間を置かなければ厳しいです。

しかし、そこは天下のGoogle。そんな初心者でも機械学習が使えるようにWebAPIを用意してくれています。

ここから先は機械学習WebAPIについて調査してきます。

Google Cloud Platform


Googleが提供するWebAPI、それは「Google Cloud Platform」の中にあります。
通常、「Googleクラウド」。




AmazonのAWS、MicrosoftのAzureと並ぶクラウド三巨頭の一角です。

メニューの内容をいくつか見ていきましょう。


クラウド コンピューティング サービス


「Googleクラウド」という言葉は、暗黙的にこのクラウドコンピューティングサービスのイメージで使われている事が多いです。
アプリを載せるサーバをクラウド環境で提供するという、クラウド界の一般モデルですね。

以前、私はこの中の「GoogleAppEngine」を調査しました。
驚異的な速さと安さ、処理パワーを誇る一方、制約がキツい
通常の業務システムではこんなの使えませんが、特定局面ではブッチギリの最強を誇る。
キレ味の鋭いデンジャラスなサービスです。
当時の時期はこちらをご確認下さい。


ストレージとデータサービス、その他


Googleクラウド上で展開しているデータベースです。
普通のOracleとかMySQLとかと違い、クラウド上で効率的に処理をするためにチューニングが施されたDBが展開しています。

が、上記のサイトのデザインを見るとクラウドコンピューティングサービスは別の項目として置かれていますから、違うサービスであるかのように見えます。
課金体系も別れているので確かに違うサービスと言えばそうですが……。

私は「クラウドコンピューティングサービスの一部」としか思っていません。
だって、「言語は動かせるけどDBはありません」って、それじゃシステムが成り立たないじゃないですか。
この「クラウドDB」とは、要するに「GoogleAppEngineの接続先のDB」なんですよ。

DBだけ独立して使うものじゃない。

他の項目である「ネットワーキング」「ビッグデータ」「管理ツール」も同じ。
全部揃って「Googleクラウド」です。

  • Googleクラウドのうち、サーバ部分の詳細はコンピューティングを参照。
  • Googleクラウドのうち、DB部分はストレージの項目を参照。
  • Googleクラウドのうち、ネットワーク部分はネットワークの項目。
  • Googleクラウドでも、特にビッグデータ処理用の機能はビッグデータの項目を参照。
  • GoogleクラウドのAdminコンソールは管理ツール参照。


と、みんな繋がっているものです。

つまり、

  • 一つのサービスを実現する為に必要な技術領域毎にメニューを分けている。
  • 全部組み合わせて最終的に一つのWebサービスが出来上がる。


と考えるのが分かり易いです。

課金体系もサーバ処理、DB処理、ネットワークで個別に別れています。

  • 重い処理があるサービスはコンピュータ代が高くなる。
  • アクセスが殺到するサービスはネットワークが高くなる。
  • 月々の維持費は全部の合計。


こういう課金体系です。
こうして見ると「クラウドクラウドって言うけど、普通のサーバと似たようなもんじゃないか」というのは、その通りです。

クラウドはクラウドという新しい技術ではなく、昔ながらの技術の延長線上にある、ちょっと便利なテクニックのようなものなのです。

機械学習


さて、そんなGoogleクラウドの中にねじ込まれている項目があります。
以前は無かったのにいつのまにか増えました。


これが目当ての機械学習です。

例えば、Google検索でテキストボックスに文字を少し入力すると、その先が予測されて表示されるという機能は、この機械学習の機能を使った結果のはず。

我々が普段使っている機能の裏側がここに眠っているのでしょう。

終わりに


次回からは、この機械学習について、調査と検証に着手していきたいと思います。

2017年11月20日月曜日

【人工知能調査】機械学習を始めてみよう

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

最近流行の機械学習について勉強中です。

これまでの調査で「機械学習とはどういうものか?」というものを触り程度には理解出来たと思います。
しかし、「じゃあ早速業務で使いたいんだけど♪」となると、まだまだハードルが高そうです。

ここからは具体的にどう実現していけば良いか、について模索していきたいと思います。

二大プラン


機械学習は、元を辿るともの凄く高度な技術領域で、特別な研究者でなければ手も足も出ないようなものです。

しかしながら、最近機械学習がブームになっているのは、そういった偉大なる先人達が一般エンジニアでも使えるようにお膳立てを整えてくれたおかげで、以前よりもずっと身近なものになってきているからです。

機械学習を導入する手段としては、私は以下の2つに絞り込みたいと思います。

  • ライブラリ導入 
  • WebAPI 

まずはライブラリから調べてみます。

機械学習ライブラリ


機械学習を実現するライブラリを導入して実現するプランです。
「ライブラリ」とは、その名のとおり、普通にソースの集合体です。
オープンソースとして公開されているので誰でも取得可能。

自分でプロジェクトを作成し、公式サイトからダウンロードしたパッケージにパスを通し、起動。
後は自分で実装していく中でライブラリのメソッドを呼んだりするわけです。

つまり、普通のプラグラミングです。

昔ながらのイメージだと、こういうのは世界有数の先端企業の天才プログラマーが本人以外誰にも分からないような異次元開発を行っているような気がしますが、
実際はネットに転がっていて誰でも活用OKという状況です。

時代の潮流ですね。

注目のライブラリ:TensorFlow


では、世の中にはどのようなライブラリがあるか?

「機械学習 ライブラリ」で検索すると、結構沢山出てきます。
機械学習のライブラリは既に世界に溢れています。
とっくに群雄割拠の時代に突入していると言ってしまって良いでしょう。

その中で私がイチオシするのは、GoogleのTensorFlow(テンソルフロー)です。


機械学習のライブラリ開発は、古くは(と言うほど昔ではありませんが)「カルフォルニア大学バークレー校」「FaceBook」などが活躍してきました。

一方、技術領域の最高峰と目されていたGoogleはソースのオープン化を行っておらず、内部プロジェクトとして秘密裏に進行していました。
「Googleは一体どんなことをやっているんだろう???」とみんなが思っていた2015年、満を持して世界に公開された待望のライブラリ、それがこのTensorFlowです。

最大の特徴は、Googleが実際にこのライブラリを自社で使っているという「実績」でしょう。

Googleの迷惑メールフィルタリングとか、画像検索とか、表示される広告の選抜とか、Googleが実現している機能はこのライブラリを使っているわけです。

  • 現在、Googleがこういう機能を実現している。 
  • これを応用して、自分達の業務に活用したい。 

こういう発想で物事を考えていくことが出来るわけですね。

2017年の現時点において機械学習を始めたい人は、このTensorFlowを勉強するのが最善の道だと思います。

言語はPython


TensorFlowの言語はC言語、C++にも対応していますが、主力はPythonです。

Pythonは日本ではまだまだ普及しているとは言い難いですが、欧米ではかなり採用比率が高く、特に機械学習業界では「言語=Python」と言ってしまって良いくらい支配的な地位を占めています。

今一番ホットな言語だと思います。

機械学習界でPythonが人気を集めるのには理由がありますが、私は特に以下の点が重要だと思います。

インタプリタ言語である


インタプリタ言語とは、書いたソースを逐次解釈して実行するタイプの言語のことで、例えばPerl、Ruby、PHPがそれに該当します。

C言語みたいにコンパイルを経由しないので高い生産性を持つと評価されます。

ココ、「コンパイルせずに即実行」という特性がポイントです。

私のような業務系SEの場合、開発風景は基本的に「基本設計⇒詳細設計⇒実装」と進行します。
キチッと設計してから実装するので、実装は理論上は一撃必殺です。(実際はバグで手戻りしますが)
一撃必殺だからコンパイルも一回で終わりです。

対して、機械学習は「あーでもない」「こーでもない」と試行錯誤しながら開発が進行します。
試行錯誤の度に毎回コンパイルなんてやってられないのです。
だからインタプリタ言語が重宝されるわけです。

この発想は他の開発における言語選びでも一つの基準となりますね。

  • 詳細設計までビシッと書いて一発で実装を完了出来るなら、コンパイル言語 
  • 実装しながら考えるようなやり方なら、インタプリタ言語 

大規模ビジネスシステム開発のウォーターフォールモデルではJava等のコンパイル言語の採用が多く、
スパイラルモデルやアジャイル開発ではインタプリタ言語採用が多いのも、この辺りが背景にあるわけです。

人工知能業界は後者なのです。

速い


Pythonのもう一つの特徴。
それはインタプリタ言語にしては速いということです。

一般的にコンパイル言語の方が速く、インタプリタ言語の方が遅いです。
Pythonの場合も、流石にC言語よりは遅いのですが、インタプリタ言語の中では速い方だと言われています。
自分でベンチマークしたわけではありませんが、ザックリと

  • C言語:最速
  • Python:C言語の5~7倍の処理時間が必要 
  • Ruby:Pythonの 5~7倍の処理時間が必要

これくらいの違いが出ると思って良さそうです。
(C言語の速さはぶっちぎり)

なお、言語の処理速度とは難しいもので、処理内容によっても得意不得意があります。
例えば、「文字列の処理ならこっちの言語の方が速いが、計算処理ならそっちの言語の方が速い」なんてこともあるので、一口に速い遅いとは言えないのですが……。

ともかくPythonは大抵の場合は速いと言われており、特に機械学習がよく使う計算などの機能については定評があります。

普通に開発していると「言語なんてどれ使っても大して変わらんだろ」というのが正直なところですが、突き詰めていくと違いがあるんですね。

そんなこんなで、機械学習を習得する道筋は以下です。

  • Pythonを覚える。
  • TensorFlowを導入する。
  • そこからは普通に実装。

普通に開発です。
それなりに難しさはあるものの、手も足も出ないような特殊領域の世界ではありません。

続く


しかしながら、私はPythonが使えず、現在勉強中の段階です。

行く行くはTensorFlowを採用した自主開発が出来るようになりたいですが、まだ時間が必要です。
しかし、世の中には「HTTPリクエストを送るだけで結果を貰える」という機械学習のWebAPIサービスも普及しています。

取り急ぎ機能を使いたい人はWebAPIを利用することもオススメです。

Pythonの勉強は並行で進行しつつ、次回は機械学習WebAPIについて調査していきたいと思います。

2017年11月13日月曜日

【人工知能調査】機械学習とそうでないもの

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

前回にて、「人工知能とはつまるところ何か?」ということについて考察しました。
改めて纏めますと、私の考える人工知能とは以下です。

  • 人工知能とは、人間がロジックとして明示化出来ないマッチング条件を、機械に代行して作成して貰う為のツールである。

例えば、「犬と猫ってどう判別するの?」と写真を見せられた時、人間だったら、まあ大体分かりますよね。
顔つきとか、丸っこさとか……。

でもそれを「定義しろ」って言われても良く分からないし、ましてや「if文で書けるようにロジックとして定義しろ」なんて言われても無理無理。
こういう人間が感覚でやっていることは自分でも良く分からんのです。

こういう時に人工知能の出番というわけですね。

機械学習


さて、人間はどうやって「犬」と「猫」を見分けているのでしょう?
それはズバリ、経験です。

過去に犬と猫を何匹も見ているから、「犬っぽい顔をしているもの」「猫っぽい顔をしているもの」を見分けることが出来るわけです。

人工知能も同じ。

「コレは犬」「コレは猫」と決めて画像を大量投入すると、人工知能が経験を蓄積して「犬っぽいものは犬」「猫っぽいものは猫」というマッチングを行うようになるわけです。

この経験蓄積を「機械学習」「ディープラーニング」と言います。

「機械学習」と「ディープラーニング」の違いの定義は、ちょっと難しいです。

  • 機械学習を発展させたものがディープラーニング
  • 機械学習よりもオートマティックが進んだものがディープラーニング

という印象を受ける文献が多いですが、「ディープラーニングは機械学習の一部」と考えておくと良さそうです。
この連載では広義な「機械学習」で用語として統一させて頂きたいと思います。

機械学習の使いどころ


私の狙いとしては、「機械学習を業務やビジネスで生かすことが出来ないかな?」という所にあります。
そこで、もう少し「こういう時は機械学習の出番」「こういうのは機械学習不要」という判別について理解を深めていきたいと思います。

機械学習なもの:迷惑メールフィルタリング


人工知能への着目が世間に溢れてきたのは、将棋でAIがプロ棋士に勝ち始めた頃くらいではないでしょうか?
しかし実際のところ、私たちの身の回りにはもっとずっと前から機械学習の成果がありました。

例として、迷惑メールフィルタリングを挙げてみます。

迷惑メールフィルタリングの筆頭格は、やはりGMailでしょう。

そのメールが迷惑メールかどうかは、人間なら目視で判断出来ます。
大体、以下のような特徴があるイメージですね。

  • 内容が18禁である。
  • 金儲けの話が入っている。
  • 得体の知れないサイトへ誘導されている。

大体こういうイメージですが、特に「これ!!」って断定する条件は無いですよね。
こういう時こそ、機械学習の出番です。

昔は上司のメールが迷惑メールフィルタリング行きってことが頻発していましたが、最近は昔よりもそういうケースが減ってきたように思います。

長年の蓄積により、GMailの迷惑メールフィルタリングがどんどん成長しているのですね。
成長こそが機械学習の特徴です。

機械学習ではないもの:ウイルスメールフィルタリング


同じメールフィルタリングでも「ウイルスメールフィルタリング」は機械学習ではありません。

私はウイルスバスターを使っていますが、あれはトレンドマイクロ社員が「パターン定義ファイル」というものを毎日ガリガリ作っているんです。

「ウイルスと判定するための条件」がキチッと決まっています。
こういうものは機械学習ではありません。

  • 迷惑メールフィルタリングは、機械学習の成果である。
  • ウイルスメールフィルタリングは、機械学習ではない。

同じメールフィルタリングでも裏側の機能は別物です。
両者を「似たようなもの」と考えてしまう人がいるとしたら、言語道断です。


このように、


  • 人工知能と機械学習を投入するべきところ
  • 昔ながらの人間による定義で処理するべきところ


これらの違いが分からなければダメということですね。

「これからは人工知能の時代だ」という話は良く聞きますが、世の中の全てが人工知能に置き換え可能なわけではありません。
「どの辺りが人工知能の使い所なのか?」ということを理解した上で検討していきたいものです。

終わりに


こういう記事を書いていると、「そう言えば、アレって機械学習使えないのかな?」とか思う時があります。

例えばですね、最近「メルカリ」というフリマアプリが人気ですよね。
あれは不正出品が多発して治安が問題になっているとニュースになっています。

メルカリ社員が24時間体制で不正出品を監視しているそうですが、「機械学習で不正出品の自動検知したり出来ないのかな?」と思うところです。
迷惑メールフィルタリングが出来るのだから、不正出品フィルタリングも出来ると思うのです。

実際に機能を実現するとなったら大変でしょうし、もしかしたら既にメルカリ内部では動き出しているのかもしれません。

でも、こう考えるだけでも、色々と可能性がありそうな技術ですよね。

さて、機械学習についてイメージが沸いてきたところで、そろそろ「具体的にどう実現したら良いの?」という所に迫っていきたいと思います。

2017年11月4日土曜日

【人工知能調査】始めに

株式会社ジェニシス 技術開発事業部の遠藤 太志郎(Tacy)です。

業務多忙によりしばらく連載を停止していましたが、そろそろ復活していきたいと思います。
時間も経ってしまっているので、新しいテーマで仕切り直しです。

テーマは人工知能(AI)


最近、人工知能がブームでよく話題を耳にしますよね。
人工知能という概念自体は私が生まれる前からありました。
それが最近ブームになりつつあるのは、もちろん鉄腕アトムのレベルには達しないものの、ある程度の成果、使い道が生じる程度にまで実現性が生まれてきたからでしょう。

その為か、私は人工知能という言葉はバズワード化してきていると思っています。

人工知能とそうでないもの


そもそも「人工知能」という言葉自体、特に明確な線引きがあるわけでは無いのでバズワード化するのも無理は無いと思いますが、
それでも世の中の人は「人工知能」と「そうでないもの」を分けて表現していると思います。

だって、
  • 人が近付くと自動ドアが開く。⇒人工知能ではない。
  • 写真に写っている人の顔を自動認証する。⇒人工知能だ!!
みたいな感覚、あると思います。
どっちも自動認証していることには変わらんと思うのですが、不思議ですよね。

他には、
  • 格闘ゲームでコンピュータが対戦相手を務める。⇒人工知能ではない。
  • コンピュータがプロ棋士に将棋で勝った!!⇒人工知能の時代だ!!
とか。

恐らく「何か知らんが凄いもの」と「そうでないもの」くらいの感覚かと……。

しかし、私はこの「何か知らんが」の部分に鍵があると思います。

人工知能とは


昔を思い出すと、私が最初に「人工知能って凄い!!」と思ったのは子供の頃、ドラゴンクエスト4でした。
ドラクエは3以前はプレイヤーがコマンド入力で戦っていましたが、4以降はコンピュータが自動戦闘してくれるのです。
しかもドラクエ4の場合、戦闘を重ねる毎に学習して頭が良くなっていくという機能まで付いていました。
これを「人工知能」と称して大々的に宣伝を打っていました。

後に知ったのですが、ドラクエ4のアレは、実は人工知能でも何でも無いんですよ。

「戦闘するとランダムでフラグが解禁される。だから何度も戦っているとフラグが全て解禁されて頭が良くなったように見える」

これだけ。単なるフラグ処理です。
ファミコンなんだからその程度が関の山なのは当然ですが、当時子供だった私は本気で人工知能と信じ込んでいました。

しかし、ここに一つの真理があります。

  • 中身がどうだろうと、人工知能っぽい挙動であれば、人はそれを人工知能と思う。

それが人工知能かどうかなんて、外から見ても分かりゃしない。

その人がそう思うかどうかの世界です。

では、何をもって人はそれを「人工知能っぽい」と思うか?
私の考えはコレです。

  • 学習機能を有している。

これが核心だと思います。

自動学習機能


この視点で冒頭に戻ってみましょう。

自動ドア、格闘ゲーム
これらは人が近付くと自動でドアが開いたり、パンチを打つと防御してきたりするわけですが、それは事前に開発者がプログラミングしたものです。
なので、能力はずっと固定。自動で能力が上がったりすることはありません。
「この自動ドア、昔は開かなかったけど、最近調子良くなったね」なんてことは起きません。

 ⇒人工知能ではない。

顔自動認証、将棋
将棋の方が分かり易いと思いますが、これらはサンプルとなる膨大な過去データを内部に持っていて、その膨大な過去データをサーチして経験則的に挙動を決めてきます。
だから内部データが増えるほど頭が良くなるという学習機能を有している、と言えます。

 ⇒人工知能である。


そうして学習機能して得た成果は「マッチング条件」の精度に反映されてきます。

  • 開発者が自分でマッチング条件をプログラミングしているものは、人工知能ではない。
  • 機械がマッチング条件を自動生成しているものは、人工知能である。

こう定義すると、人工知能というあやふやな言葉も、ビジネスの世界で要望されているものの本質に近付いてくるのではないでしょうか?

終わりに


そう考えると、人工知能の意義というものが見えてきましたね。
人工知能とは、結局はツールの一種、手段の一種でしか無くて、
開発者が人工知能に望んでいるのは、要するにこういうこと。


人間が自力でプログラミングし切れないマッチング条件を、コンピュータが代行して自動生成して欲しい!!


人工知能が「何か知らんが凄いもの」と見える理由はココ、人間でもよく分からんロジックを委託しているからなんですね。

そして、最終目的である「自動生成」に到達する為の過程として存在するものが「学習機能」なわけです。

となると、

どうやってコンピュータに学習機能を持たせるか?

ということが重要になってきます。
そういった時に登場するのが、こちらも最近話題の「機械学習(machine learning)」です。

「人工知能」と「機械学習」の関連性が見えてきたところで、次回に続きます。