TensorFlowで始める深層学習 (1)そもそも何が出来るの?

 こんにちは!かわしま@食を楽しむエンジニアです。

 週末、以前から気になっていた秋葉原の老舗とんかつ店丸五(まるご)へ。特ロースかつにセットメニュー(ご飯/赤出汁/お新香付)を付けて二千円少々。ご飯お代わり出来ます。脂身好きなら迷わずロースですよね v

 こちらのお店、かなり並ぶことになりますが、特と言う名に恥じない肉の厚みに、甘い脂身の美味しさあふれています!! 

f:id:gnavi-kawashima:20160117224849j:plainf:id:gnavi-kawashima:20160121164616j:plain   f:id:gnavi-kawashima:20160117224856j:plain

 

 それでは、これから 何回かに分けて、深層学習に関して書いていきたいと思います。

 どうせなら、旬なアーキテクチャであるTensorFlowを使って、深層学習の理解を深められたらと思います。自分自身もこのブログを通して勉強する身です。

今回は、TensorFlowで深層学習を始めるのに、何ができるの?何が必要になってくるの?どう進めて行くの?等を概観して見ましょう。

 最初に関連する事をこまごまと。。。

 

深層学習(Deep Learning)

 多層のニューラルネットワークを利用した機械学習のことですね。観測するデータに内在する本質的構造を捉えた情報表現を、データの学習によって獲得できます。これが、人間の脳の構造をソフトウェア的に模倣しているので、人工知能の分野で大いに期待されています。

深層学習に関しての理論的な面を掘り下げたい方は下記の書籍があります。

こちらお勧めです。

 

TensorFlow

 2015年11月にgoogleが、Apache 2.0のライセンス下でオープンソースソフトウェアとして公開した、機械学習向けのライブラリーですね。

下記にTensorFlowの概要が記載されています。

個人的に気になった点をピックアップすると

  • 異なるデバイス、システム上で、ほとんど変更なしに実行できる
  • Deep Learning用訓練と推論のアルゴリズムに加え、多種多様なアルゴリズムが使える
  • googleの色々なプロダクトに使われている
  • TensorFlowの計算は、処理状態を維持したデータフロー・グラフで表現される
  • コア・モデルのデータフロー・グラフの複製や同時実行を通して、並列処理が可能

   ※マルチデバイスでの並列処理は、現行(ver. 0.6.0)では対応されていません

 

開発環境

 Mac OS かUbuntuになります。手順は下記サイト参照。注意点としては、学習フェーズに置いて、膨大な時間とメモリーが必要になります。業務上必要なら、早めに上司に相談することをお勧めします。深層学習では避けられない、我慢するだけ時間を無駄にします。

 

開発言語

  Tensorflowは、C++とPythonに対応しています。業務都合でもない限り、Pythonで良いのではと思います。Pythonは、豊富な組み込みデータ型と分かり易い構文、書き易く読み易い、少ないコードで多くのことを実現できるのが特徴です。

  Pythonコードのスタイルガイドです。自動チェック等が可能です。慣れてきたら、開発環境も色々考慮すれば宜しいかと。

  NumpyはPythonの拡張モジュールです。高速に行列演算できます。深層学習はひたすら行列の計算を繰り返します。ですから行列計算を高速処理できることは重要です。

 

その他 

 深く理解しようとすると英語と数学が避けて通れないと思います。苦手な方は、必要性に迫られたら適時出来る範囲で頑張りましょう。機械学習で使う数学なら、線形代数微分積分、統計辺りです。簡単な本で良いので最尤推定法とベイズ統計の本を別途読んでおくと理解が深まるのではと思います。

 

それでは、今回の本題。

深層学習で、そもそも何ができるのか?

TensorFlowのライブラリの中を見てみましょう。


サンプルコード
 githubにサンプルが色々あります。tensorflow/tensorflow/models の下に3つのフォルダに分かれています。

imageフォルダには

  • mnist : 手書き数字10種類の画像認識
  • cifar10 : 一般物体10種類の画像認識。複数のGPUを利用
  • imagenet : 一般物体1000種類の画像認識
  • Alexnet : ダミーデータを生成してベンチマーク

