継続は力なり

タイトル通り定期的な更新を心掛けるブログです。

AI 技術の基礎から勉強する「秒速DEEP LEARNING -Colaboratoryで入門〜応用ひとっ飛び-」を読んだ

タダです。

機械学習ディープラーニング(深層学習)の技術に興味があり、勉強をしています。

今回は、そんな僕のような方々にぴったりの書籍を紹介します。

それは、「秒速DEEP LEARNING -Colaboratoryで入門〜応用ひとっ飛び-(以下、本書)」です。

本書は、@tomo_makes さん執筆で、技術書展5で配布されていたのですが、下記サイトでも購入可能です。 booth.pm

読了後、ご本人からリプライいただきまして情報が古い部分があるとのことなので参考記事を教えていただきました。

参考記事 qiita.com

更に、商用本としても発刊予定とのことです。おめでとうございます!

今回は、本書を通じて学べることを、特にコードを記述する部分にフォーカスしながらまとめていきます。

本書のターゲット読者

まず、本書の読書層として以下のように列挙されています。 AI の領域に興味をもった僕にも合いそうです。

  • 人工知能/深層学習で、今日、数年後何がどこまでできるのか、色々な人、メディアで言っていることが違い、全体像が掴めない
  • 自分で「理論や数式からを一から学ぶ」のはハードルも高い
  • ハンズオンで試すも環境構築で行き詰まった
  • MNIST 手書き数字認識、犬猫や Imagenet の学習済モデルを用いた画像分類とお決まりのものは多いが、その先やそれ以外のドメインとなると情報がない
  • そもそも手元の GPU がないと、やれることが限られる
  • データ分析コンペに出てみたいが、どこから手をつけていいかわからない
  • 最先端の論文がオープンアクセスとはいえ、技術、英語両面で現実的でない

本書では、論文や数式も出てこないため苦手意識ある方も読みやすいかと思います。

本書の構成

次に、大きな章立てですが次のようになっています。

  • 第I部 準備運動
  • 第II部 機械学習とは何か
  • 第III部 機械学習を使う様子を掴む
  • 第IV部 Colab でいろいろ動かしてみる

本書で学べること

本書を通じて学べることは以下のものになります。

  • 今後の学習のための3つの地図について
  • AI 関連の各種事例や情報収集の方法
  • Google Colaboratory」によるサンプルコードを使った機械学習、深層学習(ディープラーニング)の取り組み方の紹介
    • Validation と optimizer、学習率の変更などパラメーターチューニング
    • データ分析コンペへの取り組み方( SIGNATE を例に)
  • Google Colaboratory」で様々な分析の実践
    • Google Colaboratory」の利用の Tips

3つの地図を持つこと

本書では、読了後にさらに勉強を続けていくための「3つの地図」を持つことが提示されます。

ここでいう「3つの地図」とは、次の通りです。

  1. 深層学習(ディープラーニング)を学ぶ道筋 : 深層学習(ディープラーニング)を学習したいモチベーションを維持し、学び続けるための Tips の紹介
  2. 機械学習の活用の流れ : 機械学習システムを構築していくためのフローの紹介
  3. 深層学習(ディープラーニング)モデルについて : 深層学習(ディープラーニング)モデルを構成するためのフローの紹介

AI 関連の各種事例

各種事例からどのような技術の活用がなされているかを学べます。

トピックとして次の領域の説明がされています。様々な事例が載っており、興味を惹かれましたので、興味のある方は購入を検討ください。

  • 数値系
  • 言語系
  • 画像/映像系
  • 音声/音楽系
  • 強化学習

関連記事

僕が個人的に面白いと思った取り組みは、社内勉強会の資料でも紹介させていただきました。 sadayoshi-tada.hatenablog.com

情報収集の方法

技術手法や近年の事例を学ぶだけでは、学習の次の一歩が踏み出しにくいです。

本書では、情報収集の方法も解説されており、フォローすべきメディアと学会、発表会などカンファレンスの情報が載っています。

すぐにでも始められそうなところを簡単に紹介すると、 @piqcy さんの週刊メーリングリストへの登録です。 www.getrevue.co

基本的には無料ですが、サポート料を支援できる方はこちらからできます。 www.getrevue.co

また、学会関連の情報として産総研の神嶌さんのサイトが紹介されてます。 www.kamishima.net

現在、様々な AI メディアが出回っており、どこから情報を浚うといいかは人それぞれだと思います。

このようなノウハウを共有し、学習を後押しをしてくださる @tomo_makes さんの配慮に感謝ですね。

Google Colaboratory でのサンプルコードを使った分析

本書のコードの実行環境は、「Google Colaboratory」になります。

無料かつ環境構築不要で、機械学習開発環境を手に入れられるため利用します。

特に、第III部からのコードを実際に扱うところで活用します。

関連記事

なお、「Google Colaboratory」については下記の記事でも試した結果を載せています。 sadayoshi-tada.hatenablog.com

パラメーターチューニングの実践

MNIST(手書き数字)データセットを使って、「Google Colaboratory」で開発を行なっていきます。

コードとしては、 Tensorflow のサンプルコードを使います。 www.tensorflow.org

import tensorflow as tf
mnist = tf.keras.datasets.mnist

(x_train, y_train),(x_test, y_test) = mnist.load_data()
x_train, x_test = x_train / 255.0, x_test / 255.0

