はじめての深層学習プログラミング


はじめての深層学習(ディープラーニング)プログラミング

はじめての深層学習(ディープラーニング)プログラミング
著者:清水 亮

内容紹介
本書はプログラマが理解しやすいソースコードをベースに、実際に動作させながら、いま注目の深層学習のしくみや機械学習の基礎を解説します。深層学習のフレームワークには「Chainer」「TensorFlow」「Deel」を用い、画像とテキストを学習素材としたPythonによるコーディングを行いますが、初歩的なものであれば意外と簡単に書けることに驚くかもしれません。また、学習効果がうまく現れない場合の対処など、深層学習をはじめる最初のガイドブックとして最適な一冊です。

出版社からのコメント
本書は、わずか11行のプログラム解説からはじまります。
たったそれだけで深層学習を体験できるのが、いまの状況です。
深層学習の魅力にはまり、自らコードを書いて習得した著者が、Deel、Chainer、TensorFlowといった深層学習用フレームワークを使い、畳込みニューラルネットワークやリカレントニューラルネットワークのしくみをコードを読み解きながら解説します。

ニューラルネットワークの学習には、画像と自然言語を対象に、GUIツール(CSLAIER)を使って行う方法を紹介。
さらに後半では、AlphaGoにも使われた深層強化学習、ファインチューニングの手法、深層化の本命と目されているオートエンコーダについても知ることができます。

●本書サポートWebサイト
http://gihyo.jp/book/2017/978-4-7741-8534-7/support

★読書前のaffirmation!
[きっかけ・経緯] 図書館で手に取って、一通りのチェックは必要かと思いまして・・・。
[目的・質問] 深層学習について、ざっと網羅してそうでしたので、
[分類] 007.1:情報理論, 数字(情報科学)

先にも投稿しましたが、こちらのサンプルプログラムを動かすためには、UbuntuというLinuxディストリビューションで環境を整えないといけないのですが、WIndows環境で行うには大変な状況です。また、画像を扱うのにVRAMがNVIDIA(エヌビディア)であるという前提なんですが、私のLENOVO X260はIntelのものなので、そちらも設定がなかなかうまくいかずで断念いたしました。

プログラムを実際に実行して行うのは難しかったのですが、内容だけはトレースしてきたいと思います。

現在、最も成果を扱いやすいとされているのは畳込みニューラルネットワークです。しかし畳込みニューラルネットワークを自分の想い通りに教育するには、まず膨大な学習データが必要になります。画像分類という分野では、たとえばImageNetというデータセットが全世界のインターネット上にアップロードされた画像データを片っ端から分類しています。このデータベースは1400万枚以上、2万種類と言われています。(p.31)
深層学習の分野では、よく世界規模の画像認識コンテスト(ILSVRC、ImageNet Large Scale Visual Recognition Challenge)での成果が引き合いに出されます。ヒントン(Geoffrey E. Hinton)のAlexNetもGoogleが開発したGoogLeNetもILSVRCでのスコアを基準として性能が語られています。(p.31)

さて、実際にここからプログラムを使ってのデモになるのですが、数値演算用ライブラリのnumpyと、ここでは主役となるchainerを使ったニューラルネットワークのプログラムが紹介されています。

畳込みニューラルネットワークが普通のネットワークとどう違うのか。それを理解するために、MNISTと呼ばれる練習問題を使った画像認識プログラムで比較してみましょう。MNISTは、深層学習がブームになる以前から、「機械学習のHello World」と呼ばれ、親しまれてきた簡単な練習問題です。(p.65)
畳込みニューラルネットワークは、その名の通り畳込み(コンボリュ―ション、Convolution)を行って情報を圧縮していくネットワークです。(p.71)
私たちは経験し、経験から学び、また、経験から次の答えを導き出します。単なる関数を超えた、経験を持った人工知能はどうすれば実現可能なのでしょうか。それに挑むのがリカレントニューラルネットワーク(RNN、Recurrent neural network)と呼ばれる一連の研究です。・・・リカレントニューラルネットワークは、ニューラルネットワークの層の一方通行ではなく一部循環させ、内部状態を持たせることで、同じ質問に時と場合によって違う答えを出すニューラルネットワークです。リカレントニューラルネットワークの中でも、いまのところ最も扱いやすいのはLSTM(Long SHort Term Memory)という方式です。(pp.86-87)

つぎにGoogleのTensorFlowです。

TensorFlowはGoogleが2015年に発表し、あっという間に世界の話題をさらいました。・・・Chainerに比べるとTensorFlowの人気は不動のもので、既に無数のサンプルがTensorFlow向けに作られています。また、Googleが大規模な分散学習に対応したDistributed TensorFlowを発表したことでさらに注目を集めました。TensorFlowの特徴を簡単にまとめると以下のようになります。

  • 深層学習の最先端企業であるGoogleが開発
  • 全ての要素をテンソルとして扱う
  • 数式を定義することでテンソルの流れ(フロー)を定義
  • セッションという単位で計算リソースを割り振れる
  • GPUとCPUで異なるビルドを使用(Chainerに比べるとやや面倒くさい)
  • セッション単位で処理が分割できるため、分散しやすい

Chainerに比べると計算式がむき出しな分、煩雑に感じてしまいますが、それでもTensorFlowの持つ、強力な分散学習機能と圧倒的な学習速度は魅力です。(pp.106-107)

テンソルとは、単独の値を意味するスカラー、複数の値のまとまりを意味するベクトル、複数のベクトルのまとまりを意味する行列、そして複数の行列をまとめたもの、それを一般化するための概念なのです。要するにざっくり簡単に言えば、単なる多次元配列のことなのです。(p.108)

本当にこの分野は日進月歩です。技術をどう生かせるか・・・私自身も技術者でもあり、研究者でもありますが、何よりもビジネスパーソンであり、どうビジネス領域で深層学習が役立てることができるかということが一番のテーマなので、そこは外さないように気を付けながら、テクノロジーの進化を追いかけていきたいと思います。

(気に入ったら投票をお願いします!)

にほんブログ村 経営ブログへ
にほんブログ村

 

 

コメントを残す

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください