fastai Lesson1

無料でDeep learningが学べるというfast.ai.

Lesson1はFast.aiの全体像や環境設定・Deep learningを手軽に試せるチュートリアルになっています。

以降、タイムラインごとに動画の要約をします。

サーバーの設定が超簡単! crestle!

00:04:11 crestle.comでGPUを借りて高速で処理してみる

日本でこの講義を受けるのであれば、GPUはcrestleがいいと思います。

理由は、paperspaceが日本で使えない(公開時点では)のと、AWSだと設定が難しいのと値段を心配しなければいけないのに対し、

crestleは設定はほぼ不要です!
また、値段も時間ごとの課金なので、初心者でAWS使いすぎて多額の請求が来るという事態も避けれます。私は多額の請求きました(泣)

fastaiの進め方はボトムアップ式 手を動かしながら学習

crestleを立ち上げれたら、物は試し。とりあえず、コードを動かしていきます。動画内ではこれをボトムアップ式と呼んでおり、数学やプログラミング(Linaxなど)を全てを学んでいくトップダウン式は莫大な時間がかかるので、この講座ではボトムアップつまり実際に動かしながらあとから、具体的に詰めていこうという方針です。

なので、何をやっているか全て分かる必要はありません

この勉強法は大学の教育でも使われてほしいですねといってました。そのとおりです。大学の講義は何のためにやってるかわかんなくなります(筆者は経済学部でいやいや経済学をやってる身なのでよくわかります)プログラミングなんかとくに。全部わかってる必要ないですからね。全部わかろうとすれば、C言語からやらないといけなくなるし。Pythonは1行でいろんな事できますし。あるとき、教授は一から参考書をやろうと助言し、インターンではとりあえず実務を、目の前のタスクを死ぬ気で乗り越えていこうかと助言され、どっちが学習効率いいかと言うと後者のとりあえず手を動かす方が私には合いました。ボトムアップがいいよね...というオチのない話。閑話休題

Dogs vs Cats

とりあえずコードを動かしてみます。Crestleでfastaiのlesson1.ipynbを開きます。

  • 00:12:30 ‘Dogs vs Cats’をJupyterで動かしながら見ていく
# 自動で読み込み、インラインでかけるように、全てのノートブックでこれらのコードを書きます
%reload_ext autoreload
%autoreload 2
%matplotlib inline
  • 事前に用意されたライブラリを読み込みます。ありがたいです。
from fastai.imports import *
from fastai.transforms import *
from fastai.conv_learner import *
from fastai.model import *
from fastai.dataset import *
from fastai.sgdr import *
from fastai.plots import *
  • 使いたいデータにパスを通します
PATH = "data/dogscats/"
  • sz は早く処理するために画像をリサイズすることを可能にする単位
    あとのたくさんのコースで扱いますが、今は224とします。
sz=224
  • Crestleを使う場合は以下のコードのコメントアウトを外します。
# os.makedirs('data/dogscats/models', exist_ok=True)

# !ln -s /datasets/fast.ai/dogscats/train {PATH}
# !ln -s /datasets/fast.ai/dogscats/test {PATH}
# !ln -s /datasets/fast.ai/dogscats/valid {PATH}

# os.makedirs('/cache/tmp', exist_ok=True)
# !ln -fs /cache/tmp {PATH}

実際に使う写真を確かめてみる

  • 画像がどうやって処理されていくかを見ていきます

img[:4,:4]は色(赤・青・黄)の値を示してます。これからオリジナルで画像を認識していく上で必要なないようなので目を通しておきましょう。

たった3行でDeep learningを体感してみる

  • 00:20:20 とりあえず体験してみる
     ‘resnet34’ というアーキテクチャと epochと accuracy on validation setを実行してみます.これも後ほど詳しく見ます。
# Uncomment the below if you need to reset your precomputed activations
shutil.rmtree(f'{PATH}tmp', ignore_errors=True)
  • この3行を理解するために詳しくはLesson2で見ていきますが、とりあえず動かしてみます