model = tf.keras.models.Sequential([
  tf.keras.layers.Flatten(input_shape=(28, 28)),
  tf.keras.layers.Dense(512, activation=tf.nn.relu),
  tf.keras.layers.Dropout(0.2),
  tf.keras.layers.Dense(10, activation=tf.nn.softmax)
])
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])

model.fit(x_train, y_train, epochs=5)
model.evaluate(x_test, y_test)

コードをそのまま実行すると、「Epoch(以下、エポック)」の各処理で13秒から14秒くらいで約98%ほどの精度が得られました。

ここでやっているのは、以下のことです。

  • 60,000枚の学習用の手書き数字画像を、5エポックかけて学習
  • 10,000枚のテスト用の手書き数字画像を、正しく分類できるか試したら、約98%の精度が得られた

f:id:sadayoshi_tada:20190327070118p:plain

参考記事

なおエポックとは、「一つの訓練データを何回繰り返して学習させるか」の数のことです。

深層学習(ディープラーニング)では、訓練データを何回も繰り返していくことでパラメータをうまく学習する必要があります。

そのために、汎化可能なモデルを作るために適切なエポック数を設定していきます。 www.st-hakky-blog.com

パフォーマンスが高い実行環境を変更

さて、ここからいろいろと「Google Colaboratory」でチューニングを行なっていきます。

まず、実行環境を GPU 環境に変更します。

ランタイムのタイプの変更」から「ハードウェア アクセラレータ」を GPU に変更します。

f:id:sadayoshi_tada:20190327071253p:plain f:id:sadayoshi_tada:20190327072143p:plain

そして、再度コードを実行してみると、エポックの処理時間が8~9秒で処理されています。さすが、 GPU という感想ですね、早い!

パラメーターチューニングの実践(Validation と optimizer、学習率の変更)

Validation を導入することで、機械学習過学習(学習モデルを汎化させるために必要)をさけ、精度の向上が期待できます。

model.fit(x_train, y_train, validation_split=0.1, epochs=5)

Validation を使うことで学習モデルの評価の要素が増えました。 f:id:sadayoshi_tada:20190327074240p:plain

次に、 optimizer を Adam から SGD に変更します。アルゴリズムの変更ですね。

参考記事

qiita.com

モデルを再度作ってみると精度が落ちてしまいました。 f:id:sadayoshi_tada:20190327080335p:plain

エポック数をあげてみます。エポック数をあげると、精度が戻ってきました。 optimizer はその種類によって、得手不得手があることがわかります。 f:id:sadayoshi_tada:20190327080544p:plain

最後に、学習率を変更してみます。

学習率とは、機械学習の最適化においてどのくらい値を動かすかというパラメーターです。

学習率を大きくしすぎると発散し、小さくしすぎると収束まで遅くなるので適切な値を決める必要になります。

一般には1以下にして、「0.1」が適切な値のようです。

極端に、学習率を0.001にした時と10に変動して精度を確認しました。精度が大きく外れているので、学習率を大きすぎても小さすぎても不適切なのを実感できます。

0.001の場合 f:id:sadayoshi_tada:20190327185715p:plain

0.1の場合 f:id:sadayoshi_tada:20190327220428p:plain

10の場合 f:id:sadayoshi_tada:20190327185729p:plain

Google Colaboratory で様々な分析の実践

さらに、分析の実践ということで大きく次の2点の紹介がされています。

東大 松尾研究室の講座

データ分析のための勉強にあたり、東大 松尾研究室の「GCIデータサイエンティスト育成講座」が紹介されています。

こちらの講座で教材で提供されているのはipyファイルは「Google Colaboratory」で読み込ませて教科書のように読み進められます。

章立てとしては次のようになっており、分析を行うのは3章以降で話が出て来ます。それ以外もデータサイエンスに必要な技術が列挙されているため僕自身勉強していきます。

  • 第1章 JupyterNoteBookの使い方とPythonの基礎
  • 第2章 Numpy・Scipy・Pandas・Matplotlibの基礎
  • 第3章 実際のデータを使った記述統計学と回帰分析(NumpyやPandas等の利用)
  • 第4章 確率統計の基礎
  • 第5章 NumpyやScipy
  • 第6章 Pandasを使ったテクニックの紹介
  • 第7章 データの可視化(Matplotlib)について
  • 第8章 データベースとSQLの基礎スキル
  • 第9章 SQLの応用的な処理
  • 第10章 MongoDBのNoSQLについて
  • 第11章 教師あり学習
  • 第12章 教師なし学習
  • 第13章 機械学習で学んだモデリングの検証やチューニング方法
  • 第14章 Pythonの高速化や深層学習入門、Spark(Pyspark)の紹介
  • 第15章 総合問題

なお、こちらの講座は書籍化もされました。

Seedbank

また、各種事例で列挙した分野ごとのデータ分析の実践として、以下の Seedbank のデータを使って行います。 research.google.com

Seedbank は 「Google Colaboratory」にコードを展開して、コードもいじれるので興味がある分野を検索して試すことができます。

技術書展6

@tomo_makes さんは技術書展6でも @kirikei さんとの共著で本を販売されるようで、僕も買いたいなと思っています。

techbookfest.org

気になる方は技術書展6を要チェックです!

techbookfest.org

まとめ

本書は次の要望を持っている人に適した本だと思いましたので、興味がある方は購入を検討されてみることをオススメします!

  • AI の技術分野に興味はあるけどどう学んでいくかのパスが不明確な状態に悩んでいる
  • 手元の作業環境は汚さず、すぐにでも機械学習ディープラーニングのコードを書きたい
  • 各種事例、情報の収集方法に触れたい