embeddingフォルダには

  • word2vec:各単語の関係をベクトルで定量化して表現

rnnフォルダには

  • rnn:過去の文脈から次にどの単語がどのくらいの確率で出てくるか
  • seq2seq :英語からフランス語へ機械翻訳

 

サンプルコードからは画像認識機械翻訳が出来るのが分かります。

深層学習で何が出来るのかは分かって来たけど、

TensorFlowで深層学習を始めるには、どこから始めれば良いのか?

 TensorFlowには、非常に良く出来ているチュートリアルがあります。どのような項目があるのか、見てみましょう。

 

チュートリアル

  1. MNIST For ML Beginners
  2. Deep MNIST for Experts
  3. TensorFlow Mechanics 101
  4. Convolutional Neural Networks
  5. Vector Representations of Words
  6. Recurrent Neural Networks
  7. Sequence-to-Sequence Models
  8. Mandelbrot Set
  9. Partial Differential Equations
  10. MNIST Data Download
  11. Image Recognition
上記の内容を簡易に要約すると
  1. 機械学習が始めての方はここから
  2. 他のパッケージでDeep Learningに慣れていおり、MNISTも知っているならここから
  3. MNISTを使って、もう少し規模を大きくしてTensroFlowの仕組みを学ぶ
  4. CIFAR-10のデータセットを利用したCNNの入門コース
  5. 単語をベクトルで表現(word embeddingsとも言う)が有益なことを学ぶ。word2vecモデルを使う
  6. 再帰型ニューラルネット(RNN)の入門コース
  7. RNNのチュートリアルの次はこの機械翻訳。sequence-to-sequenceモデルを使う。英語とフランス語間の翻訳
  8. 機械学習とは無関係だが、TensorFlowでマンデルブロ集合を扱う
  9. こちらも機械学習とは無関係の例。雨粒のシュミレーション
  10. MNISTの手書き数字のダウンロードデータの詳細
  11. 物体認識の仕組み。ImageNet Challengeのデータとラベルのセットで学習したCNNを使ってみる

 

 TensorFlowのpaperに、mnistは、機械学習の「hello world」と書かれています。それでチュートリアルも最初の例はmnistを利用しているのですね。最初は順番通りに進めて慣れてきたら、興味のある箇所に進むのが良さそうです

 

補足)本ブログ内での用語を整理・補足しておきます

# 深層学習のアルゴリズム

  • CNN (Convolutional Neural Networks/畳み込みニューラルネットワーク): 主に画像認識に利用
  • RNN (Convolutional Neural Networks/再帰型ニューラルネットワーク): 主に自然言語処理に利用

# データセット

  • MNIST : 白黒手書き数字10種類(0 - 9)
  • CIFAR-10 : 一般物体10種類。飛行機、自動車、猫・・・
  • ImageNet : 一般物体数万種類。その中から1000種類利用した画像認識コンペ(ILSVRC)が有名

# CNNのネットワークモデル

  • LeNet-5 (1998) : CNNの基本的な形
  • AlexNet (ILSVRC’12) : 2012のコンペ(ILSVRC’12)で大差で優勝。Deep Learningが注目される契機に
  • Network in Network (ILSVRC’13) : 全結合層がなく、パラメータ数が少ない
  • GoogLeNet (ILSVRC’14) : Network in Network を参考。Inceptionはコードネーム
  • VGG (ILSVRC’14) : シンプルな構成

 

 

終わりに

 深層学習分野は研究が盛んです。今後も新しいネットワークモデルが生み出され、Tensorflowにも反映されて行くのではと思います。現時点で出来ることは少ないですが、その将来性には大いに期待しています。

 今回、TensorFlowを使って深層学習を勉強すると、何が出来るのか、それをするにはどの様に学習を進めて行くのか、目的と手段が少しでも俯瞰出来たら幸いです。

 

 TensorFlow, the TensorFlow logo and any related marks are trademarks of Google Inc.

 

お知らせ
ぐるなびでは一緒に働く仲間を募集しています。

 

かわしま

深層学習がメインのフルスタックエンジニア。
週末は子供の頃より続けている剣道でリフレッシュしてます。
美味しいお店探しも好きで、妻とよく食べ歩きをします。