Chapter 1: Neural Network Foundations with TensorFlow 2.0

A first example of TensorFlow 2.0 code

kernel_initializer によって特定の重みで初期化できる。

Defining a simple neural network in TensorFlow 2.0 (p.15)

Improving the simple net in TensorFlow 2.0 with hidden layers (p.21)

Further improving the simple net in TensorFlow with Dropout (p.24)

Regularization (p.36)

Adopting regularization to avoid overfitting

training data を用いて、損失関数が最小になるようにモデルを調整する。モデルが複雑すぎるとtraining data に対して過適合してしまう。複雑すぎるモデルは(1)trainingに多くの時間がかかる、(2)training dataに対してはよい結果を返すがvalidation dataに対しては成績が悪くなる、という問題が起きる。overfittingを避けるためには、modelのgeneralization が必要であり、それは model の重みの regularization によって実現する。

TensorFlow では、上述のregularizationをサポートしている。 https://www.tensorflow.org/api_docs/python/tf/keras/regularizers

from tf.keras.regularizers import l2, activity_l2 model.add(Dense(64, input_dim=64, W_regularizer=l2(0.01), activity_regularizer=activity_l2(0.01)))

Understanding BatchNormalization (p.38)

BatchNormalization はregularizationの一種であり、近年発達してきた。

trainingの最中にlayerの重みは変化し、そのためその後のlayerへの入力は大きく変化する。 そのため、layer の重みを調整するのが大変となり、trainingに時間がかかってしまう。 各layer へのinputが、batch毎に、epoch毎に、あまり変化しないようにする、というのが改善策である。

別の問題として、sigmoid activation function は0に近いときにうまく動作し、0から離れるとうまく動作しない。ニューロンの出力がsigmoid 0 から離れて変動すると、ニューロンは重みを変化できなくなる。

「layerの出力を0に近いガウス分布に変換する」というのが鍵となるアイディアである。

$\mu$: the batch mean
$\sigma$: the batch variance
$\epsilon$: a small number
$\lambda$ and $\beta$: parameters optimized during the training phase

$\displaystyle y = \lambda \frac{x - \mu}{\sigma + \epsilon} + \beta$

BatchNormalization はtrainingを高速化し、正確さを向上させる効果的な手法であることが証明されている。

Playing with Google Colab - CPUs, GPUs, and TPUs (p.39)

Google は TensorFlow を使う無料の環境 Colab を提供している。

https://colab.research.google.com/

Sentiment analysis (p.42)

前の節のソースコードは IMDb データセットの先頭で開発された sentiment analysis の例である。 IMDb データセットは総数 50,000 個の positive または negative な映画レビューを含んでいる。 training dataset と test dataset として 25,000ずつに分けて利用する。 IMDb データセットは tf.keras に用意されている。

max_len の長さに文をパディングして、入力の文章を固定サイズのベクタとして扱う(8章)。

Hyperparameter tuning and AutoML (p.45)

上の例では複数のパラメータ(隠れ層のニューロン数、 BATCH_SIZE, エポック数、 NN自体の複雑性)を調整する必要がある。これらのパラメータは、NNの重みやバイアスと区別して hyperparameter と呼ばれる。 hyperparameterの調整とは、コスト関数を最小化するhyperparameterの組み合わせを発見することである。 $n$ 個のhyperparameterがあると、$n$次元の空間を考えてその中でコスト関数を最小にする点を見つける必要がある。 brute force 戦略で、$n$次元空間をグリッドに分けて各グリッドの頂点でコスト関数を計算してみる方法もあるが、 それでは効率が悪いので AutoML という重要な手法が開発された。 hyperparameter を自動的に調整して、そのネットワークに最適化された値を自動的に探索する(14章)。

Predicting output (p.45)

ある Neural Network がいったん train されると、それを用いて prediction することができる。 TensorFlow では次のように書ける。

# p.45 Making predictions.
predictions = model.predict(X)

A practical overview of backgpopagation (p.46)

What have we learned so far? (p.48)

Towards a deep learning approach (p.48)