バッチ正規化のメリット、デメリット

バッチ正規化を説明している以下の文で正しいものを選択肢から選んでください.

1. バッチ正規化を適応するとモデルの構造は複雑となるため,プレーンな ELU や He 初期化を最初に試すと良い.
2. バッチ正規化を適応するとモデルの構造が単純となるため,とりあえずバッチ正規化を用いると良い.
3. バッチ正規化にはモデルの汎化性能を低下させるといった問題が存在する.
4. バッチ正規化は、活性化関数の後に用いると良い

バッチ正規化の実装

次のコードで空欄になっている行に入る適切なものを 1 ~ 3 からそれぞれ選び,
バッチ正規化によって DNN モデルを正規化してください.

import tensorflow as tf

n_inputs = 28 * 28
n_hidden1 = 300
n_hidden2 = 100
n_outputs = 10

X = tf.placeholder(tf.float32, shape=(None, n_inputs), name=”X”)

train = tf.placeholder_with_default(False, shape=(), name=’training’)

hidden1 = tf.layers.dense(X, n_hidden1, name=”hidden1″)

# Q1:hidden1 をバッチ正規化してください.
bn1 = ##########

[Q1の選択肢]
1. tf.layers.batch_normalize(hidden1, training=x, momentum=0.9)
2. tf.layers.batchnormalization(hidden1, training=train, momentum=0.9)
3. tf.layers.batch_normalization(hidden1, training=train, momentum=0.9)

#Q2:ELU 活性化関数を使用してください.
bn1_act = ##########

hidden2 = tf.layers.dense(bn1_act, n_hidden2, name=”hidden2″)
bn2 = tf.layers.batch_normalization(hidden2, training=train, momentum=0.9)
bn2_act = tf.nn.elu(bn2)

logits_before_bn = tf.layers.dense(bn2_act, n_outputs, name=”outputs”)
logits = tf.layers.batch_normalization(logits_before_bn, training=train,
momentum=0.9)

[Q2の選択肢]
1. tf.layers.elu(bn1)
2. tf.nn.elu(bn1)
3. tf.keras.elu(hidden1)

Glorot (Xaiver) の初期値

Xaiver の初期値を説明している以下の文で空欄に入る適切な単語を選択肢からそれぞれ選んでください.

バックプロパゲーションをする時には順方向と逆方向で適切に信号を流す必要がある.
しかし、適切に信号を流すためには、各層の入力と出力の接続数を統一するなどし、層を通過する前と後での勾配の ( Q1 ___ ) を等しくしておく必要がある.
実際には、各層の入力と出力の接続数は異なるため、接続部の ( Q2 ___ ) をランダムに初期化することで妥協する.

[Q1の選択肢]
1. 分散
2. 平均値
3. 数
4. 初期値

[Q2の選択肢]
1. 勾配
2. 重み
3. 活性化関数
4. ニューロン数

重みの初期化

重みの初期化を説明している以下の文のうち、その説明が正しくないものを選択肢 1 ~ 3 から選んでください.

1. 重みを初期化しないと、学習にかかる時間が大きくなることがある.
2. 重みの初期化は勾配消失問題の解決策となるが、勾配爆発問題には効果がない.
3. 重みを初期化することで、ノードの出力の偏りが解消されモデルの表現力に制限を加えることができる.

重みの初期化

重みの初期化を説明している以下の文のうち、その説明が正しくないものを選択肢 1 ~ 3 から選んでください.

1. 重みの初期化は勾配消失問題の解決策となるが、勾配爆発問題には効果がない.
2. 重みを初期化することで、ノードの出力の偏りが解消されモデルの表現力に制限を加えることができる.
3. 重みを初期化しないと、学習にかかる時間が大きくなることがある.

活性化関数の選択

活性化関数を説明している文として正しくないものを選択肢 1 ~ 3 から選んでください.

1. ANN アーキテクチャに使用する活性化関数に迷った時は、計算にかかる時間コストを抑えられる ReLU 関数を使ってみるとよい.
2. 分類タスクに置いて予測するクラスが相互排他的な場合、一般的にはソフトマックス関数を使用する.
3. ReLU 関数を用いて学習がうまくいかな時は、勾配降下方と相性も良いロジスティック関数や双極接線関数を試してみると良い.

勾配消失問題

勾配消失問題の説明として正しいものを選んでください.

[選択肢]
1. 勾配消失問題は中間層の活性化関数に sigmoid 関数を用いた場合にのみ発生するので、活性化関数の選択には十分注意が必要である.
2. 勾配消失問題とは、前進パスにおける各層のニューロンの出力値が徐々に小さくなっていくことで、
 バックプロパゲーションに必要な重みが消滅してしまう現象である.
3. 勾配消失問題とは、バックプロパゲーション時に勾配が徐々に急になっていくことで、各層の重みが非常に大きくなる現象である.
4. 勾配消失問題は、各層の入出力の値を正規化することで緩和できる.

勾配消失問題

勾配消失問題の説明として正しいものを選んでください.

[選択肢]
1. 勾配消失問題は中間層の活性化関数に sigmoid 関数を用いた場合にのみ発生するので、活性化関数の選択には十分注意が必要である.
2. 勾配消失問題とは、バックプロパゲーション時に勾配が徐々に急になっていくことで、各層の重みが非常に大きくなる現象である.
3. 勾配消失問題は、各層の入出力の値を正規化することで緩和できる.
4. 勾配消失問題とは、前進パスにおける各層のニューロンの出力値が徐々に小さくなっていくことで、
 バックプロパゲーションに必要な重みが消滅してしまう現象である.