【Udemy】AIをGoogle Colabで気軽に学べる

この記事は、[Udemy Advent Calendar 2020](https://qiita.com/advent-calendar/2020/udemy)に掲載しています。
# はじめに
僕は去年、友人と2日間のAI講座を受けに行きました。でも2日間でPythonの使い方からCNNまで叩き込まれたらチンプンカンプンです。高い受講料をぼったくられたような気持ちになりました。そこで、今年は家にいることが多かったこともありUdemyでAIについて学ぶことにしました。

僕が受講した講座は『[AIパーフェクトマスター講座](https://www.udemy.com/course/ai-master/)』です。Google Colaboratoryというサービスを用いて解説してくれるので、誰でも受けられる講座だと感じました。「パーフェクトマスター」という響きが胡散臭いですが、中身は良いので安心してほしいです。

# 主にこの講座で学べること
* Google Colaboratory
* Pythonの基礎
    * Pythonの基礎
    * NumPy
    * matplotlib
    * Pandas
* 簡単なディープラーニング
* ディープラーニングの理論
    *  数学の基礎
    *  行列・微分
    *  各種関数について
    *  勾配について  
など
* 畳み込みニューラルネットワーク（CNN）
* 再帰型ニューラルネットワーク（RNN）
* 変分オートエンコーダ（VAE）
* 敵対的生成ネットワーク（GAN）
* 強化学習・転移学習
* 人工知能アプリの開発

いろいろ詳しく書くと項目が多くなりすぎるので、DLの理論以降は見出しだけにしました。
様々なものを使うため、広く知識がつくと思います。最終的にアプリの開発まで面倒を見てくれるのが、個人的に嬉しいポイントです。matplotlibやPandas、GANの解説からFlaskまで取り扱っているとは購入時に思わなかったのでワクワクしました。
また、僕は工学系なのでそこまで必要でない項目だったのですが、数学の基礎や行列・微分についても丁寧に説明してくださるので、安心して学ぶことができるかと思います。~~学校の講義要らないですね。~~

# 実際に一例を紹介
最初はこの講座を買わなくてもいいくらいに全てをまとめたいと思っていたのですが、あまりにも情報量が多すぎるため諦めました。そのかわりに、講座内で作成するモノを1つ紹介します。

## シンプルなディープラーニング
Kerasを使って最小限のディープラーニングを実装する方法を学びました。

#### データの読み込み
Irisデータセットを読み込みます。

```Python:
   import numpy as np
   from sklearn import datasets
   iris = datasets.load_iris()
   print(iris.data[:10])    # データを10個表示
   print(iris.target[:10])  # ラベルを10個表示
   print(iris.data.shape)   # データの形状を表示
```

#### データの前処理
データの前処理として、標準化を行います。標準化は、平均値が0、標準偏差が1になるように変換する処理です。
ラベルをone-hot表現に変換します。one-hot表現は、一箇所だけ1で残りは０の配列です。

```Python:
   from sklearn import preprocessing
   from keras.utils import np_utils

   scaler = preprocessing.StandardScaler()   # 標準化のためのスケーラー
   scaler.fit(iris.data)                     # パラメータの計算
   x = scaler.transform(iris.data)           # データの変換
   print(x[:10])

   t = np_utils.to_categorical(iris.target)  # ラベルをone-hot表現に変換
   print(t[:10])
```

#### 訓練データとテストデータ
データを訓練用のデータとテスト用のデータに分割します。

```Python:
   from sklearn.model_selection import train_test_split

   # x_train: 訓練用の入力データ
   # x_test: テスト用の入力データ
   # t_train: 訓練用の正解データ
   # t_test: テスト用の正解データ
   # train_size=0.75: 75%が訓練用、25%がテスト用
   x_train, x_test, t_train, t_test = train_test_split(x, t, train_size=0.75)
```

#### モデルの構築
4層からなる、シンプルなディープラーニングのモデルを構築します。
Sequentilal: 単純に層を積み重ねるモデル
Dense:       全結合層
Activation:  活性化関数

```Python:
   from keras.models import Sequential
   from keras.layers import Dense, Activation

   model = Sequential()
   model.add(Dense(32, input_dim=4)) # 4つの特徴が入力なので、入力層のニューロン数は4、中間層のニューロン数は32
   model.add(Activation('relu'))     # 活性化関数（ReLU）を追加
   model.add(Dense(32))              # ニューロン数32の全結合層を追加
   model.add(Activation('relu'))     # 活性化関数（ReLU）を追加
   model.add(Dense(3))               # 3つに分類するので、出力層のニューロン数は3
   model.add(Activation('softmax'))  # 3つ以上の分類にはソフトマックス関数を使用
   model.compile(optimizer='sgd',loss='categorical_crossentropy',metrics=['accuracy']) # モデルのコンパイル

   print(model.summary())
```

#### 学習
訓練用の入力データと正解データを使って、モデルを訓練します。
fit: モデルを訓練します。

```Python:
   history = model.fit(x_train, t_train, epochs=30, batch_size=8)
```

#### 学習の推移
Historyには学習の経過が記録されています。これを使って、学習の推移を表示します。

```Python:
   import matplotlib.pyplot as plt

   hist_loss = history.history['loss']     # 訓練用データの誤差
   hist_acc = history.history['accuracy']  # 検証用データの誤差

   plt.plot(np.arange(len(hist_loss)), hist_loss, label='loss')
   plt.plot(np.arange(len(hist_acc)), hist_acc, label='accuracy')
   plt.legend()
   plt.show()
```

#### 評価
モデルの評価を行います。
evaluate: 入力、正解データから誤差などを計算します。

```Python:
   loss, accuracy = model.evaluate(x_test, t_test)
   print(loss, accuracy)
```

#### 予測
学習済みのモデルを使って予測を行います。
predict: モデルを使って入力を出力に変換します。

```Python:
   model.predict(x_test)
```

#### モデルの保存
学習済みのモデルを保存します。
save: モデルを保存します。
load_model: 保存されたモデルを読み込みます。

```Python:
   from keras.models import load_model

   model.save('model.h5')
   load_model('model.h5')
```

このようなプログラムを見ながら、解説を受けます。

# 良かったところ
説明を見聞きするだけでなく、実際に実行しながら学べるのは良いと思いました。
Google Colabを使うのでPCを選ばずサクサク実行できます。

# アドバイス
Udemyはセールをたまにしています。学びたいときにスッと受講できるように、気になっている講座はセール時にまとめて買ってしまうことをお勧めします。

# 終わりに
高スペックPCを買わずともAIが学べる・使えるということが、今どんどん広まっているところだと僕は思っています。僕の尊敬する教授も「Officeが使えて当たり前という時代から、AIが使えて当たり前という時代になった。」と仰っていました。どのような研究室・会社に所属していようともAI技術は必要になるかと思いますので、ぜひいろんな方にこの講座で触っていただきたいです。