NLP(自然言語処理) 学習率の変更と早期停止(ReduceLROnPlateau/EarlyStopping)
model.compile()
を用いるとき,オプティマイザ(最適化アルゴリズム)に学習率を設定します。
optimizer = Adam(lr=0.01)
model.compile(loss='categorical_crossentropy',
optimizer=optimizer,
metrics=['accuracy'])
lr=0.01
が学習率です。
学習率は,いわば,学習の精度に関係する値であると見なすことができます。
これは,地図上である特定の場所を探す作業に例えることができます。あなたが,地図アプリでマンハッタンを見つけようとするとき,あなたの家の近隣が表示された地図では役に立たないでしょう。まず,アメリカ全体の地図を表示し,ニューヨーク州を探します。そして,ニューヨーク州を拡大し,海岸線に沿ってマンハッタンの小さな島を探すはずです。
学習率は地図の縮尺に似ています。初めは学習率を大きくし,正解に近い概ねの値を探します。そして正解に近づいたら学習率を小さくし,より厳密な正解の位置を特定していくのです。
ReduceLROnPlateau
from keras.callbacks import ReduceLROnPlateau
reduce_lr = ReduceLROnPlateau(monitor='val_loss', factor=0.5, patience=2, min_lr=0.0001)
ReduceLROnPlateau
は与えられた条件に基づいて,学習率を小さくします。
monitor='val_loss'
は検証データの損失関数を監視することを表します。val_loss
を有効にするためには,model.fit()
に検証データを与える必要があります。詳しくは,NLP(自然言語処理)訓練データと検証データを分けるを参照して下さい。
patience=2
はval_loss
が2epochにおいて改善しない場合,学習率を変更することを表します。factor=0.5
は,例えば,初めの学習率が0.01
のとき,次の学習率を0.005
に変更することを表しています。
min_lr
=0.0001は,学習率の最小値で,これ以上小さくなることはありません。
EarlyStopping
from keras.callbacks import EarlyStopping
EarlyStopping = EarlyStopping(monitor='val_loss', min_delta=0, patience=10, mode='auto')
EarlyStoppingは訓練結果に改善が見られない場合,訓練を停止します。
monitor='val_loss'
は検証データの損失関数を監視することを表します。min_delta
は与えられた絶対値より変化が小さい場合,改善していないと判定します。patience=10
はval_loss
が10epochにおいて改善しない場合,訓練を停止します。
mode
は観測値の増加や減少を監視する方法を指定します。通常はauto
にします。
最終的に,これらの機能はfit()
のcallbacks
で指定します。
model.fit(
......, callbacks=[EarlyStopping, reduce_lr])
SNSでシェア