arch=resnet34
data = ImageClassifierData.from_paths(PATH, tfms=tfms_from_model(arch, sz))
learn = ConvLearner.pretrained(arch, data, precompute=True)
learn.fit(0.01, 2)

私はCrestleで実行してみて結構2:36->00:12->00:16秒と意外と時間かかりました。Pepaerspaceはもっと早いようですが。

結果を分析してみる

  • 00:24:11 lesson1.ipynbでディープラーニングの結果を見ていきます

自信のあるものがDog:1,Cat:0なので、0.5が判断が曖昧なものです。この曖昧なものや自信あるのに間違っている画像を減らすべくLesson2以降で学んでいきます!

fast.aiの全体像

  • コンピュータビジョンと呼ばれる画像認識をKaggleで実際に提出してみて、そのあとRNNで自然言語処理を行います。その後に協調フィルタリングによるレコメンドシステムを行い、その後、ResNetでまた画像認識に戻ってきます。

この講義は一周してみてくださいと作者のジェレミーは言っています。一周後によく復習してくださいと。まあ1周するのにも1講義10時間はかかるのですが(笑)AIって騒がれてるけど、現実は厳しいようです(泣)諦めないことが最大の鍵になりそうです。

そもそもDeep learningとは?機械学習の一種?

  • 00:44:11 そもそもDeep learningとは?

世間では囲碁で機会が人間に勝ったり、ガンを見つけたりして一躍有名になりました。Googleは2014年から力を入れてやっていたようです。

深層学習の最も原理的な表現保証 ポイントは3つ

  • 00:49:11 深層学習の最も原理的な表現保証

深層学習を可能たらしめているポイントは3つです。

  1. 無限微分可能関数(Infinitely flexible function)
  2. 万能なパラメータフィッティング
  3. 高速でスケーラブル

1.ニューラルネットワーク(Infinitely flexible function)

ニューラルネットの発展によってより深く学習が可能になりました。

2.万能なパラメータフィッティング(最急降下法)

パラメータを最小化するには勾配法が最適です。過学習には気をつけないといけませんが。

3.高速でスケーラブル(GPUとニューラルネットワーク)

GPUの発展により値段も下がり、今まで1日かかっていた深層学習が一瞬で終わったりすることが実はAIブームを作り出したということです。

Deep Leaningの実際の例

  • 00:58:11 Deep Leaningの具体例
    course in ML1 (Machine Learning 1)
    Deep learningがどのようなビジネスに使えるかを紹介しています
  1. 不正利用検知
  2. ユーザーのレテンション(関係維持)/チャーン(乗り換え客)の予測
  3. 優先顧客の見極め
  4. 売上の予測
  5. レコメンドシステム
  6. コールセンターの効率化
  7. プロダクト失敗の予測
  8. 広告最適化
  9. ストアのレイアウト
  10. クレディットのリスク回避
  11. 履歴書のスクリーニング
  12. 社内のスケジュール管理
  13. 値段の最適化
  14. マネーロンダリングの回避
  15. 実店舗の場所を最適化

ほかにもいろいろできそうです。私は心の予測をAIでしてみたいです。AIは今後インフラとなることは間違いないので、Fastaiもがんばって最後まで続けていきたいところです。

  • 01:02:11 非線形モデル(シグモイド・Relu・SGD関数)

畳み込みネットワークのイメージ

私は参考書でやってたのですが、数式とコードだけではなんとなくイメージがつきにくいんですね。

そのあと、この動画をみてCNNのイメージがはっきりできるようになり頭がクリアになりました。最初からこの動画を見ていたかったと思うくらいに。

シグモイドの重みとバイアス付のイメージ

これまた、初学者のときに見ておけば、ニューラルネットにおける重みとバイアスのイメージもすんなりできたであろう良いサイトです。

最急降下法のイメージ

