Coursera DeepLearningコースを受けてみる

Background

Tetsuya Isogai
6 min readOct 6, 2020

仕事でDeepLearingを絡めたソリューション()を何かしら企画・開発することがちまちま発生する。Kubeflowを動かしてその場しのぎをしてきたものの、ここらでちゃんとアプリケーション側の特性をつかんでおきたいと思い物色していたところ、CourseraからDeepLearning.AI TensorFlow Developer Professional Certificateの案内が届いたためやってみることにした。要は初心者がMLを学んでいく過程について記載しているものです。

このコースについて

このコースは7日間無料で受講できる。7日を過ぎて受講したい場合、約5000円/月の受講料が必要なようだ。

コースの内容は全て英語で行われるが、動画の下部にスクリプトが表示され、日本語も選べる。最初英語で受けていたがMachine Learning特有の用語(例:勾配降下法とか)は私には理解しがたいので日本語を表示させることにした。
ビデオによる講義のほか、ハンズオン教材も用意されている。

環境の準備

このコースではTF2.0が推奨環境という事だったので事前に構築してあったKubeflow1.1上のJupyter Notebookを使ってTF2.0のNotebookをデプロイして利用することにする。コースの中ではGoogle Colaboratoryをつかうことになっているのでもちろんそれでも可能。

トレーニングの内容

コンセプト

序盤はDeep Learningのコンセプトについての説明。一般のプログラミングアルゴリズムとMLのアルゴリズムの違いについて説明がある。
通常のプログラミング(ここではTraditional Programming)は、
・入力:ルール、データ
・出力:答え
であるのに対し、Machine Learningでは
・入力:答え、データ
・出力:ルール
であるということ。
例として「人が何の動作をしているか認識するプログラム」を考えるとき、通常のプログラミングでは一つの指標(歩いている速度等)を条件に分類していくのに対して、MLでは動作している状態を最初に学習させ、そのルール(パターン)を導き出すという違いがある。
さらなる例として、y=2x-1という「ルール」を
あらかじめ知っている=従来のプログラミング=では「xが与えられたときにyを返す」のに対し、MLでは答え(x=-1, y=-3)を事前に与えられた上で方程式を探すもの、という事である。

Week-1 : Hands-on

Hands-on用のGithub Repositoryはこちら。
https://github.com/lmoroney/dlaicourse.git

Hello World的なプログラム
https://github.com/lmoroney/dlaicourse/blob/master/Course%201%20-%20Part%202%20-%20Lesson%202%20-%20Notebook.ipynb

このプログラムで使われているのは以下。
tensorflow.keras.Sequential:モデルの層を定義する関数
・keras.layers.Dense: 各々の総をConfigureする関数
・mode.comple: 学習プロセスの設定
・model.fit: モデルのトレーニング
・model.predict: モデルを使った推論

Quiz

セクションの終りにはQuizがあり、80%以上正当しないと次に進めない。
用語についての確認もあるのでしっかり理解しておくことが必要。
- Labelling: the process that the data represents
- Dense: Layer of connected neurons
- Optimizer: Generates a new and improved guess
- Loss: Measures how good the current ‘guess’ is
- Convergence: The process of getting close to the collect answer

Week-2: Hands-on

Week2はFasion MNISTを使った画像判定。前回のNeuronは1層だったが今回は3層になる。覚えるべき主要な関数は以下。

  • mnist.load_data(): mnistデータをダウンロードしとトレーニングデータとテストデータに分割してくれる。
  • tf.keras.layers.Flatten(): 画像データを1次元のセットに変換する
  • tf.keras.layers.Dense(128, activation=tf.nn.relu): 活性化関数。“If X>0 return X, else return 0” — 入力値が0以下の場合は常に0、0より大きい場合は入力値を返す
  • tf.keras.layers.Dense(10, activation=tf.nn.softmax): 同じく活性化関数。0~

Exerciseの中ではコードの説明だけでなく各関数について

  • 値を変えてみた場合の動作(実行時間、精度など)の違い
  • ある関数を記載してみなかった場合の動作(エラーになるのはなぜ?)
  • Layersを追加した場合の実行時間、精度の違いは?
  • 学習の途中結果を繰り返し条件にしたい場合(Callback)は?

など細かく検証した結果を確認することができる。これは私のような初心者にとって、今までなら気にせず流してしまっていたような箇所を教えてくれるのでとてもありがたい。あんまり「あえて遠回りさせてみる」系の教材って少なくないですか?

感想

ここまでWeek2分まで消化しただけであるが、非常に楽しく学習できている。数学的な知識をかなり隠ぺいしつつ、何も知らない受講者に対して一つずつ情報を整理して並べてくれている印象。これまで試してみた書籍や某オンライン授業などと比べても圧倒的に理解度が高く感じる。
一通り消化した後に自分でコード書いたりしてみようと思う。

--

--

Tetsuya Isogai

Working at Microsoft/Cloud Solution Architect/Azure Core Infra