【環境構築不要・スマホ/タブレットOK】東大松尾研のDeep Learningエンジニア育成講座『DL4US』を自習する

> **PR:** [以前の記事](https://qiita.com/tomo_makes/items/5d6f5860bb793e3b354a) のデータサイエンティスト向け講座のColab実行方法などをまとめ、 :books: [図解速習DEEP LEARNING](https://amzn.to/2J0QNGF)という本ができました。[[2019年5月版] 機械学習・深層学習を学び、トレンドを追うためのリンク150選 - Qiita](https://qiita.com/tomo_makes/items/cd036e2444a938416316)でも、一部内容をご覧いただけます :smile:
>
> **参考:** [Colaboratoryユーザによる非公式の情報交換Slack](https://join.slack.com/t/colab-jp/shared_invite/enQtNTcxNzAzMzM5OTg2LTY1ZWI4NTVkNDNjMGMxNjI3ZDM0NmZlZTg1OTFjZDcwOGUxNTY5MGQ0NWZiMWU0NWQ5MTZhMWQxZGRjMWZlYjQ)を試験的に立ち上げました。リンクより、登録・ご参加ください。

# TL;DR

- いつも満員抽選となる東大松尾研Deep Learningエンジニア育成講座『DL4US』の演習資料が公開された
- Google Colaboratoryを使えば、Python等セットアップ不要ですぐに始められる
- **全ノートブックを実行し、つまずき所も乗り越え方をまとめました**
- セットアップ後は、スマホやタブレットのブラウザでもok
- GPUだって無料で使える!
- Colab概要はこちら:
  - [【秒速で無料GPUを使う】深層学習実践Tips on Colaboratory - Qiita](https://qiita.com/tomo_makes/items/b3c60b10f7b25a0a5935)


こんなに簡単です :point_down: 

<blockquote class="twitter-tweet" data-lang="en"><p lang="ja" dir="ltr">【環境構築不要・スマホ/タブレットOK】東大松尾研のDeep Learningエンジニア育成講座『DL4US』を自習する<a href="https://t.co/ZJLs9wNKSk">https://t.co/ZJLs9wNKSk</a><br><br>スマホから、いかに簡単に手書き文字認識実行まで試せるか動画にしました。<br>下のリンクで、あなたのスマホですぐ実行できます。<a href="https://t.co/PKqRBvyfDS">https://t.co/PKqRBvyfDS</a> <a href="https://t.co/u5jdPp0tbh">pic.twitter.com/u5jdPp0tbh</a></p>&mdash; tomo-makes＠『図解速習DEEP LEARNING』 (@tomo_makes) <a href="https://twitter.com/tomo_makes/status/1130424914320617472?ref_src=twsrc%5Etfw">May 20, 2019</a></blockquote>
<script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>


# DL4USのカバー範囲

DL4USの演習は、Keras(TensorFlow)というフレームワークを使い、基礎的な内容を説明したあと、画像や言語の教師あり学習・推論、深層生成モデル、時系列データの学習も扱います。また、Deep Learning基礎講座では公開されていなかった、強化学習のチュートリアルもあり、楽しめます。

独断でマッピングしてみました。さらに基礎を固める、または様々な事例を試したい方は [こちら](https://qiita.com/tomo_makes/items/f4d69f2aa3c407891d64#dl4us%E3%81%AE%E6%AC%A1%E3%81%AB%E4%BD%95%E3%82%92%E3%82%84%E3%82%8B%E3%81%8B) もご参照ください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/a62f5e3b-5cd1-4de0-3027-5e876081acd1.png)


> https://github.com/matsuolab-edu/dl4us/README.md より抜粋

- **Lesson 0: 機械学習・Deep Learningのキソ**
  - 機械学習概観
- **Lesson 1: 手書き文字認識をしよう**
  - Keras入門、MNIST、MLP、前処理、勾配に関するテクニック、過学習に関する手法、Fashion MNIST
- **Lesson 2: 畳み込みニューラルネットワーク**
  - CNN基礎、Data Augmentation、画像データの正規化、Batch Normalization、Skip Connection
- **Lesson 3: 系列データで予測させてみよう**
  - RNN、BPTT、Gradient Clipping、LSTM、GRU
- **Lesson 4: ニューラル翻訳モデルをつくってみよう**
  - 言語モデル、分散表現、Seq2Seq、Keras Functional API、Attention
- **Lesson 5: 画像からキャプションを生成してみよう**
  - MSCOCO、学習済みモデルの利用、キャプション生成、Attention
- **Lesson 6: ニューラルネットに画像を生成させよう**
  - 生成モデル入門、GAN、Conditional GAN、VAE
- **Lesson 7: ニューラルネットでゲームを攻略するAIをつくろう**
  - 強化学習入門、Q学習、DQN、OpenAI Gym、Double DQN、Dueling Network

# 始め方

公開資料はGitHub上にあります。まず、講座の情報公開ページの注意事項に目を通した後、ノートブックをご自身のGoogleドライブに保存し、PCでもスマホ・タブレットでもノートブックを開き、学習できる状態をセットアップします。


### 1. 公開資料をダウンロードする

- [DL4US コンテンツ公開ページ | U-Tokyo Matsuo Lab](https://weblab.t.u-tokyo.ac.jp/en/dl4us/)にダウンロードへのリンクがあります
  - **利用上の注意をご確認ください(商用利用不可等)**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/04aa75ca-7f3b-af34-7df8-8302ec6b7e04.png)

リンク先は、GitHubのリポジトリ[matsuolab-edu/dl4us](https://github.com/matsuolab-edu/dl4us) になっています。ここから、GitHub上の `Clone or download` ボタンを押し、 `Download ZIP` を選択すると、ファイルのダウンロードが始まります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/30204dde-7fee-d682-9842-d349919ddc5b.png)

> **Tips:** または、ColaboratoryからGitHub上のパスを指定して、直接開くこともできます。
> 例えば、以下はLesson 0のノートブックが開きます。
> https://colab.research.google.com/github/matsuolab-edu/dl4us/blob/master/lesson0/lesson0_exercise.ipynb
> 
> 今回はスマートフォンやタブレットから簡単に開けるようにするため、Googleドライブを経由するやり方を紹介しますが、デスクトップでは、このリンクを活用すればファイルダウンロードの必要さえありません。
> 一般に、GitHub上のノートブックは、
> https://colab.research.google.com/github/{ユーザ名}/{リポジトリ名}/blob/master/{リポジトリ内のパス}
> という指定で開くことができます。

### 2. ファイルを解凍する

- ダウンロードした `dl4us-master.zip` を解凍します
- `dl4us-master`　フォルダ下に、下記のような8フォルダとファイルが作られます

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/9838f5c1-91fe-790d-c1da-ced5a827c773.png)


### 3. 自分のGoogle Driveへアップロードする

- [Google Drive](https://www.google.com/drive/)を開きます
- 適当なフォルダ(`dl4us-notebooks`等)を作り、上記ファイルをアップロードします

### 4. Colaboratoryを起動する

- Google Drive上で、 `lesson0_exercise.ipynb` をダブルクリックします
- 上部の `Open with` プルダウンから `Colaboratory` を選択します

するとColaboratoryが立ち上がり、下記画面となります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/5bb3a3e5-9fb6-25d5-9254-c42dffc4ffe4.png)


### 5. 学習を始める

あとはノートブックを読み進め、各セルを実行してみます。

多くのノートブックはGPUを有効化することで、高速化できます。メニューの `ランタイム> ランタイムのタイプを変更` から、 `ハードウェアアクセラレータ` に `GPU` を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/8b78e6d0-c903-3093-8124-827faadf9f98.png)


下記のようなソースコードは、セルを選択し `左上の再生ボタンを押す` または `Shift + Return` で実行できます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/6abef988-d307-f48e-502d-74b3eb874493.png)


### 6. スマホから使う

- iPhone/AndroidいずれかのChromeを開きます
- [Google Colaboratory](https://colab.research.google.com/)を開きます
  - **スマホ版のGoogle Driveアプリからは、直接Colaboratoryを開けないので注意!**
- 起動時の、 `ノートブックを開く` 選択画面から、 `GOOGLE ドライブ` タブを選択
  - または、メニューの `ファイル> ノートブックを開く` から同様に操作
- 該当の.ipynbファイルを開きます
  - `lesson1` などの、ファイル名に含まれるキーワードで検索すると良いでしょう

# 各ノートブック実行時間・つまずきポイント on Colab

私の手元で基本全ノートブックの動作を確認しました。
各ノートブックの実行時間も示しています。（ただし、これはノートブックの読了時間を考慮していません。コードの実行時間です。）
Colaboratory上で実行した場合に必要な考慮を、ノートブックごとに解説します。
（ライセンスでは派生物の作成・公開を許可されていない様なので、修正したものの公開ではなく、修正する方法を解説します）

### L.0 機械学習・深層学習のキソ [実行目安 なし]

- 実行に問題はありません
- 表示されていない画像は、`figures` の前、URLの先頭に に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson0/` を加えると表示できます

### L.1 手書き文字認識をしよう（ニューラルネットワーク入門） [実行目安 5分]

- 実行に問題はありません
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson1/` を加えると表示できます


### Lesson2 畳み込みニューラルネットワーク (CNN) [実行目安 20分]

- 実行に問題はありません
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson2/` を加えると表示できます

### L.3 系列データで分類・予測させてみよう（RNN, LSTM） [実行目安 10分]

- Section 2, 4は以下の変更が必要です
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson3/` を加えると表示できます

#### Section 2

以下のコードセルを冒頭に追加し、データセットをダウンロードします。

```python3
!mkdir data
%cd data
!wget http://timeseriesclassification.com/Downloads/ECG5000.zip
!unzip ECG5000.zip
%cd ..
```

以下の箇所について、 `ECG5000.arff` を `ECG5000_TEST.arff` に書き換えます。(データセットのファイル名が変更されているようです)

```python3
#dataset, meta = arff.loadarff('data/ECG5000.arff')
dataset, meta = arff.loadarff('data/ECG5000_TEST.arff')
```

#### Section 4

データセットの提供サイトに接続できません(2019.5.19時点)。Kaggleに、同データセットがあるようです: https://www.kaggle.com/falkow91/internationalairlinepassengers/


### L.4 ニューラル翻訳モデルを作ってみよう（Seq2Seq, Attention） [実行目安 20分]

- Section 2は以下の変更が必要です
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson4/` を加えると表示できます

#### Section 2

ノートブックの冒頭で、データセットをダウンロードします。

```python3
!git clone https://github.com/odashi/small_parallel_enja.git
```

以下のコードのディレクトリ指定を書き換えます。

```python3
# 読み込み＆Tokenizerによる数値化
#x_train, tokenizer_en = load_data('data/train.en')
#y_train, tokenizer_ja = load_data('data/train.ja')
x_train, tokenizer_en = load_data('small_parallel_enja/train.en')
y_train, tokenizer_ja = load_data('small_parallel_enja/train.ja')
```

### L.5 画像からキャプションを生成してみよう [実行目安 2時間]

- Section 1は以下の変更が必要です
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson5/` を加えると表示できます

#### Section 1

ノートブックの冒頭で、実行スクリプト等のため、リポジトリをクローンします。

```python3
!git clone https://github.com/matsuolab-edu/dl4us.git
%cd dl4us/lesson5
```

Colaboratoryでは、メインメモリが不足となりクラッシュするため、学習データサイズを小さくします。 (`preprocess_mscoco.py`)

```python3
# N_TRAIN_DATA = 50000
N_TRAIN_DATA = 30000
```


### L.6 ニューラルネットに画像を生成させよう [実行目安 2時間]

- 実行に問題はありません
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson6/` を加えると表示できます


### L.7 ニューラルネットでゲームを攻略するAIをつくろう [実行目安 設定次第]

- `#Colab上では以下を実行してください` という記載は、コメントアウトを外して実行します
- Section 4は実行時間に注意が必要です
- 表示されていない画像は、`figures` の前、URLの先頭に `https://github.com/matsuolab-edu/dl4us/raw/master/lesson7/` を加えると表示できます

#### Section 4

DQNによるBreakOut(ブロック崩し)の学習です。学習の並列化などは実装していないため、数十時間の学習が必要です。

`4.1.3 学習` のステップ数を変更し、学習時間を変えられます。

```python3
#n_steps = 500000
n_steps = 100000   # 100000ステップに変更した例
```

このノートブックに限っては、Colaboratoryでの実行は少し難しいでしょう。ノートブックの連続起動時間制限(12時間)にかかってしまうためです。モデルを途中保存し、途中から学習を再開するなどの工夫をすれば、不可能ではありません。または、他のフレームワークを用いて効率化をした[他のノートブック](https://colab.research.google.com/github/tomo-makes/dl-in-a-sec/blob/master/notebooks/RL_BreakOut_ja.ipynb)などをお試しください。



# 参考リソース

DL4USは、他にも概要や、コンテナでの実行方法が解説されています。

- [東大松尾研から新たに無償公開されたDeep Learning講座「DL4US」が良い、という話 - Qiita](https://qiita.com/katsuki104/items/e0f81a9cacc3e5f4fcd7)
- [東大松尾研が無料で公開しているディープラーニングの実践的教育プログラム「DL4US」の学習環境をDockerを使ってコマンド一発で構築する方法 - Qiita](https://qiita.com/karaage0703/items/681ab6949470f4a18b50)

以前公開された、データサイエンティスト育成、Deep Learning基礎講座についても、Colaboratory上での実行方法をまとめています。こちらをご覧ください。

- [【スマホOK/実行しながら学ぶ】東大松尾研のデータサイエンティスト育成/ Deep Learning基礎講座を自習する - Qiita](https://qiita.com/tomo_makes/items/5d6f5860bb793e3b354a)

また、Colaboratoryを使って、もっとたくさん、応用事例が試せる! 書籍を書きましたのでよろしければご覧ください。

- [図解速習DEEP LEARNING](https://amzn.to/2H4Yvxq)
- ノートブックはGitHubから簡単に開き、無償で試せます: [tomo-makes/dl-in-a-sec](https://github.com/tomo-makes/dl-in-a-sec) 
- 抜粋のQiitaもあります: [[2019年5月版] 機械学習・深層学習を学び、トレンドを追うためのリンク150選 - Qiita](https://qiita.com/tomo_makes/items/cd036e2444a938416316)

また、最近、Colaboratory(Jupyter)ノートブックの深層学習チュートリアルが盛んに公開されています。それぞれチュートリアルに採用しているフレームワークの違いはありますが、特に基礎的な部分の解説は、相互に渡り歩きながら学習をすると、理解が早まると思います。こちらも参考にしてください。

- [チュートリアル — ディープラーニング入門：Chainer チュートリアル](https://tutorials.chainer.org/ja/tutorial.html)

# DL4USの次に何をやるか

最後に、DL4USの範囲を超えて学習を進める場合のおすすめをまとめました。以下の、 `+...` の表記部分を、 :computer: [Chainerのチュートリアル](https://tutorials.chainer.org/ja/tutorial.html)、:books: [図解速習DEEP LEARNING](https://amzn.to/2J0QNGF)紹介のチュートリアルでカバーできます。ぜひお試しください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/64608/3cb366a7-7403-4cdf-7ec1-7ef85b5678bb.png)