この動画もしかり、学習回数を重ねるにつれ、回帰直線が実測値に近づいていくというイメージをしやすい動画です。Jupyterで動画表示もできるようです。驚きの連続です。後ほどやってみます。

勾配法とLearning rateの説明

イメージができたところで、理論的な話がさらっとでてきます。

ここではチュートリアルなのでさらっと流れましたが

要約をすると、

Xn+1 = Xn + 傾き* l(学習率)

というのを頭に入れておけばここではOKかな

先程、実行したLesson1のコード(CNN)を図解

  • 01:08:20 CNNの理論を図解してみていく
  • lr_findというライブラリをFastaiは用意している。これは100%を超えるまえに処理を止める機能がある。

上記のグラフでは、10^-2 つまり、0.01あたりで最小値を出しており、この値をLearning rate(学習率)としている。くわしくは後ほど見ていくそうだ。

エポック

ここではエポックを3に増やしてみて、評価値が下がっていることを確認している。

実際に,右から3つ目の値が評価値なのですが

0.98975

0.99219

0.98975

と2回目の方が3回目よりよい評価となっており、これを最適化する方法を今後見ていくそう。

Jupyter Notebookの便利な機能

  • 01:21:30 Jupyter Notebookの便利な機能

Jupyterの3つの便利な機能

  • tab:予測変換
  • shift + tab :ドキュメントが見れる 2回連続ですると詳細が見れる
  • ?:ドキュメントの詳細がポップアップする
  • ??:リソースが表示される

こんな便利機能があるんですね。Jupyter様様です。ほんとに(泣)GoやSolidityやJSなど他の言語を使うときによく思うのですが、Jupyterほど書きやすくて高機能なエディタはないと常日頃思っております。意外と知らなかった機能がたくさんあったのでJupyterをもっと使いこなしてみたい。

Fastaiもそういったこまかい技まで教えてくれる超実践的でドキュメントもわかりやすい神教材だと思います!これが無料…

Lesson1まとめ

こんかいはチュートリアルなので、理論的なことは私も飛ばして書きました。

要点としては

  • crestleでGPUサーバーが楽に!
  • CNN(画像認識)を3行で試しに動かしてみた 詳細は次の章で!
  • そもそもFast.aiの全体像と進め方
  • Deep learningがなぜスゴイのか 3Point (ニューラルネットワーク・勾配法・GPUと高速処理)によって実現が可能に
  • CNN(畳み込みネットワーク)のチュートリアル(CNNの仕組み・シグモイド・勾配法の動画によるイメージ付け)
  • Lesson2への布石(学習率やエポックの説明をさっと行い、なぜこれらを指定するのかに注意を向ける)

といった感じでしょうか。少々荒い解説ですが、本題は次章からなので、あまりチュートリアルに時間をさくもの違うと思うので、Lesson1はこれにて。

Lesson2からはもっとコードメインの解説をしていくことになりそうです。

最後に個人的に言いたいことは、fastaiはわかりやすくて詳しいドキュメントあるし、無料だし、初心者でも分かるように教えてくれるので最高です。

2017verのfastaiではAWSの処理が遅くて高額なのと所々おこるエラーの対処でうまく進まなかったのですが、2018にアップデートされ、丁度やりたかったPytorchも学べるということで!
また、ドキュメントの質もアップグレードしてます。日に日に急速な進化を続けるAI分野ですが、やるならfastai一択だと思います!Couピーraも有名ですが、言語はOctaveだっけ?あれは私も1万かけてやろうとおもって挫折してますし、機械学習より深層学習、なによりPythonでやりたいなという気持ちがあったので、そんなときに探しまわった結果Fastaiさんと運命的な出会いで(笑)余談がすごいですが、結構疲れますね。量が多くて。

Lesson2続きます!挫折しないようにがんばります。

Like what you read? Give Okazawa Ryusuke a round of applause.

From a quick cheer to a standing ovation, clap to show how much you enjoyed this story.