第11章.深層ニューラルネットワークを訓練する
深層ニューラルネットワーク学習で発生する可能性のある問題とその解決策
📌 トレーニングのスピードを上げる方法
1.適切な接続ウェイトを使用した初期化ポリシー
2.正常なアクティブ化関数の使用
3.正規化配置の使用
4.予め訓練されたネットワークの一部を再利用する
グラデーションが消失:グラデーションがますます低くなると グラデーションが激しくなる:グラデーションが低ければ低いほど、グラデーションが大きくなり、異常に重み付け をリフレッシュする
ex)ポインティングレバー活性化関数
正または負の値を入力すると0 or 1に収束し、傾きは0に近い.
👉🏻 ニューラルネットワークが上向きに増大するにつれて,最上層では活性化関数が0または1に収束し,伝搬可能なグラデーションはほとんどなく,実際には下層では何も達成できなかった.
✔ファン-in:レイヤーの入力接続数
≪表計算ドキュメント|Enter Enter|Essbase_Studio≫:≪レイヤーの出力接続|Output Connections|Essbase_Studio≫
グラートの初期化(=セビの初期化)
ランダム初期化各層の接続重み付け値 層の傾斜分散間でバランスをとり、特定層の目立ちすぎを防止する. 訓練速度上昇 S字型アクティブ化関数
HE初期化 ReLUアクティブ化関数の初期化
📌 グラッド初期化:論理棒、破線接線、ソフトMaxアクティブ化関数とともに使用
📌 HE初期化:Relu関数とRelu関数の変種
ReLU関数:特定の正の値に収束しない(利点)
しかし、死んだRELUの問題が発生する可能性があります(訓練中、一部のニューロンはゼロではない値Xを出力します)
ReLU関数のバリエーション LeakyReLU
通常、関数の傾き(alpha)は0.01に設定され、 は死なないようにする. RReLU
ランダムにalphaを選択し、テスト時に平均的に法規として使用する PReLU
Alphaはトレーニング中に学習(But、小型データセット、トレーニングセットにフィットするリスクがある) ELU
入力がゼロ以下(RELUと同様)の場合、スムーストリムによる平均出力はゼロに近い
SELU
ERUアクティブ書画関数の変種
すべての非表示レイヤでSELUを使用すると、ネットワークは自己正規化されます.
ネットワークは、ワイドスクリーンや奥行きなどのスキップ接続を使用したレイヤで構成されています.
訓練時の各層出力は平均0,標準偏差は であった.
SELU > ELU > LeakyReLU > ReLU > tanh < Logistic
👉🏻入力値が同じであっても、重みが変化するとまったく異なる値になるため、layerにレイアウト正規化プロセスを追加し、重みの違いを緩和し、学習をより安定させます.
バッチ正規化アルゴリズム深部ネットワーク(多重隠蔽層のニューラルネットワーク)は主に を用いる.隠層のアクティブ化関数の入出力値に演算を追加 配置の平均値は0であり、標準化分布は1 である.標準化後、配置データをgamma、betaを介して新しい値 に変換する gamma,beta各層ニューロン1個 テストフェーズは、平均および分散のミニ配置を計算していないので、 を使用してトレーニングデータ全体の平均および分散を計算する.
🖥 ケラスを使用した標準化された導入
類似のタイプの問題を処理するニューラルネットワークの下層を繰り返し使用する学習方法 の訓練速度を向上させ、訓練データ量 を減少させることができる.
✔¥¥АААААААААА\1040モデルA:Fashion MNISTの高性能モデル TODO->サンダルとシャツを区別するバイナリ分類器Bを作る
1)型番
3)B型訓練時にA型に影響するため、クローンA型
5)訓練
6)再使用層凍結解除(この場合、学習率の低下を推奨)後の訓練
🖥 kerasによる移行学習ラベルが少ない場合、複雑な問題を処理するために使用されます. は、一般に、1回の非指導学習モードトレーニングの後に、自動エンコーダまたはGAN を使用する.
大規模なモデルのトレーニングを高速化
以前のグラデーション値はどれくらい重要ですか グラデーションで加速
(betaスーパーパラメータを用いて運動量が大きすぎることを防止する) の典型的な基準値は0.9 である.動機最適化変種、訓練速度は基本動機最適化より 速いが元の位置よりも近い方向に測定するグラデーション量 を計算する.学習率値の調整 最も急な面に沿ってグラデーションベクトルのスケーリングを減少する 、すなわち学習率を減らす(学習率が小さすぎると長い学習時間がかかる&学習率が大きすぎると問題を解決する必要がある) 深層ニューラルネットワークにおけるX の使用
ベンチマーク最適化+RMSProp (基準)前のランプ指数平均減少(RMSProp)前のランプ二乗指数平均減少 学習率は超パラメータ調整X が必要である.戦略 は を表します.性能計画に基づいてvalid lossが5期間で減少しなかった場合、学習率に0.5 を乗じる
使用制限は大きすぎることを避けることができます.早期終了、配置正規化 ニューラルネットワークで広く用いられている制御方法(l 1&l 2,dropo,...)
l 1制限疎モデルを作成するための l 2制限ニューラルネットワーク接続重み付け制限 🖥 partialのl 2制限の使用 partial:すべての非表示レイヤが同じパラメータ値を繰り返す場合、コード再作成方法 深層ニューラルネットワークで最も人気のある制御技術 入力値の微小な変化はあまり敏感ではない(隣接するニューロンに依存しない)ため、制御戦略 が採用される.各トレーニングステップにおいて、 に各ニューロンホイールを下方に配置することを指定する.訓練終了後、ニューレンエにハンマーX を適用
2479172モデルが誇張された場合、滴出率は¥¥2であった.
モデルが小さすぎると,滴下率はであった.
📌 トレーニングのスピードを上げる方法
1.適切な接続ウェイトを使用した初期化ポリシー
2.正常なアクティブ化関数の使用
3.正規化配置の使用
4.予め訓練されたネットワークの一部を再利用する
1.グラデーションの消失と暴走
1-1. 漸変的消失と飲酒問題
ex)ポインティングレバー活性化関数
正または負の値を入力すると0 or 1に収束し、傾きは0に近い.
👉🏻 ニューラルネットワークが上向きに増大するにつれて,最上層では活性化関数が0または1に収束し,伝搬可能なグラデーションはほとんどなく,実際には下層では何も達成できなかった.
1-2. 解決策1)globatとheの初期化
✔ファン-in:レイヤーの入力接続数
≪表計算ドキュメント|Enter Enter|Essbase_Studio≫:≪レイヤーの出力接続|Output Connections|Essbase_Studio≫
グラートの初期化(=セビの初期化)
ランダム初期化
(로지스틱, 소프트맥스)
と併用すると、性能が良い(RELUと併用すると、性能が悪い)📌 グラッド初期化:論理棒、破線接線、ソフトMaxアクティブ化関数とともに使用
📌 HE初期化:Relu関数とRelu関数の変種
# 글로럿 초기화
keras.layers.Dense(10, activation='relu', kernel_initializer='he_uniform')
# He초기화
keras.layers.Dense(10, activation='relu', kernel_initializer='he_normal')
# fan_avg 기반 균등 분포 He 초기화
he_avg_init = keras.initializers.VarianceScaling(scale=2., \
mode='fan_avg', \
distribution='uniform')
keras.layers.Dense(10, activation='sigmoid',\
kernel_initializer=he_avg_init)
1-3. 解決策2)収束しない活性化関数
ReLU関数:特定の正の値に収束しない(利点)
しかし、死んだRELUの問題が発生する可能性があります(訓練中、一部のニューロンはゼロではない値Xを出力します)
ReLU関数のバリエーション
通常、関数の傾き(alpha)は0.01に設定され、
model = keras,models.Sequential([
[...]
keras.layers.Dense(10, kernel_initializer='he_normal'),
keras.layers.LeakyReLU(alpha=0.2)
[...]
])
ランダムにalphaを選択し、テスト時に平均的に法規として使用する
Alphaはトレーニング中に学習(But、小型データセット、トレーニングセットにフィットするリスクがある)
model = keras,models.Sequential([
[...]
keras.layers.Dense(10, kernel_initializer='he_normal'),
keras.layers.PReLU()
[...]
])
入力がゼロ以下(RELUと同様)の場合、スムーストリムによる平均出力はゼロに近い
ERUアクティブ書画関数の変種
すべての非表示レイヤでSELUを使用すると、ネットワークは自己正規化されます.
ネットワークは、ワイドスクリーンや奥行きなどのスキップ接続を使用したレイヤで構成されています.
訓練時の各層出力は平均0,標準偏差は
layers = keras.layers.Dense(10, activation='selu',
kernel_initializer='lecun_normal')
👉🏻一般的には심층 신경망의 은닉층
です.SELU > ELU > LeakyReLU > ReLU > tanh < Logistic
1-4. 解決方法3)正規化配置
배치 단위로 정규화 하는 것
✔👉🏻入力値が同じであっても、重みが変化するとまったく異なる値になるため、layerにレイアウト正規化プロセスを追加し、重みの違いを緩和し、学習をより安定させます.
バッチ正規化アルゴリズム
스케일 조정
-gamma & beta, 이동 평균
-moving_mean, moving_variance 🖥 ケラスを使用した標準化された導入
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.BatchNormalization(),
kears.layers.Dense(300, activation='elu',
kernel_initializer='he_normal'),
keras.layers.BatchNormalization(),
kears.layers.Dense(100, activation='elu',
kernel_initializer='he_normal'),
keras.layers.BatchNormalization(),
kears.layers.Dense(10, activation='softmax'
])
2.転独学及び非指導の事前訓練
2-1. 転校学習
✔¥¥АААААААААА\1040
1)型番
A 로드
2)モデルA의 층을 재사용
により新規モデルを作成する(出力層以外の全ての層を再利用する)3)B型訓練時にA型に影響するため、クローンA型
가중치를 복사
4)訓練されていないモデルBの出力層はランダムに初期化されるので、재사용된 모델 A의 층들은 동결
及び새로운 출력층은 학습
の時間が与えられる5)訓練
6)再使用層凍結解除(この場合、学習率の低下を推奨)後の訓練
model_A = keras.models.laod_model('model_A.h5')
# 모델 B에 model_A의 layer들 재사용
new_model_B = keras.models.Sequential(model_A.layers[:-1])
# 모델 B에 출력층 생성
new_model_B.add(keras.layers.Dense(1, activation='sigmoid'))
# model_A의 가중치 복사
model_A_clone = keras.models.clone_model(model_A)
model_A_clone.set_weights(model_A.get_weights())
# 동결 후 compile
for layer in new_model_B.layers[:-1]:
layer.trainable = False
new_model_B.compile(loss='binary_crossentropy',
optimizer='sgd',
metrics=['accuracy'])
# 학습
history = nes_model_B.fit(X_train_B, y_train_B, epochs=4,
validation_data=(X_valid_B, y_valid_B))
for layer in new_model_B.layers[:-1]:
layer.trainable = True
# 동결 해제 후 compile
optimizer = keras.optimizer.SGD(lr=1e-4) # 기본 학습률:1e-2
new_model_B.compile(loss='binary_crossentropy',
optimizer=optimizer,
metrics=['accuracy'])
# 학습
history = new_model_B.fit(X_train_B, y_train_B, epochs=16,
validation_data=(X_valid_B, y_valid_B))
2-2. 非指導的訓練
3.最適化方法
大規模なモデルのトレーニングを高速化
3-1. アニメーションの最適化
(betaスーパーパラメータを用いて運動量が大きすぎることを防止する)
optimizer = keras.optimizers.SGD(lr=0.001, momentum=0.9)
3-2. ネストロフ加速傾斜
optimizer = keras.optimizer.SGD(lr=0.001 momentum=0.9, nesterov=True)
3-3. AdaGrad
3-4. Adam
optimizer = keras.optimizers.Adam(lr=0.001, beta_1=0.9, beta_2=0.999)
3-5. 学習率の設定
성능 기반 스케줄링
(ReducelronPlateauコールバック)lr_scheduler = keras.callbacks.ReduceLROnPlateau(factor=0.5, patience=5)
4.規制手法
使用制限は大きすぎることを避けることができます.
4-1. l 1&l 2制限
l 1制限
from functools import partial
RegularizedDense = partial(keras.layers.Dense,
activation='elu',
kernel_initializer='he_normal',
kernel_regularizer=keras.regularizers.l2(0.01))
model = keras.models.Sequeuntial([
keras.layers.Flatten(input_shape=[28,28]),
RegularizedDense(300),
RegularizedDense(100),
RegularizedDense(10, activation='softmax',
kernel_initializer='glorot_uniform')
])
4-2. ドロップ
임시적
の確率pが10%から50%の間である2479172モデルが誇張された場合、滴出率は¥¥2であった.
モデルが小さすぎると,滴下率はであった.
model = keras.models.Sequential([
keras.layers.Flatten(input_shape=[28,28]),
keras.layers.Dropout(0.2),
keras.layers.Dense(300, activation='elu',
kernel_initializer='he_normal'),
keras.layers.Dropout(0.2),
keras.layers.Dense(100, activation='elu',
kernel_initializer='he_normal'),
keras.layers.Dropout(rate=0.2),
keras.layers.Dense(10, activation='softmax')
])
Reference
この問題について(第11章.深層ニューラルネットワークを訓練する), 我々は、より多くの情報をここで見つけました https://velog.io/@juliy9812/11장.-심층-신경망-훈련하기テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol