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について調査していきたいと思います。

0 件のコメント:

コメントを投稿